一个轻量级的python库,为与arduino微控制器板通信提供串行桥。扩展到使用python 3
arduino-python3的Python项目详细描述
Arduino-Python3命令API
这个api是从最初的python-arduino-command-api派生而来的,以添加对python 3的支持。
Arduino-Python3命令API是用于 使用连接的计算机与Arduino微控制器板通信 标准串行IO,通过物理线路 或者无线的。它是使用自定义协议编写的,类似于firmata
这允许用户使用python代码为arduino快速创建程序原型,或者 简单的读取/控制/故障排除/实验 硬件连接到Arduino板而无需重新编译草图并将其重新加载到板本身。
Arduino-Python3命令API中的方法名设计为 尽可能与Arduino编程语言对应
简单使用示例(LED闪烁)
#!/usr/bin/env python""" Blinks an LED on digital pin 13 in 1 second intervals"""fromArduinoimportArduinoimporttimeboard=Arduino()# plugged in via USB, serial com at rate 115200board.pinMode(13,"OUTPUT")whileTrue:board.digitalWrite(13,"LOW")time.sleep(1)board.digitalWrite(13,"HIGH")time.sleep(1)
要求:
安装:
从命令行运行pip install arduino-python3
或从源目录运行python setup.py build install
以安装此库。
设置:
- 验证Arduino板是否以
setup()
prototype.ino中的函数(第407行)。如有必要,请在那里更改。 - 使用Arduino IDE将
prototype.ino
草图加载到Arduino板上。 - 在Arduino板和计算机之间建立某种串行I/O通信(通过物理USB电缆, 蓝牙、XBEE等+相关驱动程序)
- 将Arduino中的
导入Arduino
添加到Python脚本中以与Arduino通信
有关示例的集合,请参见examples.py
。此文件包含复制
许多Arduino演示草图的功能。
测试:
tests
目录包含库的一些基本测试。对于每个版本来说,广泛的代码覆盖率都有点难以预期,因为一个积极的测试实际上涉及到
连接并发出命令到实时Arduino,托管任何硬件
测试特定功能所必需的。但基本沟通测试的核心
在合并到master
分支之前,至少应在此处维护并使用它。
安装后,可以从源目录运行交互式测试:
$ python tests/test_main.py
可以使用以下命令从源目录运行自动测试:
$ python tests/test_arduino.py
课程
arduino(波特)
-设置与当前连接并通电的通信 Arduino.
board=Arduino("115200")#Example
将自动检测连接的Arduino的设备名/COM端口。 如果有多个Arduino板连接, 所需的COM端口也可以作为可选参数传递:
board=Arduino("115200",port="COM3")#Windows example
board=Arduino("115200",port="/dev/tty.usbmodemfa141")#OSX example
读取Arduino的超时也可以指定为可选 参数:
board=Arduino("115200",timeout=2)#Serial reading functions will#wait for no more than 2 seconds
方法
数字I/O
arduino.digitalwrite(管脚号,状态)
打开/关闭数字管脚arduino.digital read(管脚号)
数字管脚的读取状态
#Digital read / write exampleboard.digitalWrite(13,"HIGH")#Set digital pin 13 voltagestate_1=board.digitalRead(13)#Will return integer 1board.digitalWrite(13,"LOW")#Set digital pin 13 voltagestate_2=board.digitalRead(13)#Will return integer 0
arduino.pin mode(pin_编号,i o_模式)
设置pin i/o模式arduino.pulsein(管脚号,状态)
测量脉冲arduino.pulsein_set(管脚号,状态)
通过预处理测量脉冲>
#Digital mode / pulse exampleboard.pinMode(7,"INPUT")#Set digital pin 7 mode to INPUTduration=board.pulseIn(7,"HIGH")#Return pulse width measurement on pin 7
模拟I/O
arduino.AnalogRead(针数)
返回模拟值arduino.AnalogWrite(管脚号,值)
设置模拟值
#!/usr/bin/env python""" Blinks an LED on digital pin 13 in 1 second intervals"""fromArduinoimportArduinoimporttimeboard=Arduino()# plugged in via USB, serial com at rate 115200board.pinMode(13,"OUTPUT")whileTrue:board.digitalWrite(13,"LOW")time.sleep(1)board.digitalWrite(13,"HIGH")time.sleep(1)0
移位寄存器
arduino.shift in(数据针、时钟针、位序)
移入一个字节并返回它arduino.shift out(数据管脚、时钟管脚、位序、值)
将给定字节移出
位顺序
应为"msbFirst"
或"lsbFirst"
伺服库功能 最多可支持8个伺服系统。
arduino.servos.attach(pin,min=544,max=2400)
创建伺服实例。一次只能使用8个伺服系统。arduino.servos.read(pin)
返回连接到指定pin的伺服角度arduino.servos.write(针,角度)
将针上的附加伺服移动到指定角度arduino.servos.write microseconds(pin,us)
在指定的pin上以微秒为单位向伺服写入值arduino.servos.detach(销)
分离指定销上的伺服
#!/usr/bin/env python""" Blinks an LED on digital pin 13 in 1 second intervals"""fromArduinoimportArduinoimporttimeboard=Arduino()# plugged in via USB, serial com at rate 115200board.pinMode(13,"OUTPUT")whileTrue:board.digitalWrite(13,"LOW")time.sleep(1)board.digitalWrite(13,"HIGH")time.sleep(1)1
软件串行功能
arduino.softwarserial.begin(ss_rxpin,ss_txpin,ss_device_baud)
初始化软件串行设备 指定的管脚。 一次只能使用一个软件串行设备。现有的软件串行实例将 在python和arduino板上调用此方法将被覆盖。arduino.softwareserial.write(data)
使用arduino"write"功能将数据发送到现有软件 串行连接。arduino.softwarserial.read()
从现有软件串行连接返回一个字节
#!/usr/bin/env python""" Blinks an LED on digital pin 13 in 1 second intervals"""fromArduinoimportArduinoimporttimeboard=Arduino()# plugged in via USB, serial com at rate 115200board.pinMode(13,"OUTPUT")whileTrue:board.digitalWrite(13,"LOW")time.sleep(1)board.digitalWrite(13,"HIGH")time.sleep(1)2
EEPROM
arduino.eeprom.read(address)
从eeprom读取一个字节arduino.eeprom.write(地址、值)
向eeprom写入一个字节arduino.eeprom.size()
返回EEPROM的大小
#!/usr/bin/env python""" Blinks an LED on digital pin 13 in 1 second intervals"""fromArduinoimportArduinoimporttimeboard=Arduino()# plugged in via USB, serial com at rate 115200board.pinMode(13,"OUTPUT")whileTrue:board.digitalWrite(13,"LOW")time.sleep(1)board.digitalWrite(13,"HIGH")time.sleep(1)3
其他
arduino.close()
关闭到arduino的串行连接。
待办事项列表:
- 展开软件串行功能(
print()
和println()
) - 添加简单的重置功能,将所有管脚值归零
- 增加I2C/TWI功能支持(arduino
wire.h
命令) - 包含一个向导,该向导使用选定的串行波特率和Arduino功能支持生成"prototype.ino" (帮助减少内存需求)。
- 对Arduino Mega的多串行支持(
serial1.read()
等)