python与arduino结合教学(Python:与Arduino进行交互)
python与arduino结合教学(Python:与Arduino进行交互)Arduino LED 开关电路关闭这篇文章的重心将放在如何通过串行口(通过串行口或者USB)与电脑进行连接从而使得我们能够通过Python进行编程,文中不涉及任何Arduino编程的技术细节。Arduino可以通过供应商提供的IDE来进行C语言风格的硬件语言编程。Arduino Dicemila有14个数字信号输入/输出引脚(其中6个可用作PWM输出口),6个模拟信号输入端口,一个16MHz的晶振,一个USB口,一个电源输入口,一个ICSP接口以及一个复位键。它能够很好地为微控制器提供支持。要运行它,您只需要将其通过USB与电脑连接或者用一个交流转直流的适配器(或电池)为其供电即可。对于那些懂得编程却很少与硬件打交道的人来说,Arduino是一个极其方便,有用的工具。为Arduino编写程序
Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。
什么是Arduino?
Arduino是一款拥有多个输入输出端口的开源开放式硬件可编程控制器,下图展示的是Arduino的Dicemila开发板。
Ardunio Dicemila
Arduino Dicemila有14个数字信号输入/输出引脚(其中6个可用作PWM输出口),6个模拟信号输入端口,一个16MHz的晶振,一个USB口,一个电源输入口,一个ICSP接口以及一个复位键。它能够很好地为微控制器提供支持。要运行它,您只需要将其通过USB与电脑连接或者用一个交流转直流的适配器(或电池)为其供电即可。
对于那些懂得编程却很少与硬件打交道的人来说,Arduino是一个极其方便,有用的工具。
为Arduino编写程序
这篇文章的重心将放在如何通过串行口(通过串行口或者USB)与电脑进行连接从而使得我们能够通过Python进行编程,文中不涉及任何Arduino编程的技术细节。Arduino可以通过供应商提供的IDE来进行C语言风格的硬件语言编程。
Arduino LED 开关电路关闭
Arduino LED 开关电路打开
现在我们再来增加几行代码,使得Arduino可以通过串口连接来写入信息。首先我们需要在我们的启动函数里设置传输速度(Serial.begin(9600);),然后我们就可以单纯通过串口使用Serial.print(“message ”)函数来发送信息了。关于print你可以选择print或者println,区别就在于,println会自动添加换行符。所以当你需要在一行里输入多段信息时,可以使用print。下面是我们修改后的代码。
现在,我们的代码具有了通过串口接收信息的功能了。接下来我们展示一段通过串口输入“Y”替代按钮来点亮LED灯的代码。
通过Python与Arduino进行交互
首先,我们得导入serial库来连接python与Arduino(这里面数据的传输工作将由USB来完成)
当试图连接Arduino上的/dev/ttyUSB0时,请记得通过try和except来预防错误(我们并不一定能顺利地找到USB0),9600是使用Arduino进行通信时设置的波特率(传输速度),在程序里面我们也应当将值设为9600以避免通信出现乱码。
将地址设置为 /dev/ttyUSE# (#代表的是你连接Arduino时使用的USB端口编号)以及 /dev/ttyS#(# 为串口编号)。如果不清楚Arduino的地址,可以通过IDE来查询,也可以通过python编程来遍历所有可能的地址进行排查。
需要注意的是其他的设备也可能被连接进来,例如当我试图连接 /dev/ttyS0时,我把我的笔记本连接到了我的wacom平板上。
一旦你的Arduino连接成功了,你便可以通过读写函数来收发信息(在读取数据时,你需要用到time.sleep函数)。如果你的Arduino不需要发送任何信息,那你可以使用readline函数来进行数据读取,它会使得你的程序挂起,直至收到讯息为止。
所以,我们的python代码应该变成如下的样子,并且我们已能够通过串口控制led灯。
以上代码将会发送“Y”(Y代表Yes,请打开LED灯吧)到Arduino并等待一秒钟,然后读取Arduino响应“Y”返回的信息。使用这段程序,LED灯将会被打开,Arduino会通过串口返回LED被激活的消息,当然,如果想要真正用python进行Arduino编程,这还远远不够。
参照
Arduino – Arduino的官方网站,你可以找到最详尽的Arduino编程知识(程序案例,参考资料,硬件信息)
Arduino tutorial – 一个入门级的Arduino编程教程。
Python port of arduino-serial.c – 一篇John Wiseman所写的文章,文章编程的来源(译者注:404)
original arduino-serial.c – Tod E. Kurt.
Sparkfun – 这是一个购买Arduino和其他电子元器件的好地方。如果你跟我一样来自大腐国,你可以试试coolcomponents
Dealextreme – 香港的一家零售商,经营各种实惠的DIY电子产品,并且没有最低消费限制就可以享受世界范围内包邮(666)。尽管会花两周的时间到这里(大不列颠联合腐国)
英文原文:http://www.stealthcopter.com/blog/2010/02/python-interfacing-with-an-arduino/译者:海獭先生
了解野狗,请点击阅读原文