Python玩轉(zhuǎn)Arduino——簡(jiǎn)單介紹

在孫老師的啟發(fā)下

關(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在線編程的步驟

  1. 連接arduino到電腦
  2. 打開(kāi)mblock軟件
  3. 選擇對(duì)應(yīng)端口
  4. 選擇合適的控制板
選擇合適的串口
選擇Arduino控制板
安裝固件
成功上傳固件

然后我們就可以愉快的編程了.

用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的方法有很多,后面我在完善介紹別的.

下載Python操作arduino的庫(kù)

上傳固件

用Arduino軟件打開(kāi)固件文件prototype.pde,提示點(diǎn)是就好
選擇正確的開(kāi)發(fā)板類型
選擇正確的串口
選擇完如圖所示
上傳固件代碼
固件上傳成功

這樣準(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燈.

新建文件simple_analogread.py

然后修改代碼如下圖就可以了.

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)格的.

GitHub的搜索結(jié)果

可以看到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

相關(guān)案例
感覺(jué)好厲害的樣子

其他庫(kù)

發(fā)現(xiàn)了Python版本的arduino命令A(yù)PI,似乎這個(gè)要完善的多,支持舵機(jī),不過(guò)這個(gè)庫(kù)已經(jīng)三年沒(méi)有更新了,o(╯□╰)o

python-arduino-command-api

沒(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),歡迎大家留言討論铃诬。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末祭陷,一起剝皮案震驚了整個(gè)濱河市苍凛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌兵志,老刑警劉巖醇蝴,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異想罕,居然都是意外死亡悠栓,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門按价,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)惭适,“玉大人,你說(shuō)我怎么就攤上這事俘枫⌒裙粒” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵鸠蚪,是天一觀的道長(zhǎng)今阳。 經(jīng)常有香客問(wèn)我,道長(zhǎng)茅信,這世上最難降的妖魔是什么盾舌? 我笑而不...
    開(kāi)封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮蘸鲸,結(jié)果婚禮上妖谴,老公的妹妹穿的比我還像新娘。我一直安慰自己酌摇,他們只是感情好膝舅,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著窑多,像睡著了一般仍稀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上埂息,一...
    開(kāi)封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天技潘,我揣著相機(jī)與錄音,去河邊找鬼千康。 笑死享幽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拾弃。 我是一名探鬼主播值桩,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼豪椿!你這毒婦竟也來(lái)了奔坟?” 一聲冷哼從身側(cè)響起斯入,我...
    開(kāi)封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛀蜜,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體增蹭,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滴某,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了滋迈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霎奢。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖饼灿,靈堂內(nèi)的尸體忽然破棺而出幕侠,到底是詐尸還是另有隱情,我是刑警寧澤碍彭,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布晤硕,位于F島的核電站,受9級(jí)特大地震影響庇忌,放射性物質(zhì)發(fā)生泄漏舞箍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一皆疹、第九天 我趴在偏房一處隱蔽的房頂上張望疏橄。 院中可真熱鬧,春花似錦略就、人聲如沸捎迫。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)窄绒。三九已至,卻和暖如春初茶,著一層夾襖步出監(jiān)牢的瞬間颗祝,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工恼布, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留螺戳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓折汞,卻偏偏與公主長(zhǎng)得像倔幼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子爽待,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • GitHub 上有一個(gè) Awesome - XXX 系列的資源整理,資源非常豐富损同,涉及面非常廣翩腐。awesome-p...
    若與閱讀 18,662評(píng)論 4 418
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,262評(píng)論 25 707
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,496評(píng)論 6 427
  • 環(huán)境管理管理Python版本和環(huán)境的工具。p–非常簡(jiǎn)單的交互式python版本管理工具膏燃。pyenv–簡(jiǎn)單的Pyth...
    MrHamster閱讀 3,797評(píng)論 1 61
  • 0.前言 由于cubieboard2官方穩(wěn)定版內(nèi)核linux-3.4未添加原生spi驅(qū)動(dòng)支持茂卦,我們需要為修改內(nèi)核源...
    linanwx閱讀 1,325評(píng)論 1 1