文档章节

使用FirmATA操作硬件

openthings
 openthings
发布于 2016/02/15 09:55
字数 725
阅读 226
收藏 0

 

在Arduino使用FirmATA(http://firmata.org/)通用固件,然后在PC上使用Python通过串口通讯可以直接操作硬件(http://playground.arduino.cc/Interfacing/Python)。尤其是与"树莓派+Linux"的结合,可以将树莓派扩展为物理操作控制中心,对物联网、无人机、机器人等应用提供通用的支持。当然,FirmATA只是一个基于串口的API接口,与ATA接口类似,可以使用任何编程语言访问。

利用FirmATA抽象化硬件,首先需要建立测试环境。首先要用成熟的PC应用来测试固件,然后用固件配合开发Android类库和应用。在连接到移动设备之前,我习惯采用Python来测试MiniKit。

 Firmata for Python

现有两个Python Firmata库:

pyduino:http://code.google.com/p/pyduino/(依赖于pySerial,实现v2.0)

pyFirmata:https://github.com/tino/pyFirmata(依赖pySerial,实现v2.1,支持Python3)

目测了两者代码。pyduino的库pyduino.py只有10KB,最近更新时间为2009年(可以作为重要的参考)。更像MCU开发者编写的。

而pyFirmata更加完整一些,最近更新时间为2013年,似乎使用了一些高级Python技巧。比如自动测试一类的。并可以定制BOARDS参数。更加适合我们测试使用。因为LPC812MiniKit可以支持多个Profile。

两者都定义了Arduino类,不过我们可以参考pyFirmata实现GAPmini类。虽然Firmata的确是为Arduino定制的。但是如果拓展到其他平台的话,应该起一个独立性强一些的名称。

 pyFirmata的使用

 在boards.py和__init__.py中增加LPC812Min/LPC812Max/LPC812MixMin几种电路板配置(Profile)。

 感谢pyFirmata的作者Tino(荷兰籍)提供了几种测试程序。

最基本的测试程序LPC812_Firmata_Blink.py:

from pyfirmata import LPC812Min, util
from pyfirmata import BOARDS
import time

print '>>>> 5 second delay for firmata initial'
print '>>>> Press reset to go'
board = LPC812Min('COM27', baudrate=115200)
print '>>>>',str(board)

board.sp.setDTR(1) # set LOWtime.sleep(0.1)
board.sp.setDTR(0) # set HIGH, LOW to High to reset

layout = BOARDS['lpc812_min']
print ">>>> Board layout"
print str(layout)

board.setup_layout(layout)
(major,minor) = board.get_firmata_version()
print ">>>> Version: %d.%d"%(major,minor)
print ">>>> Firmware name: %s"%(board.firmware)

pin17 = board.get_pin('d:17:o')
while True:
   try:
          pin17.write(1)
          board.pass_time(2)
          pin17.write(0)
          board.pass_time(2)
    except KeyboardInterrupt:
          print ">>>> User interrupt."
board.exit()
print 'Exit it.'

目前已经测试通过基本的Firmata通讯。测试完毕后,会上传到Github,并请求原作者合并。

 【更新】

已经完成基本的Digital In(可用于键盘处理)和Digital Out(用于LED闪烁)。PWM输出(如LED亮度和颜色变化)和模拟输入(如ADC采样)需要再更新固件支持。


© 著作权归作者所有

共有 人打赏支持
openthings
粉丝 266
博文 994
码字总数 532676
作品 1
东城
架构师
私信 提问
Node.js 串口读写包--node-serialport

node-serialport 是一个 Node.js 的包,用来对串口数据进行读写操作。 基本示例代码: var SerialPort = require("serialport").SerialPortvar serialPort = new SerialPort("/dev/tty-usbse......

红薯
2015/02/01
8.5K
3
如何用 JavaScript 控制 Arduino?

Arduino 运行 C 语言,而主控端运行 JavaScript,一次要编写和维护两种程序。既然浏览器和服务器都用 JavaScript,若 Arduino 也能用 JavaScript 控制,那岂不完美? 这就是 Rick Waldron 设...

tangxiaoyin
2017/09/30
0
0
Arduino API 连接协议--firmata.py

Firmata.py 能够实现功能查询和 I2C 协议,为连接到 Arduino 开发板提供一个易于使用的 API 接口。

大胖森
2015/04/15
981
0
Arduino编程参考手册-官方文档

本文档由Arduino官方文档翻译而来,感谢作者:柴树杉[翻译整理] (chaishushan@gmail.com ) Arduino开发语言提供全部的C语言特性和C++语言的部分特性. 通过链接到 AVR的libc库online~, 可以使用...

小堤
2013/05/30
0
0
Cosmos的库--C#开源操作系统学习系类五

接上文,争取这一次打通操作系统开发的任督二脉~~~嘿嘿 库对于大家来说都不陌生,我们做C开发时会引入标准输入输出头文件stdio.h,做MFC开发时又会引入afx.h头文件,使用DirectX做游戏开发时...

李恒哲
2011/04/21
0
1

没有更多内容

加载失败,请刷新页面

加载更多

solr使用规范

0. 目的 规范solr设计、用法,避免bug,提高性能 1. 设计规范 solr的用途是查询,不是存储,建议查询结果尽量都为id主键,而后再拿该id主键到缓存或者db中再查询相关信息,例如:请勿将经销商...

andersChow
27分钟前
1
0
11-《深度拆解JVM》之Java对象的内存布局

一、问题引入 在 Java 程序中,我们拥有多种新建对象的方式。除了最为常见的 new 语句之外,我们还可以通过反射机制、Object.clone 方法、反序列化以及 Unsafe.allocateInstance 方法来新建对...

飞鱼说编程
31分钟前
1
0
Windows Install Docker

win7、win8 win7、win8 等需要利用 docker toolbox 来安装,国内可以使用阿里云的镜像来下载,下载地址:http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/ docker toolbox...

linuxprobe16
35分钟前
1
0
混合云环境中扩展Kubernetes的挑战及方案

流量突增时,我们需要扩展应用程序以满足用户需求。本文分享了扩展Kubernetes以及管理混合云环境时可能遇到的挑战,以及如何简单高效地完成Kubernetes扩展。 引 言 假设您的业务是在线的:您...

RancherLabs
44分钟前
1
0
Java集合小抄

Java集合小抄 1. List 1.1 ArrayList 以数组实现。节约空间,但是数组有容量限制。超出限制时会增加50%容量,用System.arraycopy()复制到新的数组。因此最好能给出数组大小的预估值。默认第一...

傅小水water
51分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部