關(guān)于Python語(yǔ)言的介紹安裝請(qǐng)參考廖雪峰的Python教程
Python是一門解釋型語(yǔ)言,雖然不能夠像c語(yǔ)言一樣編譯上傳到Arduino——什么你說(shuō)MicroPython举瑰,我們?cè)僬f(shuō)Arduino呢——仍然是可以跟Arduino的玩耍的泞莉,就像scratch一樣旁钧。
前言
Python玩轉(zhuǎn)arduino的方式跟mblock的在線編程模式差不多的,都是先給arduino寫入一個(gè)固件,然后操作,不同的是mblock是通過(guò)積木來(lái)向arduino下指令,這里我們用Python.
mblock對(duì)arduino在線編程的步驟
- 連接arduino到電腦
- 打開(kāi)mblock軟件
- 選擇對(duì)應(yīng)端口
- 選擇合適的控制板
然后我們就可以愉快的編程了.
用Python玩轉(zhuǎn)Arduino
首先你要安裝Python,并且確保安裝了pip
然后我們要用到一個(gè)代碼塊Python Arduino 原型API第二版.
This is a project based on the original Python Arduino Prototyping API. I started a fork and after a while the whole thing was getting too different to make a pull request so I just put it here. The old project had wierd things going on to handle the communication, where I rely on parseInt() to do the work for me. There were also problems with analogWrite(), which is working in this version.
這個(gè)代碼庫(kù)呢是基于 Python Arduino Prototyping API,作者復(fù)制了一份,做了很多改動(dòng),跟原始版本相差很大,于是就成了一個(gè)獨(dú)立的版本.這個(gè)版本的通訊方式跟老版本不同,主要是用到了parseInt()
函數(shù).當(dāng)然這個(gè)版本不是很完善,analogWrite()
用起來(lái)可能會(huì)有問(wèn)題——不過(guò)凡是代碼的問(wèn)題具温,都可以修復(fù)的不是嗎.
python玩轉(zhuǎn)arduino的方法有很多,后面我在完善介紹別的.
上傳固件
這樣準(zhǔn)備工作就已經(jīng)完成了,那么讓我們開(kāi)始愉快的玩耍把.這個(gè)過(guò)程跟在mblock里連接硬件,最后上傳固件本質(zhì)是一樣的,形式不同而已.
開(kāi)始玩耍把
學(xué)習(xí)編程總是從Hello world!開(kāi)始,而學(xué)習(xí)硬件總是從點(diǎn)亮LED燈開(kāi)始,那么今天我們就用這個(gè)庫(kù)來(lái)試著點(diǎn)亮一盞LED燈.
然后修改代碼如下圖就可以了.
from arduino import Arduino
import time
b = Arduino('COM15')
# 實(shí)例化一個(gè)板子
# 突然很好奇如果我實(shí)例多個(gè)是否可以?
pin = 13
#declare output pins as a list/tuple
b.output([pin])
# 用列表的形式指定哪些針腳
# 用來(lái)當(dāng)做輸出針腳
for x in range(10):
b.setHigh(pin)
# 設(shè)定pin引腳為高電平
# b在這里就是指板子
time.sleep(1)
# 利用time庫(kù)中的sleep函數(shù)
print b.getState(pin)
# 這個(gè)只是用來(lái)打印輸出狀態(tài)
b.setLow(pin)
# 這頂引腳pin為低電平
print b.getState(pin)
time.sleep(1)
b.close()
快看看Arduino板子上自帶的13號(hào)led燈是不是開(kāi)始閃爍了呢?
這種方法不是很好玩,這個(gè)代碼封裝的比較麻煩,相比于樹莓派最新版的GIPO庫(kù),差的太多,最新的gpiozero
真的超好用的.后面介紹.
通過(guò)上面的代碼就可以跟arduino愉快的玩耍了
注意:
b = Arduino('COM15')
引號(hào)里面代表的是具體通過(guò)那個(gè)端口跟arduino進(jìn)行通訊,這里我的是'COM15'端口,大家要注意.
close()函數(shù)
函數(shù)的作用是關(guān)閉串口鏈接,釋放資源,重新運(yùn)行代碼的時(shí)候不需要重新插拔串口,不然就得重新插拔,作為一個(gè)好的習(xí)慣保留把.
點(diǎn)評(píng)
這個(gè)類庫(kù)做一點(diǎn)小東西足夠了,驅(qū)動(dòng)1602液晶屏啊,電機(jī)啊什么還不行,舵機(jī)和步進(jìn)電機(jī)可以,但是在中小學(xué)教學(xué)做一些簡(jiǎn)單的東西足夠了.
或者是在用樹莓派控制arduino的情況下,足夠了,當(dāng)然還有其他方式,未完待續(xù)
在GitHub上,搜一下以arduino為關(guān)鍵字進(jìn)行搜索,選擇Python語(yǔ)言的結(jié)果,就有很多庫(kù)可以用.慢慢找一下總有符合自己風(fēng)格的.
可以看到JavaScript的項(xiàng)目也很多啊,前端的福音啊,感覺(jué)JavaScript現(xiàn)在都快逆天了.
可以看到很多甚至是HTML項(xiàng)目硅则,應(yīng)該是網(wǎng)頁(yè)控制arduino冒掌,webarduino這種噪裕。
發(fā)現(xiàn)了一個(gè)很膩害的Arduino物聯(lián)網(wǎng)平臺(tái)項(xiàng)目PlatformIO
其他庫(kù)
發(fā)現(xiàn)了Python版本的arduino命令A(yù)PI,似乎這個(gè)要完善的多,支持舵機(jī),不過(guò)這個(gè)庫(kù)已經(jīng)三年沒(méi)有更新了,o(╯□╰)o
沒(méi)事搜一搜GitHub,總有意想不到的收貨.
擴(kuò)展
其實(shí)這種實(shí)現(xiàn)模式的關(guān)鍵是在arduino寫入固件然后通訊,你可以直接用serial的方式——下次介紹——也可以用firmata這種復(fù)雜的通信協(xié)議來(lái)通信,視乎個(gè)人的開(kāi)發(fā)能力而定股毫。
對(duì)底層了解越多玩兒越多膳音,未來(lái)我也會(huì)在深入學(xué)習(xí)的過(guò)程中不斷的分享我的經(jīng)驗(yàn),歡迎大家留言討論铃诬。