在 Arduino 平台上使用 ESP8266
ESP8266 有官方的軟體開發環境套件及應用函式庫等套件,其包含使用手冊(還是中文的)提供得相當的完整,並且都是免費的。然而對於初學者而言不易上手且需閱讀不少使用文件,有興趣者可逕自至官網下載。
說到這裏我又想到了,絕大部份的各家的微控器開發平台/環境,官方所提供的,也都是試用或必須付費才能使用的。當然也會有第三方免費開發環境,不過真的不多。這也再次顯現 Arduino/ESP 受歡迎的程度。
想直接從應用層面著手的人別擔心,我們還有其他的選擇。
首先我們需在 Arduino IDE 上安裝 ESP8266 的 BSP 套件,已知有不止一個社群有開發提供這樣的套件。首推 ESP8266 Community Forum 在 GitHub 上的 BSP 套件。
很簡易的操作如下,
- 開啟 Arduino IDE
- 將這段文字
- https://arduino.esp8266.com/stable/package_esp8266com_index.json
- 貼至
- 檔案 -> 偏好設定 -> 額外的開發板管理員網址。可使用逗號分隔多個網址。所加入的網址,Arduino 就會自動去探尋是否有可更新的開發板 BSP 套件。
- 按確定之後,再到開發板管理員中,我們直接鍵入 esp 來搜尋。可看到可安裝的 ESP8266 套件,點選並安裝即成。
- 接著,我們切換開發板成 ESP8266 的板子,依據您的板子的名稱來選取。若選單中並沒有列出您的板子,則選通用的即可。直接看圖。
- 接著插入開發板,記得要選取開發板所使用的序列埠 USB-COM port。其同時提供輸出入及燒錄的通道。
- 最後不免俗地,我們開啟範例程式 blink 編譯及燒錄,即可看到板子的 LED 在閃爍了,是不是 Arduino 得輕鬆愉快。
讀者如果眼尖或許會發覺,ESP8266 的 Blink 範例程式碼,與 Arduino UNO 板的 Blink 範例程式碼,可說是幾無差異,它是有非常關鍵非常重要的背後意義的!即概述,兩顆迥異的晶片,AVR,ESP,在底層 GPIO 及功能腳位做了同名同質異義的定義後,再加上一些硬體設定函式,例如假設,設定 CPU 時脈,各自要填不同的暫存器不同值,便包裝成同名函式而各自引用。如此,將使得底層之外的其他層的函式庫將可最大限度地共用,即原則上,所有 Arduino 的應用函式庫,都可不經修改地被 ESP 所正常使用。
震撼教育
阿。。。買張 ESP8266 開發板來閃燈就滿足了是嗎。。。有沒有搞湊阿。。。未免也太小兒科了吧。。。
嗯,那就來點。。。。非不一樣。。。這是在這張板子上隨手拈來,稀鬆平常的。。。讓我們看下去。。。
開啟 檔案 -> 範例 -> ESP8266HTTPClient -> BasicHttpsClient
開啟後如下圖,我們稍微看一下程式碼內容,
- ESP8266 的 WIFI 連接,區分成 AP 模式,Station,或 AP+Station(Wifi direct)三種模式,AP 是類似 Server,Station 則是類似 Client。
- 程式碼中那兩行表示我們將把板子設定成 station 模式(即用戶端),並且下一行提供無線 AP 的帳密,因此 “SSID”必須改成您所擁有的 AP 的名稱,及它的 PASSWORD,其密碼。以讓 ESP8266 登入該 AP 使用網路資源。例如我的 AP 叫 KENAP,密碼 1234,則更改那行成
WiFiMulti.addAP(“KENAP”, “1234”);
- 接著我們點選選單,如圖,是要選取清除 flash 的方式,預設是 Sketch,其指的是我們的程式碼內容。即,要規劃出新的程式碼及功能,舊的程式碼必須先被清除才行。即,只能先清再寫,沒有所謂直接覆寫。
- 然而要是我們程式碼中,曾經有去設定 WIFI AP/Station 相關的設定值,則這些設定值會被 BSP 放置到 Flash 中特別的區塊,其有別於 Sketch。也因此,若延用預設值只清除 Sketch 且我們已設定過 WIFI 設定值,則,例如下次我將開發板重新規劃成只有閃燈功能,該 WIFI 設定仍將被啟用並連線至 AP 上或當成 AP 讓終端連過來開發板;將讓事情複雜化。故建議改為如圖選項。
- 接著,編譯及上傳。可直接單按上傳其仍會從編譯做起。
- 上傳完畢後,板子就立即開始跑程式了,我們將序列埠監控視窗開啟,如圖。
- 如果順利的話(以上循筆者的意思沒做錯)我們會看到有一些輸出,表示著,這張板子以 HTTPS 連線至 https://jigsaw.w3.org/HTTP/connection.html 這個網頁,並將其 html 內容輸出出來,如下圖。
- 需注意一下,我們從程式碼內容中將目的網址改成我們自己主機的網址,其實是行不通的,因為 HTTPS 連線需要 fingerprint 在程式中可找到,要改成該網站所對應的 fingerprint 才行,目前筆者還不知道怎麼對應著改。
- 好了,夠震撼了吧,這小小的東西,這麼地輕鬆愉快。
- 至此,Arduino 與架站,筆者並沒有偏離主題吧,並且往後,筆者偏離主題很遠亦是眾所樂見的對吧!
進階補充
ESP8266 最初面市其實與 Arduino 是無任何關聯性的。
ESP8266 有它自己的官方 SDK,甚至於是第三方的 SDK。並且也陸續開發了 RTOS 及 non-RTOS 的作業系統層級的軟體開發工具與套件,函式庫,驅動庫等等。簡單講 ESP8266 有它一脈相承自成一格的開發工具與套件及函式庫。
然而就有 Arduino 的愛好者,同樣地開發這些所謂的中介層函式庫與工具或套件,使得 ESP8266 得以在 Arduino 環境下,以與 Arduino 幾近完全相同的方式使用 Arduino 的函式庫,功能套件或驅動套件,以及開發編程方式等等,使得 ESP8266 與 Arduino-based 的純正血統單晶片(AVR)得以平起平坐甚至於更勝於藍。
重點在哪?
官方是一套,Arduino-based 第三方是另一套。
我們並不知道在相容於 Arduino 環境下所做的編程,所使用的下層函式庫是否使用了及使用了哪些官方的 SDK。這意謂著,如果我們混用了這兩套的函式庫,就可能發生硬體資源衝突而難以除錯。因此,官方有很多詳盡的軟體與技術參考文件可供參考,但要引用在程式下就須特別留意了,基本上是該避免引用的。
當前筆者都是基於 Arduino-based 的環境下這一套來使用的。其它的筆者所知有三套:官方 AT 指令套件,SDK 及 RTOS,SDK 及 non-RTOS。有興趣者可自行學習。
而使用 Arduino-based 的開發環境的缺點是,我們比較不容易直接取用到底層硬體資源,故實作下會有綁手綁腳或可實現卻無法實現某功能的窘境。
發佈留言