使用Python(Pygame,Pynput或其他)将串行数据写入Arduino来控制伺服系统

时间:2018-03-31 00:14:12

标签: python arduino pygame pyserial pynput

首先,我是Python的新手,但我正在尝试编写一个Python程序,将串行数据写入我的Arduino,以控制伺服系统。我基本上希望我的电脑键盘充当伺服器的控制器。这个过程会是这样的:

  1. 按下一个键后,伺服将开始朝某个方向移动。
  2. 如果按住键,伺服将继续移动
  3. 一旦释放钥匙,伺服器就会停止移动。
  4. 我尝试过使用Pygame和Pynput,但我无法让它工作。我一直在使用Pyserial连接到Arduino。

    我们非常感谢您在此处提供的任何相关问题,帮助或其他链接。

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用基本的串行I / O.

我将这种设置用于我的数据记录器,偶尔需要Arduino根据数据或时钟采取行动。

示例:

假设你想使用USB端口(比如在RPi3上),假设你想发送一个命令,让Arduino发出两声长哔声。 (或者它可以触发继电器,无论如何)代码看起来像这样:

PYTHON SIDE:

#!/usr/bin/python
import serial

首先打开端口:

(通常如图所示,但对于CHG340,Arduinos更像/dev/ttyACM0

ser = serial.Serial("/dev/ttyUSB0",9600)

要从端口读取,请使用:

linein = ser.readline()

写入Arduino使用:

ser.write("A")

ARDUINO SIDE,(记住它会以类型char的形式到达)

在setup()

char cTMP;
int beePin=12;

Serial.begin(9600);
while (Serial.available()>0) cTMP=Serial.read();  // flush the buffer

然后在loop()中的某处

if (Serial.available) > 0) {
    if (serIn=='A') {
      digitalWrite(beePin,HIGH); delay(2000); digitalWrite(beePin,LOW);
      delay(2000);
      digitalWrite(beePin,HIGH); delay(2000); digitalWrite(beePin,LOW);
    }

}

我倾向于坚持使用Arduinos的单字母命令

此设置的优点在于您还可以在RPi3上运行Arduino IDE进行Arduino编程,您可以使用VNC或xrdp(使用Windows远程桌面或remmina)远程访问它。

我称之为Piduino。