第1步:计算机环境
在计算机方面,我们将使用一个称为pyserial的python模块。巧合的是,pyserial允许通过python使用串行连接。在windows上安装pyserial是一个非常简单的过程。 注意:此“假设”假设您已安装python 2. *!如果您不这样做,pyserial仍然可以使用,但是您可能需要稍微更改代码以适应新标准。
要在windows上安装,只需访问pyserial的下载页面,下载windows二进制文件并运行它(在撰写本文时为pyserial-2.7.win32.exe)。然后,通过打开新的python解释器实例并运行以下命令来测试安装:
import serial
步骤2:初始连接
要从python启动与arduino的连接,我们首先必须确定arduino处于哪个 com端口。幸运的是,ardunio编程环境使此任务变得简单。
只需查看arduino ide的右下角,您将看到一些包含com端口号的文本。我们将使用它来启动我们的python串行连接,如下所示:
arduino = serial.serial(‘com1’, 115200, timeout=.1)
上面的代码将在“ com1”上使用“ 115200”波特创建一个名为“ ardunio”的新串行对象,速率和.1秒超时。保持选定的波特率非常重要,因为它必须与ardiuno端的波特率完全匹配。
第3步:ardiuno与python的通信
在ardunio和python之间进行通信比通过其他方式更容易。首先,我们需要一些代码来启动ardunio的串行连接,并传递一条消息。我们可以使用arduino的serial.write()函数来做到这一点,就像这样:
void setup() {
serial.begin(115200); // use the same baud-rate as the python side
}
void loop() {
serial.println(“hello world from ardunio!”); // write a string
delay(1000);
}
这段代码将编写一个“来自ardunio的hello world!”。每秒一次连接到串行连接。现在,我们将构建一个python脚本,该脚本能够接收这些消息,并根据需要对其进行处理。首先,我们必须像上一页一样启动连接,然后创建一个循环,该循环从流中获取当前信息,并将其打印到控制台。
import serial
arduino = serial.serial(‘com1’, 115200, timeout=.1)
while true:
data = arduino.readline()[:-2] #the last bit gets rid of the new-line chars
if data:
print data
请注意,在这种情况下,readline()处于阻塞状态,因此它将等待直到新行完全通过串行缓冲区为止。通常,readline()会占据空白行,因此我放入了if语句来检查数据是否实际包含任何内容。如果您想更精确地获取非阻塞数据,则可以在arduino端使用read()并使用serial.write()(用于字节)或serial.print()(用于ascii字符),但是您需要
第4步:python与arduino通讯
这一步有点难,因为这需要我们在事物的arduino方面解析数据。为了帮助加快速度,我继续编写了一个简单的循环,该循环从serial缓冲区中获取当前数据,并创建一个以null结尾的字符串(c字符串),然后将其传递回serial连接。您可以使用此技术来编写实际的解析器,方法是指定自己的数据包前缀和后缀,然后在串行缓冲区中扫描这些内容,并相应地创建字符串。
void setup() {
serial.begin();
}
void loop() {
if(serial.available() 》 0) {
char data = serial.read();
char str[2];
str[0] = data;
str[1] = ‘’;
serial.print(str);
}
}
现在我们可以编写一个简单的脚本,将数据从python发送到arduino,然后打印出返回的内容。
import serial, time
arduino = serial.serial(‘com1’, 115200, timeout=.1)
time.sleep(1) #give the connection a second to settle
arduino.write(“hello from python!”)
while true:
data = arduino.readline()
if data:
print data.rstrip(‘ ’) #strip out the new lines for now
# (better to do .read() in the long run for this reason
不难看出如何进一步扩展此方法以允许两个设备之间进行复杂的通信。我将在以后的“ ible”中介绍这种通信的一个示例,在该示例中,我将制作一种能够在任何pc游戏上工作的游戏手柄设备!
快递送上门却不在家?或许你可以试试这款沃尔玛的智能锁
2019年大数据市场新趋势 AI成为主流
LoongArch和RISC-V对比分析
汽车内部噪声智能控制系统电路模块设计
智能电网与电子式互感器及电力一次设备在线监测
怎样通过USB进行Arduino Python通信
线程与蓝牙:物联网连接的 VHS 与 Betamax?
BS EN 50081-耐黄变测试箱的详细说明
示波器电压探头电路原理详解
土豪华为或将开发使用石墨烯快充技术,20秒充满,打败三星苹果
LG 电子正在研发下一代汽车智能前照灯
胶水粘接工艺及UL94-V0密封粘接胶水
小米6、坚果pro、三星S8、小米mix都是国产旗舰机你选谁?小米6、坚果pro、三星S8、小米mix对比评测
路上太堵了 马斯克:飞不起来就开公司挖地道吧!
xAI将充分利用“马斯克生态圈”
力科发布应对电力电子环境测试挑战的高压差分探头
AIGC是什么 AIGC有哪些应用价值
华为工业自动化领域的实践已获行业权威机构认可
苹果将开始执行新的跟踪透明度规则
首发骁龙835,索尼XZ旗舰新机发布,售价4800元起!