最近在試著用純 ESP8266 實驗一些 arduino 能用的功能,I2c、EEPROM、ADC..這篇紀錄一下,雖然很無腦的就可以 i2c,只是還是比 arudino 要多查一些資料。﹍。
Arduino 會用的模組裡面有一個 16×2 的 LCD,原始是有十六隻腳,實際在實驗的時候會覺得很煩,要插一堆腳,可以透過 I2C 的模組轉接成只需要除了正負電外只需要兩隻腳 SDA SCL 的 I2C 讓開發板跟 LCD 通訊。
實際上去找教學很容易就可以用 LiquidCrystal_I2C 跟 arduino 很簡單的在 LCD 印出字了。
在 ESP8266 上面要注意的是,是用哪個封裝,像 ESP01 只有兩個 GPIO(GPIO0、GPIO2),所以就是接那兩個,像我是用 ESP-12 ,就是用 GPIO04(SDA)、GPIO05(SCL) 如上圖,其實我測試板上標示的資訊的兩隻腳是寫顛倒過來的耶,需要交叉測試確認一下。然後 LCD 需要供應 5v 的電,就要跟 ESP8266 的電源分開,我是用 CP2102 分別供 3.3v 給 ESP8266 供 5v 給 LCD。
順便一提在光華買 CP2102 USB to TTL 跟在拍賣上買的價差五倍有吧!-_-
然後要測試好位址是 0x20 or 0x27,好像都會先跑一個掃描的程式,我是先在 arduino 上快速測過,就知道是 0x20 了,然後就能印字了=_=。
這個東西能做的無用應用就是,粉絲團的讚數顯示器吧,好像也有人在賣木製外殼精美的版本,只用這兩幾個零件做出來應該算蠻輕巧的了。
以下範例練習把 ESP8266 設成 Station 模式,掃描附近所有 AP 並把 SSID 顯示在 LCD 上,酷八!
#include <Wire.h> #include <LiquidCrystal_I2C.h> #include "ESP8266WiFi.h" LiquidCrystal_I2C lcd(0x20, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display void setup() { lcd.init(); // initialize the lcd Serial.begin(9600); WiFi.mode(WIFI_STA); lcd.backlight(); lcd.print("//mlwmlw.org"); lcd.setCursor(0,1); lcd.print("ESP8266!!"); } void loop() { int n = WiFi.scanNetworks(); delay(3000); if (n == 0) Serial.println("no networks found"); else { Serial.print(n); Serial.println(" networks found"); for (int i = 0; i < n; ++i) { // Print SSID and RSSI for each network found lcd.clear(); lcd.setCursor(0, 0); lcd.print(i); lcd.print("."); lcd.print(WiFi.SSID(i)); Serial.print(WiFi.SSID(i)); Serial.print(" ("); Serial.print(WiFi.RSSI(i)); Serial.print(")"); Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*"); delay(1500); } } delay(5000); }
文件:http://arduino.esp8266.com/versions/1.6.5-947-g39819f0/doc/reference.html
範例來源:wifi scan