最近在試著用純 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

