第一种方法:用pyFirmata实现
1.安装pyFirmata包
执行命令:pip install pyFirmata
在python2.7或python3.X下都可以执行。
pyFirmata包实现了python对Arduino进行控制的功能,它与Arduino之间通信遵循的是Firmata协议
如果pyton下运行from pyfirmata import Arduino不报错,证明安装成功
2.在Arduino IDE中为Arduino写入程序Standard Firmata.
3. 在Python IDEL中编写下面的程序
from pyfirmata import Arduino, util
import time
board = Arduino('COM8') #Arduino所在串口是COM8,这是windows下的表示
while 1:
board.digital[13].write(0) #向端口13写入0
time.sleep(1)
board.digital[13].write(1) #向端口13写入1
time.sleep(1)
运行程序,可见13引脚led闪烁。
pyFirmata程序的说明文档 https://github.com/tino/pyFirmata
第二种方法:用pymata_aio来实现
pymata_aio功能更强,它可以实现对舵机,超声模块的控制
1,安装pymata_aio
pymata_aio在python3上能顺利运行,在python2上不能顺利安装
执行命令: pip3 install pymata_aio
安装完成后,在python命令行下执行from pymata_aio.pymata3 import PyMata3,如果不报错,说明安装成功。
2,上传程序firmataplus.ino到Arduino
3, 串口连接电脑和Arduno
4, 实例程序
from pymata_aio.pymata3 import PyMata3
from pymata_aio.constants import Constants
BOARD_LED = 13
board = PyMata3(com_port="/dev/ttyACM0") #连接串口
def setup():
board.set_pin_mode(BOARD_LED, Constants.OUTPUT) #声明引脚为输出
#board.enable_analog_reporting(0)
board.set_pin_mode(0,Constants.ANALOG) #设置A0, 读模拟信号
def loop():
try:
print("LED On")
board.digital_write(BOARD_LED, 1) #写为数字1
board.sleep(1.0) #等待1秒
print("LED Off")
board.digital_write(BOARD_LED, 0) #写为数字0
board.sleep(1.0)
print( board.analog_read(0) ) #读A0,结果为0-1023的一个数
except:
board.shutdown() #关闭连接, 很有必要
if __name__ == "__main__":
setup()
while True:
loop()
5, pymata_aio网址: