首先感谢我的朋友----黄昊文先生.黄先生给我提供了一块Arduino开发板,以及很多传感器帮助我学习,没有他,就没有今天的这篇博客.
使用Arduino一般都是用它自带的开发环境IDE,好处当然是方便快捷,但是,但我在使用传感器时,如果我需要接收传感器的数据,就不那么容易了,打开串口监视器:
可以通过串口监视器查看传回的数据,但无法便捷地把数据收集起来,因此,我在想:能否用一个工具,既能调用arduino,又能收集数据呢?
于是我想到了python,我们先来看一下python调用Arduino的可行性分析:
我们进入设备管理器,可以看到,成功连接Arduino后,会出现一个名为COM3的端口
进入属性查看详细信息:
返回真值,说明可用.
在https://www.arduino.cc/里,对串口有介绍:
Serial is used for communication between the Arduino board and a
computer or other devices. All Arduino boards have at least one serial
port (also known as a UART or USART): Serial. It communicates on
digital pins 0 (RX) and 1 (TX) as well as with the computer via USB.
Thus, if you use these functions, you cannot also use pins 0 and 1 for
digital input or output.
大概意思就是:
Serial用于Arduino板与计算机或其他设备之间的通信。所有Arduino开发板都有至少一个串行端口(也称为UART或USART):Serial。它通过数字引脚0(RX)和1(TX)以及通过USB与计算机通信。因此,如果使用这些功能,则不能同时将针脚0和1用于数字输入或输出。
除此之外,我们也可以直接对arduino进行通信:
- Arduino作为一款便捷灵活、方便上手的开源电子原型平台,具有很好的兼容性.
- Firmata是用于从主机计算机上的软件与微控制器通信的通用协议。
Firmata旨在与任何主机计算机软件包一起使用。现在,存在多种语言的匹配对象。为其他软件添加对象以使用此协议很容易。基本上,此固件建立用于从主机软件与Arduino通讯的协议。目的是允许人们从主机上的软件完全控制Arduino。 - pyFirmata是用于Firmata协议的Python接口,通过这一接口,我们可以实现python与arduino之间的通信.
需要注意的是,同一串口只能使用一种通信方式,否则会出现如下报错:
serial.serialutil.SerialException: could not open port ‘COM3’:
PermissionError(13, ‘拒绝访问。’, None, 5)
好了,分析完毕,开始上代码:
这三个模块都是需要安装的,可以通过pip进行安装:
pip install pyfirmata
pip install serial
pip install time
设置要连接的串口,我这里的串口名称是COM3
设置波特率,一般为9600
开始尝试连接,设置0.5秒的延迟时间.
输出结果
下一步,用pyfirmata实现blink:
在使用pyfirmata前,我们先把serial关闭
连接名为COM3的串口
我加入了try语句,防止在断开连接的时候出现报错的情况