一个轻量级的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)

要求:

  • python3.7在windows和macos上测试。
  • pyserial2.6或更高版本
  • 任何具有至少14KB闪存的Arduino兼容微控制器

安装:

从命令行运行pip install arduino-python3或从源目录运行python setup.py build install以安装此库。

设置:

  1. 验证Arduino板是否以 setup()prototype.ino中的函数(第407行)。如有必要,请在那里更改。
  2. 使用Arduino IDE将prototype.ino草图加载到Arduino板上。
  3. 在Arduino板和计算机之间建立某种串行I/O通信(通过物理USB电缆, 蓝牙、XBEE等+相关驱动程序)
  4. 将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功能支持(arduinowire.h命令)
  • 包含一个向导,该向导使用选定的串行波特率和Arduino功能支持生成"prototype.ino" (帮助减少内存需求)。
  • 对Arduino Mega的多串行支持(serial1.read()等)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
jenkins在java代码的csv中使用前导零传递数字   终止java应用程序javaw。exe eclipse   java平均字长。文本   java在事务中关闭连接时会发生什么?   java如何为rich faces extendedDatatable启用可调整大小的列?   SpringJavaWebApp头nosniff不适合js和css文件   Java:抛出异常   java获取拒绝ArrayList中存在的用户名的代码。   关于编写JNDI服务提供者的java教程   java Android emulator电子书示例已停止   java如何防止双向关系中的循环   在Java中,如何将接口的实现作为变量传递给方法?   java有没有办法通过注释来监听CoreNLP处理的进度?   java Eclipse错误:导入项目时“无法读取项目描述文件”   java为什么findViewById返回null?