搜尋此網誌

2021年4月7日 星期三

Arduino 與 Raspberry pi 溝通

 緣起:


    昨天在畢專教室閒著,突然想試試 Raspberry pi 的類比讀取功能,因為我們的畢專會用到壓力感測器,所以要有個類比輸入腳來讀它的電壓變化,可是,當我去查資料時卻發現一個壞消息。

(來源)

    哦不,Raspberry pi 並沒有支援類比功能的腳位,如果真要用的話還需要弄個什麼 ADC 電路的,哭啊,我又不會電路。



解決方法:


    我後來想到,我身邊有 Arduino ,這東西有很多類比腳能使用,而且使用上比 Raspberry pi 更簡單,然後我還記得我之前在書上有看過 Raspberry pi 跟 Arduino 的溝通方法,所以,解決的方法就是,使用 Arduino 讀取感測器的資料,再把資料傳給 Raspberry pi 做處理。

    我找到的學習文章是這篇,使用 usb 就可以達成了,超方便的,通訊跟 arduino 供電的問題都不用煩腦了,序列通訊超棒 ! Arduino 的部份,我選擇了之前買的 nano 板,它的體積小,而且 usb 線也短短的。


    再來是寫 Arduino 的程式,用它們自家的 IDE 來寫。

只是測試通訊,所以超簡單

    然後我在上傳時遇到一些小問題,因為我沒選好它的處理器型號,反正只有三個選項,一個一個試就好了。

正確的選項是這樣

成功上傳

好ㄟ

    再來是 Raspberry pi 接收的部份,小麻煩,不過還行。看了看它的程式後,主要會使用到的就是 serial 的創建與 readline() 函式。


    serial 是 python 內部就有的,不用再去安裝,爽 ! 可是比較有問題的就是那句 serial.Serial('/dev/ttyACM0', 9600),我知道 LINUX 會把各種裝置視為檔案,並且規範在 dev 資料夾下,可是,我要怎麼知道我那個 arduino 的 usb 裝置是哪一個檔案 ? 每次 ls /dev 它都會列一堆東東。

    我又去看了看相關文章,用了 dmesg 指令來看看,但也看不出個所以然,後來我看到這個。


    好像是哦,我 Arduino 有插上時, ls /dev/ttyUSB* 有結果 (/dev/ttyUSB0) ,拔掉 Arduino 後再下一次指令,它就出錯,所以,可以確定是那個 /dev/ttyUSB0 了。

我程式這樣打

    執行後...


    讚啦 ~~ 有了。



沒有留言:

張貼留言