【问题标题】:Using Python (Pygame, Pynput or something else) to write serial data to Arduino to control servos使用 Python(Pygame、Pynput 或其他)将串行数据写入 Arduino 以控制舵机
【发布时间】:2018-03-31 00:14:11
【问题描述】:

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

  1. 一旦按下某个键,伺服器就会开始向某个方向移动。
  2. 如果按住键,伺服将继续移动
  3. 一旦松开按键,舵机将停止移动。

我尝试过使用 Pygame 和 Pynput,但我无法让它工作。我一直在使用 Pyserial 连接到 Arduino。

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

【问题讨论】:

  • 排序,但我不确定他/她是否使用键盘输入然后写入 arduino。不过,我需要进一步研究。

标签: python arduino pygame pyserial pynput


【解决方案1】:

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

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

示例:

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

Python 端:

#!/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 类型到达)

在设置()中

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。

【讨论】:

  • 是的,我打算用类似的东西来控制伺服系统。最大的问题是接受键盘输入,然后 ser.writing 。当我按下键盘上的 a 时,如何让它向 arduino 发送一个“a”,然后在我释放它时发送另一个“a”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多