如何用python控制arduino?

時間 2021-05-11 21:39:41

1樓:FLAGYAN

Arduino板子的韌體(下位機)在自帶的IDE裡面有,路徑Examples/Firmata/StandardFirmata,寫入這個韌體就可以在PC上寫python的程式直接控制,python直接執行在PC上,通過frimata協議給板子發命令執行相應的操作。

2樓:許俊彬

Arduino With Python: How to Get Started – Real Python

文章裡面有介紹一種協議Firmata,是一種通訊協議。

firmata/protocol

3樓:gashero

常規作法是走串列埠。arduino基於ATmega晶元的資源實在太少,不足以執行哪怕是MicroPython。

自己設計一種協議,來描述何種報文要做什麼。每種協議都要思考如何分隔報文。文字協議是利用特殊符號來分隔報文,比如用\r\n。

二進位制協議則是用乙個字首數字來表示後續欄位的長度。總的來說,文字協議易讀易寫,可除錯性好。二進位制協議的效率高,因為不需要掃瞄每個字元。

當然主流玩法以外,我也見過其他玩法。比如horizen公司的dsm2遙控器協議,就是利用空閒時延來分隔報文的,這種不建議使用,因為你還需要使用個定時器來進行報文分隔,對片內資源的浪費太嚴重。

簡單的玩法可以就直接用\r來區分報文,比如設定乙個16位元組的接收緩衝區buf,乙個pos變數。每次串列埠收到乙個位元組c,就判斷是不是\r。如果是,那麼讀取buf的內容用於處理,並且pos=0。

如果不是就buf[pos++]=c。

在Python一側,推薦使用pyserial庫,可以在各種系統下方便的操作串列埠。各類常見的串列埠選項也可以精確的控制。網上文件很多,這裡不再解釋。

需要注意的是讀寫快取需要小心控制,否則會導致快取沒發出時的一些難於除錯的問題。

除錯階段可以考慮用minicom或者screen,這兩個linux下的工具可以在無需程式設計時就能進行簡單的測試。

在已有下位機、Python上位機、除錯上位機後。題主可能還會感興趣無線串列埠。可以考慮基於藍芽的串列埠,比如HC-05之類的。

也有基於Wi-Fi的串列埠,基於esp8266的各類模組。

如果還是希望直接在晶元上執行Python。那麼stm32的高階產品,esp8266是可以執行MicroPython的,有興趣可以試試。

4樓:

ESP32和ESP8266可以跑microPython,arduino的IDE也相容,但是python是不能直接跑在arduino上的,這個是微控制器。跑python你應該考慮樹莓派香橙派等等卡片電腦,或者直接電腦學python不香嗎?為啥要在微控制器上跑?

都學微控制器了為啥不學C,arduino也就是玩,做產品的一般得51,STM吧,都是C。

arduino的程式語言其實很簡單了,有你折騰python這功夫,arduino的blink早閃起來了。

5樓:捏爆大臉貓吸乾大臉能

科學上網找的答案

Arduino With Python: How to Get Started – Real Python

Programming Arduino Using Python!!!

以前用過arduino和C++,但是用arduino和python不如買個樹莓派玩玩。

請問python如何用docker API和paramiko做webssh?

37丫37 或許可以看看這個 Django實現WebSSH操作Kubernetes Podpython 呼叫kubernetes api,實現對pod的ssh連線,從而進行命令執行等操作 還有一系列的WebSSH相關的文章可以參考 https blog.ops coffee.cn webssh 布道...

如何用python傳送email?

若月寒 fp open filename,rb 務必加上必要的頭,否則傳送後無法正常解碼file.add header Content Disposition attachment filename gbk filename file.add header Content ID 0 file.add...

如何用Python畫樹?

半個馮博士 先寫乙個樹 class TreeNode def init self key self key key self right None self left None definsert self key if self key key return elif self key ifsel...