2016-10-11 1 views
2

Ich versuche, Socket-Programmierung in Python zu schreiben. Immer wenn der Client eine Nachricht an den Server sendet, sollte die LED anfangen zu blinken. Ich laufe Server-Programm auf Raspberry Pi und Client auf dem PC.Python Socket Programmierung und LED-Schnittstelle

Hier ist der Code des Servers, der auf meinem Pi läuft.

#!/usr/bin/python    # This is server.py file 
import socket     # Import socket module 
import time 
import RPi.GPIO as GPIO  # Import GPIO library 
GPIO.setmode(GPIO.BOARD)  # Use board pin numbering 
GPIO.setup(11, GPIO.OUT)  # Setup GPIO Pin 11 to OUT 
GPIO.output(11,False)   # Init Led off 

def led_blink(): 
    while 1: 
     print "got msg"   # Debug msg 
     GPIO.output(11,True) # Turn on Led 
     time.sleep(1)   # Wait for one second 
     GPIO.output(11,False) # Turn off Led 
     time.sleep(1)   # Wait for one second 
    GPIO.cleanup() 

s = socket.socket()   # Create a socket object 
host = "192.168.0.106"  # Get local machine name 
port = 12345     # Port 
s.bind((host, port))   # Bind to the port 
s.listen(5)     # Now wait for client connection. 
while True: 
    c, addr = s.accept()  # Establish connection with client. 
    print 'Got connection from', addr 
    msg = c.recv(1024) 
    msg1 = 10 
    if msg == msg1: 
     led_blink() 
    print msg 
    c.close() 

Hier ist der Code des Clients, der auf meinem PC läuft.

#!/usr/bin/python   # This is client.py file 
import socket    # Import socket module 
s = socket.socket()   # Create a socket object 
host = "192.168.0.106" # Get local machine name 
port = 12345    # port 

s.connect((host, port)) 
s.send('10') 
s.close 

Ich kann die Nachricht vom Client empfangen, aber nicht in der Lage, die LED zu blinken. Entschuldigung, ich bin neu in der Codierung. Ich habe ziemlich gute Kenntnisse in Hardware, aber nicht in Software. Bitte helfen Sie mir.

+0

Sie vergleichen eine Zeichenfolge mit einer Zahl. Ersetzen Sie Ihren Servercode durch 'msg1 =" 10 "'. Wenn das nicht funktioniert, siehst du die "msg" in deiner Konsole? – Goufalite

+1

Innerhalb Ihrer 'led_blink()' Funktion ist eine 'while 1' Schleife. Ist das deine Absicht? – rocksteady

+0

Yeah !! Nach dem Ersetzen durch eine Schnur kann ich die LED blinken lassen. Danke – Arunkrishna

Antwort

0

Sie vergleichen eine Zeichenfolge "10" mit einer Nummer 10. Ändern Sie den Servercode in:

msg1 = "10" 
1

Versuchen Sie diese auf Ihrem PC oder Himbeere und dann entsprechend bearbeiten:

#!/usr/bin/python    # This is server.py file 
import socket     # Import socket module 

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

s = socket.socket()   # Create a socket object 
host = "127.0.0.1"  # Get local machine name 
port = 12345     # Port 
s.bind((host, port))   # Bind to the port 
s.listen(5)     # Now wait for client connection. 
print "Listening" 
c, addr = s.accept()  # Establish connection with client. 
while True: 
    msg = c.recv(1024) 
    print 'Got connection from', addr 
    if msg == "Exit": 
     break 
    led_blink(msg) 
c.close() 

und:

#!/usr/bin/python   # This is client.py file 
import socket, time    # Import socket module 
s = socket.socket()   # Create a socket object 
host = "127.0.0.1" # Get local machine name 
port = 12345    # port 
s.connect((host, port)) 
x=0 
for x in range(10): 
    s.send('Message_'+str(x)) 
    print x 
    time.sleep(2) 
s.send('Exit') 
s.close 

Bitte beachte, dass ich benutze sowohl die Server- und Client auf demselben Rechner 127.0.0.1 und entfernte die GPIO Bits, da ich sie nicht verfügbar habe.

+0

Diese Antwort löst die Endlosschleife in der 'led_blink()' Funktion auf: Am Ausgang kann 'GPIO.cleanup()' aufgerufen werden! – Goufalite