RasPi telent LED blnken

Gast #4835247
Lesenswert?

Hallo, ich möchte gerne auf dem RaspberryPi eine LED über telnet 
ansteuern.

Dazu habe ich dieses Script gefunden:
http://stackoverflow.com/questions/39973653/python-socket-programming-and-led-interfacing
1
#!/usr/bin/python             # This is server.py file
2
import socket                 # Import socket module
3

4
def led_blink(msg):
5
        print "got msg", msg         # Debug msg
6

7
s = socket.socket()           # Create a socket object
8
host = "127.0.0.1"        # Get local machine name
9
port = 12345                  # Port
10
s.bind((host, port))          # Bind to the port
11
s.listen(5)                   # Now wait for client connection.
12
print "Listening"
13
c, addr = s.accept()       # Establish connection with client.
14
while True:
15
    msg = c.recv(1024)
16
    print 'Got connection from', addr
17
    if msg == "Exit":
18
        break
19
    led_blink(msg)
20
c.close()
Ich kann damit die Verbindung zum RasPi herstellen, aber wenn ich den 
Code richtig verstehe, sollte das senden von "Exit" den Server beenden. 
Das tut er aber nicht, er bleibt immer im Empfangsmodus.
Wenn man den Server manuell mit CTRL-C beendet, ist der Port beim 
nächsten Start blockiert und man muss einen anderen nehmen.

Weiß jemand Rat?
Gast #4835306
Lesenswert?

Danke für die Antwort. Du hast Recht, das war das Problem.

Ich habe den Code jetzt so geändert und die LED blinkt jetzt.

1
#!/usr/bin/python             
2
# modified from
3
# http://stackoverflow.com/questions/39973653/python-socket-programming-and-led-interfacing
4

5

6
import socket                 # Import socket module
7
import time
8
import RPi.GPIO as GPIO
9

10
ARDUINO_LED = 4 # Raspberry GPIO 4
11

12
GPIO.setmode(GPIO.BCM)  # set board mode to Broadcom
13
GPIO.setup(4, GPIO.OUT)
14

15
def led_blink(msg):
16
    print "got msg", msg         # Debug msg
17
    GPIO.output(ARDUINO_LED, GPIO.HIGH)
18
    time.sleep(0.1)
19
    GPIO.output(ARDUINO_LED, GPIO.LOW)
20

21
s = socket.socket()           # Create a socket object
22
host = ''                     # all interfaces
23
port = 5004                   # Port
24
s.bind((host, port))          # Bind to the port
25
s.listen(5)                   # Now wait for client connection.
26
print "Listening"
27
c, addr = s.accept()          # Establish connection with client.
28

29
while True:
30
    msg = c.recv(1024)
31
    print type(msg)
32
    print map(ord,msg)
33
    print 'Got connection from', addr
34
    if msg[0:4] == "Exit":
35
        print "EXIT !!"
36
        break
37
    led_blink(msg)
38
c.close()

Jetzt bin ich mal gespannt, welche maximal Blink-Rate ich mit der 
TCP-Verbindung erreichen kann. ( Eine Art Led Ping )
#4835393
Lesenswert?

Eventuell solltest du statt direkt recv zu verwenden, zuerst mit 
c.makefile() eine File stream erzeugen, und davon mit readline lesen. 
TCP ist ein Stream, und TCP Packete können unterwegs und nach dem 
Empfang aufgespalten oder Zusammengesetzt werden. Also wenn "test" und 
"hallo" gesendet wird, könnte es z.B. als "te" "stha" und "llo" 
empfangen werden. Wenn man daraus aber ein File macht und mit readline 
zeilen liest, sollte readline immer ganze Linien zurückliefern.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren