2017年9月21日 星期四

Lumex OLED 實作

行走江湖,該還的還是要還~

今年七月有幸參加LASS 年會,報告了自己做的水質偵測。會場中,Lumex的老董還大心地送了其產品做為贈品。雖然沒能抽中,但很開心企業來支持開放社團,對於社團的發展是非常大的助力。

會後Lumex謝總更是再加碼,再送20套OLEDLCD 產品給社團成員。這次總算有幸抽中,謝總真的是大心,各給一片,再加一組 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 偵測。

因此,程式的流程大概就是:

  1.  NodeMCU 嘗試連到指定的IP。取得IP 前,顯示 WiFi 連線動畫。未取得IP 前,持續顯示WiFi 連線動畫。
  2.  順利連上AP後,在OLED上顯示IP,顯示 SSID,顯示RSSI
  3. ping gateway ,並顯示結果
  4. ping seednet DNS IP, 並顯示結果
  5. ping Google DNS IP, 並顯示結果
  6. 回到步驟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,並附接線,所以也很簡單上手的。
LOD-H12864GP-x-UR
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