從小我就對電子有濃厚興趣,無奈自己的聯考分數不給力,唸不了電子電機。

上專科後有了第一台電腦(CPU 是 8088 4.77MHz + 640K RAM),意外地寫程式的時間比打電動多(但很多時候在寫 BASIC 程式破解遊戲 XD),有一天,我發現搖桿的 X/Y 軸其實是兩個可變電阻,推向不同角度會改變電阻值傳回不同的數字,背後是不折不扣的類比數位轉換。這個發現令我喜出望外,異想天開搞出兩個失敗的土砲作品:

  1. 自製麥克風
    拆下對講機話筒的碳粉盒(會因音波震動改變電阻)接到搖桿 X 軸,寫程式以固定頻率取樣記錄數值,幻想可以錄下聲音。當年不懂得用電晶體放大訊號(那個年代知識來源有限,沒有 Google 可用),跟傻子一樣對著搖桿吶喊(咦?)一下午,嗓子都啞了也沒錄出個鳥來,只有勉強還原吹口哨的音頻。
  2. 自製掃瞄器
    把光敏電阻黏在點陣列表機的印表頭,寫程式控制印機頭定速左右移動加捲動,光敏電阻接搖桿 X 軸讀值,妄想掃出紙張不同位置的顏色深淺。想當然爾又失敗了,光敏電阻的精確度遠低於預期,我做了一台物理式亂數產生器。

多年前得知有 Arduino 開發板這種東西讓我很興奮,它不折不扣是實現當年異想天開電子夢的土砲聖品,價錢也不貴,幾百塊就能玩到不亦樂乎,陸續買過幾塊,胡亂玩過一些有趣題材。

thumbnail

不過,Arduino 有個問題,它不具網路功能,資料只能靠 USB 線走 COM Port 交換(是可以外接 WiFi、藍牙模組啦,但很麻煩),像是我做冰箱側面溫度的 24 小時監測,派出能插 USB 無線網卡的 Raspberry Pi (樹莓派) 才搞定:(延伸閱讀:也來IoT好了,Raspberry Pi 冰箱散熱溫度監測系統)

thumbnail

樹莓派就是台小電腦,跑 Linux 有網路,還可以寫 C# 寫 Python,感覺挺好,但有些缺點:

  1. 價格偏高
    Arduino 兩三百元就買得到,樹莓派則是一兩千元起跳,若要設計成小裝置長期使用花不下手,而硬體成本過高也會讓創意應用的實用性下降。
  2. 硬體介面不夠豐富
    光敏電阻等量測元件不可或缺的類比輸入(Analog Input),Arduino UNO 隨便都有六組,但 Raspberry Pi 沒有就是沒有,需額外接類比數位轉換版(DAC),或是串接 Arduino,對我來說完全不合格呀!
  3. 技術資源少
    由於價格高,樹莓派的普及率遠不如 Arduino,串接硬體元件尋找程式庫、範例時較吃力,不像 Arudino 幾乎是信手捻來。

講完 Arudino 與樹莓派,今天的主角要登場了 - 內建 WiFi 功能又與 Arudino 相容的 ESP 開發板!

ESP8266 是上海樂鑫公司推出的 WiFi 模組,但因為功能夠強大,足以扛下傳統由 Arduino 負處理的數位、類比輸入輸出工作,加上價格低廉(國外網站甚至有 2 USD 一片的行情),很快成為許多玩家搞物聯網(Internet of Things, IoT)應用的首選。

其實我在之前就買過用過,家用打卡鐘便是用 ESP8266 做出來的:

thumbnail

但當時急著做出成品,瞎抄了一堆程式能動就交差,對於 ESP 與 Arduino 的關係一無所知。前陣子被稚暉君的影片燒到,喚醒沈睡多時的創客魂,讓我花了點時間重新認識 ESP8266 晶片,頓時發現新大陸,原來 ESP8266 早有現成的網站伺服器程式庫,不只能當客戶端。於是我迫不及待地寫了小網站,端出多年來所學的 Vue.js/jQuery/Bootstrape,做了一個響蜂嗚器跟亮 LED 燈的華麗網頁操作介面。(註:跑步、3D 列印與電子類胡搞瞎搞我會發佈在黑暗後花園臉書粉專,對這部分感興趣的朋友請按讚追蹤)

同時我做了一些功課,對 ESP 做了較深入的了解。

ESP8266 本身是 WiFi 晶片,市面上有許多尺寸、功能不同的模組版本(例如 ESP-01),有些體積超小但需要外接 USB 轉 TTL 模組寫入程式,若想像 Arduino 一樣直接開發使用,挑內建 USB 插孔並附帶輸出輸入針腳或插孔的開發板較省時省力,插上 USB 連電腦就能供電,還有序列埠可上傳程式及輸出訊息,跟 Arduino 一樣方便。諸多 ESP8266 板中,而最多人用的就是家用打卡機那塊 ESP-12E NodeMCU,因為很普遍,價格平實,在網拍網站百元有找,在淘寶甚至比一罐可樂便宜。

在 ESP8266 之後,樂鑫公司再推出新一代晶片 - ESP32,標榜雙核心、CPU 頻率翻倍、SRAM、Flash、GPIO/I2C/SPI/UART 都加倍,還內建藍牙、觸控電容、溫度感測器、霍爾(磁力)感測器,規格上完全輾壓 ESP8266,價格也不貴,大約 180-300 就買得到。關於 ESP8266 與 ESP32 比較及市面常見 ESP32 開發板選擇,推薦這篇 - ESP32評比與教學推薦NodeMCU-32s的理由

認識 ESP32 後,不囉嗦馬上入手。下圖我拉了 ESP8266 一同入鏡,右邊尺寸較小的就是 ESP32-S NodeMCU,

thumbnail

至於開發工具方面,過去我都用 Arduino IDE 在開發,這回蒐集資料及試玩 ESP32 過程發現更好的選擇 - VSCode + PlatformIO!

Arduino IDE 介面簡單很容易上手,但 PlatformIO + VSCode 提供更貼近「開發環境」的體驗:同一專案的程式碼、函式庫集中一個資料夾,目錄結構分明;用關鍵字搜尋程式庫自動下載安裝(就像 NuGet 或 npm),要明確為專案加入參照,依賴關係明確。開發過程跟日常寫 C#/JavaScript 專案接近,再加上 VSCode 強大的 Intellisense、自動完成、跳至函式定義(Goto Definition)... 等功能,如果你本身是開發者,用過一次就回不去了。若你只想隨意寫寫小程式,Arduino IDE 較簡單友善,仍是不錯的選擇。但如果要幹票大的,程式碼複雜到需要拆函式庫搞物件導向,VSCode + PlatformIO 能提供較好的體驗。

最後聊聊開發語言。開發 ESP32 程式,有幾種語言選擇:

  1. C/C++
    最正統資源最豐富,有數不盡的程式庫與範例。用 C/C++ 開發還可細分為使用 Arduino Framework 或樂鑫自己研發的 ESP-IDF(Espressif IoT Development Framework))。 Arduino 簡單易入門,資源豐富,但如果你要玩真的,不該被 setup()、loop() 框住,Task 導向才是王道,IDF 跑 freeRTOS 更符合嵌入系統的標準。IDF 相對複雜許多,能做到一些 Arduino 做不到的事,例如:偵測 WiFi 訊號。 但 Arduino 仍可整合互通,例如在 IDF 引用 Arduino Library、在 Arduino 呼叫 IDF API。
  2. Lua
    Lua 是一種腳本語言,把 ESP32 韌體換成內含 Lua 直譯器的版本,便可在 ESP32 上跑 Lua 程式,跟以前可以用 JavaScript 寫程式的 Espruino概念相近。 我對直譯式語言的效能存疑,也不想再多學一種語言,跳過。
    補充:編譯 NodeMCU Lua 韌體與燒錄示範影片
  3. C#
    是的! 就是 C#!!

    微軟的物聯網解決方案包含 nanoFramework,把 .NET CLR 精簡到 32K RAM、256K Flash 就能跑,故能支援一堆低階開發板,包含 ESP32!
    想到能在兩張郵票大小的電路板上跑 C# 程式讓我好激動,但建置 nanoCLR 及燒錄的步驟頗複雜,另外一點是雖然 nanoFramework 可整合原生 C/C++ 程式庫,要整合其他硬體少不了將 Arduino 程式庫翻成 nanoFramework 相容的程序,我目前的 C/C++ 知識與經驗肯定無力駕御,故這段會留到以後再嘗試。
  4. MicroPython
    MicroPython是精簡版 Python3,只需 256K 儲存空間跟 16 KB RAM 的硬體上執行,小狐狸事務所有系列文章可參考。因我 Python 經驗有限,一樣也跳過。

經過這般考察評估,我打算好好用 ESP8266 跟 ESP32 玩些有趣的應用,未來再陸續分享。

Introducing the cheap but powerful device for IoT solution - ESP8266 and ESP32.


Comments

# by 安桌桌

唸書時c指令都背沒幾個,自己做esp8266連德文的project都完成做了,年紀大的求知欲和做法改變了

Post a comment


35 + 21 =