国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

談如何用Python控制Arduino

2016-05-14 02:09:32羅亮陳紅盧解卿
中國信息技術教育 2016年8期
關鍵詞:程序代碼主控板下位

羅亮 陳紅 盧解卿

Python是一種面向對象、解釋型計算機程序設計語言,它的設計哲學是優(yōu)雅、明確、簡單。因為其開源免費的精神與簡單易學的特點,自1989年問世以來,尤其是2004年以后,Python的使用率呈線性增長并被TIOBE編程語言排行榜評為2010年度語言。

Arduino是一款便捷靈活、方便上手的開源電子原型平臺,它包含可以用來做電路連接的Arduino電路板和配套的程序開發(fā)環(huán)境(Arduino IDE)。基于Arduino的項目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上運行的軟件,如Processing、VB、Python等。

當我們使用Python語言通過串口控制Arduino讀取設備狀況并實施控制的時候,就構成了上位機下位機系統(tǒng)。安裝有Python之類軟件實施控制的計算機為上位機,能夠控制設備并獲取設備狀況的Arduino為下位機,它們相互之間可以通過串行口或無線的方式進行通訊,進而實現(xiàn)控制與被控制。

安裝Python

Python主要分為兩大類,即Python2和Python3。Python2是目前應用最廣泛的一個版本,最新版本號為2.7.11,適合初學者學習使用。Python3相對于Python2而言,有很多接口發(fā)生了變化并且可用的第三方庫不多且不成熟,雖然它代表以后的發(fā)展趨勢,但還是不建議初學者使用。Python下載地址為:https://www.python.org/downloads/。本例是下載了2.7.11版本,文件名為python-2.7.11.msi,安裝在文件夾“C:\Python27”,安裝過程中注意在如圖1的設置中添加可執(zhí)行文件搜索路徑。

安裝Arduino

Arduino主控板部分可在淘寶網(wǎng)上通過關鍵詞“arduino uno”“arduino mini”“arduino mega”搜索購買。Arduino集成開發(fā)環(huán)境(Arduino IDE)可訪問“https://www.arduino.cc/en/Main/Software”,根據(jù)需要下載安裝,最新版本為1.6.7,歷經(jīng)Arduino 00xx、Arduino 1.0.x、1.5.x BETA、Arduino 1.6.x四個系列的版本。本例硬件使用了Arduino Uno,軟件使用了Arduino1.5.8版本。軟件安裝在文件夾“C:\arduino158”,當Arduino Uno主控板與計算機通過USB連接后,需要安裝驅動,驅動文件默認在文件夾“C:\arduino158\drivers”,安裝完成后,在設備管理器中可以看到Arduino Uno占用的串行端口號,如圖2所示。

安裝Pyserial

Pyserial是協(xié)助Python控制串口通訊的第三方庫。pyserialv2.7下載地址為:http://sourceforge.net/projects/pyserial/,pyserialV3.0下載地址為:https://github.com/pyserial/pyserial。

若非Windows 64位操作系統(tǒng),下載pyserial-2.7.win32.exe直接安裝即可,否則需要使用pyserial-2.7.tar.gz文件手動進行安裝。安裝方法為:將pyserial-2.7.tar.gz解壓至C盤根目錄后,運行CMD命令,進入文件夾“C:\ pyserial-2.7”,執(zhí)行安裝命令:“python setup.py install”。具體執(zhí)行過程可參考圖3的步驟。

啟動Arduino IDE作為下位機進行通訊調(diào)試

當Arduino主控板連上PC主機并安裝好相應的驅動程序后,我們使用鼠標雙擊Arduino安裝文件夾中的arduino.exe可以達到啟動Arduino集成編輯環(huán)境的目的。

啟動完成后,可通過菜單“file→preferences”設置中文環(huán)境,通過菜單“工具→板”設置“Arduino Uno”,“工具→端口”設置“Com3(Arduino Uno)”。如表1所示,輸入相關程序代碼后,點擊“上傳”按鈕燒錄程序至Arduino主控板中。啟用串口監(jiān)視器后,根據(jù)程序代碼,輸入字符o,點擊按鈕“發(fā)送”可以發(fā)現(xiàn)Arduino主控板與數(shù)字引腳13相連的Led燈會變亮,輸入字符c,點擊按鈕“發(fā)送”可以發(fā)現(xiàn)Arduino主控板與數(shù)字引腳13相連的Led燈會停止發(fā)光。具體程序代碼的功能,請查看表1中相應的注釋。

啟動Python并進行初步通訊調(diào)試

安裝完成Python運行與編輯環(huán)境及涉及串口通訊的第三方庫pyserial后,通過“開始→所有程序→Python 2.7→IDLE(Python GUI)”或“Python(command line)”直接啟動Python,亦可以找到Python安裝文件夾下的“python.exe”雙擊啟動。啟動完成后,在命令提示符“>>>”下依次輸入import serial、ser=serial.Serial(2)、ser.write(“o”)、ser.write(“c”)等命令就可以實現(xiàn)對Arduino主板上與數(shù)字引腳13相連Led燈的控制,ser.close()關閉打開的串行口,exit()退出Python運行環(huán)境。

注意:本例Arduino使用串行口3,故serial.Serial()中的參數(shù)為2,參數(shù)始終比串行口序號小1。

有關pyserial的詳細用法,可以參考http://pythonhosted.org/pyserial/。以下的例子是先定義串行口ser,然后再對串行口ser進行配置。

趣味拓展:隨論壇在線人數(shù)變化的燈

我們在訪問論壇時,經(jīng)常會看到類似的統(tǒng)計數(shù)據(jù):。結合Python和Arduino各自擅長的功能,可以輕松做到讀取在線人數(shù)并根據(jù)在線人數(shù)多少決定亮燈情況。表2所示代碼是簡化情況,我們可以根據(jù)需要修改Python及相應的Arduino程序,讓亮燈更加人性化。

尤其應引起注意的是:①字符編碼問題。安裝chardet模塊,可以準確知道網(wǎng)絡中獲取字符的編碼,從而正確處理。②多空一行。Python構成語句塊的代碼需要多增加一個空行。詳見第18行代碼。③適當延時。在程序執(zhí)行方式下,串行口對象ser來不及初始化,就迅速執(zhí)行后面代碼,導致無效write,當加了第13行代碼后,則一切正常。④確保論壇首頁有“總計”“人在線”相關關鍵字,若無,請根據(jù)實際情況修改。

后記

Python第三方庫——pyserial提供了豐富的函數(shù)對串行口進行操作,從而使Phthon能夠很方便地對Arduino進行通訊。

在編寫程序代碼進行控制的過程中,要注意Python、Arduino使用同樣的通訊速率并且不要太大,建議都使用9600,否則容易出現(xiàn)數(shù)據(jù)錯誤。

經(jīng)過試驗,若上位機PC、下位機Arduino均安裝藍牙,亦可以使用pyserial進行無線通訊達到控制的目的,有興趣的同仁可以自行嘗試。

Python的GUI編程似乎并不容易上手,其內(nèi)建的Tkinter只能進行簡單GUI布局,若要做到VB集成開發(fā)環(huán)境所見即所得的效果,估計還需要安裝wxPython、Jython之類第三方庫才能做到。圖4是使用Python的Tkinter構建的控制Arduino主控板Led燈GUI界面,相關程序可聯(lián)系linkall@sina.com取得。

猜你喜歡
程序代碼主控板下位
一種快速可靠的主控冗余及切換機制的設計與實現(xiàn)
發(fā)射機房監(jiān)控系統(tǒng)之下位機
升級雙主控板交換機ISO
計算機網(wǎng)絡信息安全未來發(fā)展趨勢
基于圖元裝接模式由程序流程圖自動生成源代碼
軟件工程(2016年11期)2017-01-17 16:56:57
變頻器檢測臺的設計、制作及主控板的維修
電子制作(2016年11期)2016-11-07 08:43:30
景洪電廠監(jiān)控系統(tǒng)下位機數(shù)據(jù)傳輸網(wǎng)絡改造
圍觀黨“下位”,吐槽帝“登基”
北京紀事(2016年5期)2016-05-07 13:17:02
CAN總線并發(fā)通信時下位機應用軟件設計
基于看門狗原理的冗余保護機制
亳州市| 长岛县| 井研县| 镇原县| 宣汉县| 博爱县| 溧阳市| 黔东| 吴川市| 高邑县| 黑水县| 星座| 镇江市| 长葛市| 凯里市| 皮山县| 河北区| 锦州市| 德清县| 横峰县| 连平县| 县级市| 健康| 慈溪市| 读书| 沐川县| 湘乡市| 湖南省| 商都县| 柏乡县| 拉孜县| 新巴尔虎左旗| 齐齐哈尔市| 建德市| 甘谷县| 夏津县| 屏东市| 祁门县| 桐庐县| 朝阳区| 囊谦县|