今年七月有幸參加LASS 年會,報告了自己做的水質偵測。會場中,Lumex的老董還大心地送了其產品做為贈品。雖然沒能抽中,但很開心企業來支持開放社團,對於社團的發展是非常大的助力。
會後Lumex謝總更是再加碼,再送20套OLED 和 LCD 產品給社團成員。這次總算有幸抽中,謝總真的是大心,各給一片,再加一組 CP2102 的USB 模組,ezDisplay 系列的優點就是透過USB 就可以直接當display 用來顯示ASCII 字元,不用再輸入複雜的控制碼。對於只是單純要輸入ASCII 字元需求的使用者,真的非常方便。
剛好最近在測Wi-Fi 訊號,於是向同事借了一片 ESP8266 的NodeMCU 來檢測WiFi 網路訊號範圍,想用最簡單的方式來做,剛好,一片NodeMCU 和 Lumex 的 LOD-H12864GP-x-UR
就可以搞定。
我是要測Wifi 的訊號強度,所以一開始WiFi 要有 連結,因此就要先顯示出 WiFi 連結的圖型,顯示完後,在不同的列數分別顯示 取得IP,SSID,RSSI值,再顯示 ping gateway, seednet DNS, Google DNS 的狀況。讓此動作以loop 的方式持續執行。若中途超出WiFi 的範圍,則重新進行WiFi 偵測。
因此,程式的流程大概就是:
- NodeMCU 嘗試連到指定的IP。取得IP 前,顯示 WiFi 連線動畫。未取得IP 前,持續顯示WiFi 連線動畫。
- 順利連上AP後,在OLED上顯示IP,顯示 SSID,顯示RSSI
- ping gateway ,並顯示結果
- ping seednet DNS IP, 並顯示結果
- ping Google DNS IP, 並顯示結果
- 回到步驟2, 若失聯,則回到步驟1
硬體架構
其實硬體架構還蠻簡單的,肇於NodeMCU 在 WiFi 上的強大功能,以及Lumex 的ezDisplay 的簡易操作,我直接將NodeMCU 的 5V Output 給 OLED,再使用 ESP8266 的 SoftwareSerial 來模擬 Serial port ,使NodeMCU 直接控制 OLED。
PS:找不到 fritzing 的 Lumex part, 又不會自己畫,只好直接用 fritzing 內建的 part. 但基本上 ezDisplay 內建serial 溝通用的 Tx/Rx 及 5Vcc 和 GND,並附接線,所以也很簡單上手的。
PS:找不到 fritzing 的 Lumex part, 又不會自己畫,只好直接用 fritzing 內建的 part. 但基本上 ezDisplay 內建serial 溝通用的 Tx/Rx 及 5Vcc 和 GND,並附接線,所以也很簡單上手的。
![]() |
| Lumex LOD-H12864GP-x-UR |
軟體架構
我使用的是ATOM 的IDE,它是個相當不錯的open source 套件。
再加上 PlatformIO 的外掛功能,就能讓你可以直接使用類似 Arduino IDE 的功能,也就是除了寫程式碼,還能連MCU 的console 和 debug。相當的方便好用。
當在PlatformIO 開啟project 時,板子選 NodeMCU 1.0(ESP-12E Module), Framework 選用 Arduino 即可。
但內建的函式庫並無 ping 的功能,因此要再到GitHub 上下載 ESP8266Ping 的 library 來達到我們ping 的目的。下載下來的 ESP8266Ping library 要放在PlatformIO 的你的專案裡的lib 目錄,這樣它才找得到。
其餘的照下列程式碼去執行就可以了。
幾點注意事項要特別提醒:
- Lumex 佛心來著,另外提供了 SiLabs 的CP2102 的UART 板子。使用的和 NodeMCU 是一樣CP2102. 但一開始它的 mac driver 有問題,會造成我的MacBook Air 一直當機。最後這一版 V5 才正常。
- SoftwareSerial 的library 用的 NodeMCU pin 腳是對應 GOIP 數字的,而非板子上 Dx 的數字,一開始搞不清楚,弄得NodeMCU 一直reboot.
- 部分function copy 自 Lumex 的 Arduino sample 檔,但會忘了把 sample 檔內原 Serial 改成自己的虛擬 MySerial ,也弄得 NodeMCU 一直reboot.
- 那個wifi 連接圖 是透過 lumex 內建的 畫圓功能(因為它並沒提供畫弧線的功能),一條一條畫上去的。再加上左三角和右三角,將我們不要的圓遮蔽掉,就形成 wifi 連結的動畫圖。
看那堆程式碼前,先來看看結果吧~~
2017/9/22


