我是Python和Raspberry Pi的新手,并希望将它们用于Arduino的项目。基本上,我想按一个连接到Arduino的按钮,然后让该输入在树莓派上播放视频文件。
我在通过串行数据进行操作时遇到了一些困难。我可以在Arduino和Pi之间连接串行消息,即:“ Hello World”,但还不太清楚如何打开视频文件。现在,当我运行Python代码时,什么也没有出现,并且按钮的按下也没有响应。我有正确的USB端口,因为它可以与仅打印串行数据的其他程序一起使用。我该如何解决这个问题?
简而言之,最终目标是“按一个按钮->播放视频”。
Arduino代码:
int pushButton=2;
int buttonState=0;
void setup()
{
serial.Begin(9600);
pinMode(pushButton, INPUT);
}
void loop()
{
int buttonState=digitalRead(pushButton);
if (buttonState==HIGH)
{
Serial.println("a");
delay(100);
}
if (buttonState==LOW)
{
//do nothing
}
}
Python代码:
import sys
import os
from subprocess import Popen
import serial
movie1=("/home/pi/Videos/test.mp4")
ser = serial.Serial('/dev/ttyUSB0',9600)
while True:
data = ser.read()
if data=="a":
os.system('killall omxplayer.bin')
print("a")
omxc = Popen(['omxplayer','-b', movie1])
答案 0 :(得分:0)
首先,我认为不必串行发送用于通信的字符串,您可以只发送字节。
问题是,当您使用Serial.println("Something")
时要发送Something\r\n
,因此在另一台设备上应使用Something\r\n
进行检查,并且如评论中所述,您可以放置调试打印以进行确保您的数据仍然有效并且连接正常。
您还可以在python代码上添加确认以响应该命令,以确保数据已发送并且不发送其他数据。
Arduino代码:
int pushButton=2;
int buttonState=0;
void setup()
{
serial.Begin(9600);
pinMode(pushButton, INPUT);
}
void loop()
{
int buttonState=digitalRead(pushButton);
if (buttonState==HIGH)
{
Serial.print('1');
delay(100);
}
if (buttonState==LOW)
{
//do nothing
}
}
Python代码:
from subprocess import Popen
import serial
movie1 = "/home/pi/Videos/test.mp4"
ser = serial.Serial('/dev/ttyUSB0',9600)
while True:
command = ser.read()
if command:
# flush serial for unprocessed data
ser.flushInput()
print("new command:", command)
if str(command) == '1':
print("Playing movie")
Popen('killall omxplayer.bin')
Popen(['omxplayer','-b', movie1])
else:
print("Not a valid command")