先上图
连线
我的oled是0.96四针的
vcc -vcc
gnd -gnd
(下面的D1、D2根据自己的esp8266设置就行,只要是GPIO口就行)
sda-D1
scl-D2
安装库u8g2
代码
#include <Arduino.h>
#include <U8g2lib.h>
#define BLINKER_PRINT Serial
#define BLINKER_WIFI
#include <Blinker.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
#include<string.h>
//可能要修改
#define SDA 5 //我的SDA连的是D1,通过上面的图可知我的D1对应GPI05,D2对应GPI04
#define SCL 4
char auth[] = ""; //设备密钥
char ssid[] = ""; //WIFI名称(只能接收2.4G信号)
char pswd[] = ""; //WIFI密码
char str[21] = "None, please input";
//如果是和我一样的oled屏幕此处就不用改,否则请修改(非常重要)
//具体请参考
//https://blog.youkuaiyun.com/dpjcn1990/article/details/92831760
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);
BlinkerButton Button1("btn-abc"); //不用管
void button1_callback(const String & state) {
BLINKER_LOG("get button state: ", state);
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}
void dataRead(const String & data)
{
Serial.print(data);
Serial.print("\n");
int len=0;
memset(str,'\0',strlen(str));
while(data[len]!='\0'){
len++;
}
if(len<=21){
for(int i=0;i<len;i++){
str[i]=data[i];
}
}else{
strcpy(str, "Too Long");
}
Serial.print(len);
}
void setup() {
// put your setup code here, to run once:
u8g2.begin();
Serial.begin(115200);
#if defined(BLINKER_PRINT)
BLINKER_DEBUG.stream(BLINKER_PRINT);
#endif
// 初始化有LED的IO
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
// 初始化blinker
Blinker.begin(auth, ssid, pswd);
Blinker.attachData(dataRead);
Button1.attach(button1_callback);
}
void loop() {
u8g2.clearBuffer(); // clear the internal memory
u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font
u8g2.drawStr(0,15,str); // write something to the internal memory
u8g2.sendBuffer(); // transfer internal memory to the display
delay(1000);
// put your main code here, to run repeatedly:
Blinker.run();
}
最后
在blinker APP添加输入框,也可与自动配网结合起来详见我的另一篇文章
1、esp8266实现自动配网+小爱语音点灯