RasPi telent LED blnken

Gast #4835247
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
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 )
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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.