Python:與Arduino進行交互

Python:與Arduino進行交互
Python部落(python.freelycode.com)組織翻譯,禁止轉載,歡迎轉PO。

什麼是Arduino?

Arduino是一款擁有多個輸入輸出端口的開源開放式硬體可編程控制器,下圖展示的是Arduino的Dicemila開發板。

Python:與Arduino進行交互
Ardunio Dicemila

Arduino Dicemila有14個數字信號輸入/輸出引腳(其中6個可用作PWM輸出口),6個模擬信號輸入端口,一個16MHz的晶振,一個USB口,一個電源輸入口,一個ICSP接口以及一個復位鍵。它能夠很好地為微控制器提供支持。要運行它,您只需要將其通過USB與電腦連接或者用一個交流轉直流的適配器(或電池)為其供電即可。

對於那些懂得編程卻很少與硬體打交道的人來說,Arduino是一個極其方便,有用的工具。

為Arduino編寫程序
這篇文章的重心將放在如何通過串行口(通過串行口或者USB)與電腦進行連接從而使得我們能夠通過Python進行編程,文中不涉及任何Arduino編程的技術細節。Arduino可以通過供應商提供的IDE來進行C語言風格的硬體語言編程。

Python:與Arduino進行交互

Python:與Arduino進行交互
Arduino LED 開關電路關閉

Python:與Arduino進行交互
Arduino LED 開關電路打開
現在我們再來增加幾行代碼,使得Arduino可以通過串口連接來寫入信息。首先我們需要在我們的啟動函數裡設置傳輸速度(Serial.begin(9600);),然後我們就可以單純通過串口使用Serial.print(「message
」)函數來發送信息了。關於print你可以選擇print或者println,區別就在於,println會自動添加換行符。所以當你需要在一行裡輸入多段信息時,可以使用print。下面是我們修改後的代碼。

Python:與Arduino進行交互
現在,我們的代碼具有了通過串口接收信息的功能了。接下來我們展示一段通過串口輸入「Y」替代按鈕來點亮LED燈的代碼。
Python:與Arduino進行交互
通過Python與Arduino進行交互

首先,我們得導入serial庫來連接python與Arduino(這裡面數據的傳輸工作將由USB來完成)
Python:與Arduino進行交互
當試圖連接Arduino上的/dev/ttyUSB0時,請記得通過try和except來預防錯誤(我們並不一定能順利地找到USB0),9600是使用Arduino進行通信時設置的波特率(傳輸速度),在程序裡面我們也應當將值設為9600以避免通信出現亂碼。

Python:與Arduino進行交互
將地址設置為 /dev/ttyUSE# (#代表的是你連接Arduino時使用的USB端口編號)以及 /dev/ttyS#(# 為串口編號)。如果不清楚Arduino的地址,可以通過IDE來查詢,也可以通過python編程來遍歷所有可能的地址進行排查。

Python:與Arduino進行交互
需要注意的是其他的設備也可能被連接進來,例如當我試圖連接 /dev/ttyS0時,我把我的筆記本連接到了我的wacom平板上。

一旦你的Arduino連接成功了,你便可以通過讀寫函數來收發信息(在讀取數據時,你需要用到time.sleep函數)。如果你的Arduino不需要發送任何信息,那你可以使用readline函數來進行數據讀取,它會使得你的程序掛起,直至收到訊息為止。

Python:與Arduino進行交互
所以,我們的python代碼應該變成如下的樣子,並且我們已能夠通過串口控制led燈。

Python:與Arduino進行交互
以上代碼將會發送「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/
譯者:海獺先生

Python:與Arduino進行交互
了解野狗,請點擊閱讀原文

閱讀原文


關於作者:
我已委托「維權騎士」(rightknights.com)為我的文章進行維權行動

推薦閱讀:

》生不出男孩被婆家逼走,獨自養兩個女兒流落街頭,如今她是身價60億的水餃皇后!

》她是中國史上最強女海盜,讓多少洋人感受過被她支配的恐懼!