打包为python包的arduino rpc节点。

wheeler.motor-control的Python项目详细描述


#电动机控制# OpenDrop数字微流体平台控制包

##概述

此软件包包含:

  • Firmware compatible with Arduino Uno or Mega2560.
  • Installable Python package for interfacing with Arduino firmware through serial port or i2c (through a serial-to-i2c proxy).

##安装35;

可以使用以下命令通过pip安装python包:

pip install wheeler.motor-control

##上传固件35;

要上载python包中包含的预编译固件,请运行 以下命令:

python -m motor_control.bin.upload <board type>

<board type>替换为unomega2560,具体取决于 董事会的模型。

这将尝试通过自动发现 串行端口。在具有多个串行端口的系统上,使用-p命令行 参数指定要使用的串行端口。例如:

python -m motor_control.bin.upload -p COM3 uno

##用法

将固件上载到板后,motor_control.Proxy类可以 用于与Arduino设备交互。

请参阅下面的会话日志以了解用法示例。

###交互式会话示例

>>> from serial import Serial
>>> from motor_control import Proxy

连接到串行设备。

>>> serial_device = Serial('/dev/ttyUSB0', baudrate=115200)

使用现有的串行连接初始化设备代理。

>>> proxy = Proxy(serial_device)

查询设备RAM中可用的字节数。

>>> proxy.ram_free()
409

查询设备的描述性属性。

>>> proxy.properties()
base_node_software_version                               0.9.post8.dev141722557
name                                                                  motor_control
manufacturer                                                        Wheeler Lab
url                           http://github.com/wheeler-microfluidics/open-d...
software_version                                                            0.1
dtype: object

交互使用Arduino API方法。

>>> # Set pin 13 as output
>>> proxy.pin_mode(13, 1)
>>> # Turn led on
>>> proxy.digital_write(13, 1)
>>> # Turn led off
>>> proxy.digital_write(13, 0)

查询可用频道数。

>>> proxy.channel_count()
40

查询通道数组的状态。

>>> proxy.state_of_channels
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=uint8)

打开其他频道。

>>> proxy.state_of_channels = 20 * [0, 1]

查询通道数组的更新状态。

>>> proxy.state_of_channels
array([0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
       1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1], dtype=uint8)

###配置和状态

设备存储配置状态。配置是 串行化并存储在eeprom中,允许设置在设备上持续存在 重置。状态存储在设备内存中,每次都会重新初始化 设备启动。

打印(非默认)配置值。

>>> print proxy.config
serial_number: 2
baud_rate: 115200
i2c_address: 17
>>> proxy.config.
proxy.config.max_waveform_frequency  proxy.config.max_waveform_voltage
>>> proxy.config.max_waveform_voltage
200
>>> proxy.config.max_waveform_frequency
10000

设置电压和频率。

>>> result_code = proxy.update_state(voltage=100, frequency=1e3)
>>> print proxy.state
voltage: 100.0
frequency: 1000.0

####验证35;

注意,电压或频率不允许为负值。

>>> result_code = proxy.update_state(voltage=-1)  # Negative voltage
>>> print proxy.state
voltage: 100.0
frequency: 1000.0

电压/频率更新限制在允许范围内。

>>> result_code = proxy.update_state(voltage=300)  # Voltage greater than max
>>> print proxy.state  # Voltage remains unchanged
voltage: 100.0
frequency: 1000.0

可以通过更新配置来增加最大值。

>>> result_code = proxy.update_config(max_waveform_voltage=300)
>>> result_code = proxy.update_state(voltage=300)  # Voltage now <= max
>>> print proxy.state  # Voltage changed
voltage: 300.0
frequency: 1000.0

要在设备reset-not状态中持久化对配置的更改,请使用 save_config方法。

>>> proxy.save_config()

###其他方法

下面是motor_control.Proxypython类的属性列表。注意 许多[ArduinoAPI][1]函数(例如,pin_modedigital_write, 等)通过rpc api公开。

>>> proxy.
proxy.analog_read                      proxy.microseconds
proxy.analog_write                     proxy.milliseconds
proxy.array_length                     proxy.name
proxy.base_node_software_version       proxy.on_config_baud_rate_changed
proxy.begin                            proxy.on_config_i2c_address_changed
proxy.buffer_size                      proxy.on_config_serial_number_changed
proxy.channel_count                    proxy.on_state_frequency_changed
proxy.config                           proxy.on_state_voltage_changed
proxy.delay_ms                         proxy.pin_mode
proxy.delay_us                         proxy.properties
proxy.digital_read                     proxy.ram_free
proxy.digital_write                    proxy.read_eeprom_block
proxy.echo_array                       proxy.reset_config
proxy.get_buffer                       proxy.reset_state
proxy.i2c_address                      proxy.save_config
proxy.i2c_available                    proxy.serialize_config
proxy.i2c_buffer_size                  proxy.serialize_state
proxy.i2c_read                         proxy.set_i2c_address
proxy.i2c_read_byte                    proxy.set_state_of_channels
proxy.i2c_request                      proxy.software_version
proxy.i2c_request_from                 proxy.state
proxy.i2c_scan                         proxy.state_of_channels
proxy.i2c_write                        proxy.str_echo
proxy.load_config                      proxy.update_config
proxy.manufacturer                     proxy.update_eeprom_block
proxy.max_i2c_payload_size             proxy.update_state
proxy.max_serial_payload_size          proxy.url

##固件开发

Arduino固件/草图位于motor_control/Arduino/motor_control 目录。关键功能在中的motor_control::Node类中定义 文件Node.h

运行以下命令将使用[scons][2]为 Arduino Uno和Arduino Mega2560,并将生成的固件打包为 python包,准备分发。

paver sdist

###添加新的远程过程调用(rpc)方法

通过将新方法添加到 motor_control::Node文件中的类Node.h

#作者

版权所有2015 christian fobel<;christian@fobel.net>;

[1]:https://www.arduino.cc/en/Reference/HomePage [2]:http://www.scons.org/

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

推荐PyPI第三方库


热门话题
使用jaxrpc的Java eclipse WebService客户端   java编程方式在对象上写入名称   java Spring批处理:重试后跳过   java Android错误:错误:任务执行失败:应用程序:transformClassesWithDexForDebug'   带有清单文件nullPointerException的java Android元数据   spring Java Quartz调度作业停止运行   JavaMockito:如何在不调用实际方法的情况下,模拟带有参数和无效返回类型的静态方法?   java Tomcat连接池问题无法在关闭的连接上调用方法   java如何交换列表中的项目?   java如何停止线程并通过Toast在线程中正确显示文本?   java为什么连续写入OutputStream时偏移量0不会导致重复字节?   java我无法生成头文件   不兼容的返回类型错误java   修改值后键值对的java Jolt转换规范   java有自动更新Javadoc的工具吗?   java线程如何在ints自身实例类中共享变量   java继承一个非gwt模块   java Hibernate xml配置   使用netty4异步调用的java链接HTTP请求响应