Raspberry Pi Последовательная связь с Arduino с Python - PullRequest
0 голосов
/ 06 ноября 2018

Я хочу общаться между Raspberry Pi и Arduino, используя Python. До сих пор Arduino успешно отправляет последовательное сообщение Raspberry Pi, и сообщение читается с помощью функции ser.readline () в Python. Но когда я хочу моргнуть светодиодом, подключенным к Raspberry Pi с заявлением IF, это не сработает

Функция blink () и все остальное работает, но код не попадет в оператор IF, который проверяет значение ser.readline () со строкой переменная

Это код моего Arduino:

 String data="hello";

 void setup() {
 // put your setup code here, to run once:
 Serial.begin(9600);
 }

 void loop() {
 // put your main code here, to run repeatedly:
 Serial.println(data);//data that is being Sent
 delay(5000);
 }

И это код Python, который работает на моем Raspberry Pi:

 import serial
 import RPi.GPIO as GPIO
 import time

 LedPin = 11    # pin11
 ser=serial.Serial("/dev/ttyUSB0",9600)  #change ACM number as found from ls /dev/tty/ACM*
 ser.baudrate=9600
 def setup():
    GPIO.setmode(GPIO.BOARD)       # Set the board mode to numbers pins by physical location
    GPIO.setup(LedPin, GPIO.OUT)   # Set pin mode as output
    GPIO.output(LedPin, GPIO.HIGH) # Set pin to high(+3.3V) to off the led

 def blink():
            print 'led on'
            GPIO.output(LedPin, GPIO.LOW)   # led on
            time.sleep(1.0)                 # wait 1 sec
            print 'led off'
            GPIO.output(LedPin, GPIO.HIGH)  # led off
            time.sleep(1.0)                 # wait 1 sec


 setup()
 while True:
    serialmessage = ser.readline()
    print("serial message is " + serialmessage)

if serialmessage == "hello":
    print("message recieved")
    blink()

Вот что я вижу в терминале: terminal_image

Я искал часы, пытаясь найти решение, но безуспешно. Я также только начал программировать на Python. Спасибо за ваше время.

1 Ответ

0 голосов
/ 14 ноября 2018
import serial                                                                                          
import RPi.GPIO as GPIO                                                                                
import time                                                                                            

LedPin = 11    # pin11                                                                                 
ser=serial.Serial("/dev/ttyUSB0",9600)  #change ACM number as found from ls /dev/tty/ACM*              
ser.baudrate=9600                                                                                      
def setup():                                                                                           
   GPIO.setmode(GPIO.BOARD)       # Set the board mode to numbers pins by physical location            
   GPIO.setup(LedPin, GPIO.OUT)   # Set pin mode as output                                             
   GPIO.output(LedPin, GPIO.HIGH) # Set pin to high(+3.3V) to off the led                              

def blink():                                                                                           
           print 'led on'                                                                              
           GPIO.output(LedPin, GPIO.LOW)   # led on                                                    
           time.sleep(1.0)                 # wait 1 sec                                                
           print 'led off'                                                                             
           GPIO.output(LedPin, GPIO.HIGH)  # led off                                                   
           time.sleep(1.0)                 # wait 1 sec                                                


setup()                                                                                                
while True:                                                                                            
   serialmessage = ser.readline()                                                                      
   print("serial message is " + serialmessage)                                                         

   if serialmessage == "hello":                                                                        
       print("message recieved")                                                                       
       blink()

Python использует интервалы для обнаружения блоков кода.

Вам нужно поместить оператор if с вызовом метода blink внутри цикла while.

Также вы можете проверить входящие последовательные данные, запустив команду на Raspberry pi

sudo cat /dev/ttyUSB0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...