--- title: MicroPython 入坑記 image: https://i.imgur.com/StMwgZz.jpg --- # MicroPython 入坑記 ###### tags: `MicroPython` `ESP32` > [color=#58f][name=Paoyung][time=Jun 01, 2022] [:snake: ℳ𝒾𝒸𝓇ℴ𝒫𝓎𝓉𝒽ℴ𝓃 隨手記](/@PaoyungChang/mpy_trifiles) 開端 --- Python 接觸得早,20 多年前把 Python 拿來做開發,就一直受質疑它能放在產品裡嗎? 許多人嫌它打包起來佔空間,執行佔記憶體又速度慢。不過後來的電腦規格和性能都已大幅提升,以現在的時間點來看應該是多慮了。但既然自己是個 Python 咖,進到 MCU 的世界裡還是想能和 Python 沾個邊,於是發現了 MicroPython。 端得辛苦 --- 而如今拿 MicroPython 來寫韌體,還是面臨到類似的疑慮,我只能說受眾不同、需求不同,總是會有它適合的場域。再者,許多 IoT Maker 除了要做**硬體端**,搞不好連**前端**、**後端**都得自己來,如果能讓操作的語言數量減少或簡化,似乎也不失為是工程師的一種浪漫。 <style> .c_list {color:#025} </style> 選擇 --- 在使用 MicroPython 前也是做了不少的探索和評估。在眾多的程式語言中,因想把心思放在應用上,C/C++ 先不列入名單,而同時能拿來開發韌體和後端的語言,就我知道的大概有以下幾個: > [color=darkgreen] > - <span class="c_list">Python + MicroPython / CircuitPython / PikaScript</span> > - <span class="c_list">Rust + Embedded Rust</span> > - <span class="c_list">Go + TinyGo</span> > - <span class="c_list">Node.js + Espruino</span> > - <span class="c_list">Lua + LuatOS</span> 網路功能對 IoT 來說是不可少的,先前容易找到的就是 ESP8266 和 ESP32 了,而 ESP32 條件又較佳,所以自然就以後者當做與語言配搭的評估對象。 > [color=darkgreen] > - <span class="c_list">就生態來說,MicroPython 社群廣大起源早,除了上手容易外還有 REPL,文件、範例齊全,晶片支援眾多,ESP32 是它眾多支援的晶片之一。</span> > - <span class="c_list">Rust 被認為是 C 的接班程式語言,而它在 Embedded 領域也是強大,支援的晶片眾多,除非是已學過 Rust,不然對於新手來說,面對那個嚴格又多話的 compiler,沒折騰給幾下子是寫不出也跑不出東西來的,且 toolchain 也得先搞定好才行。</span> > - <span class="c_list">TinyGo 好用,就算是多工也隨手就能寫出來,對多款晶片支援完整,但偏偏對 ESP32 的週邊界面支援還不全,現階段 Wifi 還不行使用。TinyGo 和 Rust 一樣,toolchain 得先弄好。</span> > - <span class="c_list">Espruino 是 Javascript語系,它有 REPL 和自己的 IDE 環境,也能用積木寫程式,支援多款晶片,文件眾多範例齊全,可惜對於 ESP32 並非主線支援,SDK 目前似乎還停在 IDF 3.1.x,不像MicroPython 已經是 4.x,但還是非常好用就是了,值得有興趣的人來探索,尤其是對藍牙功能有需求的。用 ESP32 的刷機程式刷過一次即可,REPL 和刷機程序與 MicroPython 很像。</span> > - <span class="c_list">LuatOS 和前面幾個相比就顯得年輕了,需要一些時間來期待,持續觀望它的生態圈形成。而LuatOS 和 PikaScript 雖年輕,但有 RT-Thread 在後面當推手,不容小覷。</span> 綜合各項的因素和條件,MicroPython 當然成為了我的首選,但並非唯一選擇,還得要視客戶實際需求再行調整,原因如開頭說的重心應放在於應用上,而有些客戶電路板都已經做好了,不能選自己想用的 MCU,且偏偏是 MicroPython 未支援的;又有些案子適合 event-driven 的架構,拿 Espruino 就是簡潔利落;再某些案子的 MCU 容量受限,就是 Rust 和 TinyGo 該出場的時機了。 > [time=Sun, Apr 2, 2023 1:57 PM]補充: > - CircuitPython有Adafruit為後盾,[Libraries](https://circuitpython.org/libraries)充足且範例完整,而函式庫分類條理有序,因此也非常值得學習和嘗試,唯優點也是缺點,即程式佔用的空間和記憶體也較多,像SAM D21這顆MCU,除非自行裁減函式庫的程死碼,不然許多Library是載入不成功的。 > - PikaScript已改名為PikaPython,極簡的風格適合小空間的MCU,如STM32F103C8T6這顆也能使用,不過因需要使用到Keil來編譯韌體,這點必需注意。 致Makers --- 對於新手 Maker 來說,依前述的各方考量來看,想要易上手、易開發、開發板便宜又有 Wifi 網路功能,MicroPython 加上 ESP32 組合佔有很大的優勢。且一方面 MicroPython 的 REPL 讓人勇敢的 try and error,試著和直譯器對話,一方面也能突破積木對靈活度的限制,在社群裡也更能一起發揮創意、互相激發,將程式、模組改寫成自己的版本,不再只是拿別人的程式碼貼上而已。開發者在這使用的過程中體會更多的成就和樂趣,我想這才是 Maker 想要的體驗,重覆第三次說 **「 Maker 應該把重心放在應用上」**,而不該被語言工具限制了創意。 {%hackmd /@PaoyungChang/css_01 %} {%hackmd /@PaoyungChang/intro_v0615 %}