这里用了两个esp8266设备,分别是NodeMCU和Wemos D1 mini两个模块,Arduino设备是Arduino UNO。设备如下图示。

三个设备的引脚说明如图,后面连接屏幕要用到。



显示设备Lcd1602,能显示两行,每行16个字,后面焊接了IIC接口转接模块(PCA8574),如图。

IIC接口有GND、VCC、SDA、SCL三个接口,分别根据上面的引脚图,找到想要的引脚连接(NodeMcu的SCL与SDA对应引脚D1 D2),由于这个屏幕是5v工作电压,VCC要接5V,NodeMCU没有标识5V引脚,要接Vin。
下面是编写代码,都用Arduino IDE进行,要安装LiquidCrystal I2C库,代码如下。

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// I2C地址, 一般为0x3F, 0x20或0x27
LiquidCrystal_I2C lcd(0x27, 16, 2);
int i;
char str[16];

void setup(){
  lcd.init();//初始化显示屏
  lcd.backlight(); // 打开背光
  i = 0;
  strcpy (str,"#");
}

void loop(){
  lcd.setCursor(0, 0);//设置起始坐标
  lcd.print("Hello World!");
  lcd.setCursor(0, 1);
  if(i<16){
    i++;
    lcd.print(str);
    strcat(str,"#");
  }else{
    strcpy(str,"#");
    i=0;
    lcd.clear();//清屏
  }
  delay(500);
}

I2C地址还可以通过写入arduino一段代码,通过串口监视器查询到。

// I2C Scanner
// Written by Nick Gammon
// Date: 20th April 2011
#include <Wire.h>
void setup() { 
    Serial.begin (115200); // Leonardo: wait for serial port to connect 
    while (!Serial) { } 
    Serial.println (); 
    Serial.println ("I2C scanner. Scanning ..."); 
    byte count = 0; 
    Wire.begin(); 
    for (byte i = 8; i < 120; i++) { 
        Wire.beginTransmission (i); 
        if (Wire.endTransmission () == 0) { 
          Serial.print ("Found address: "); 
          Serial.print (i, DEC); 
          Serial.print (" (0x"); 
          Serial.print (i, HEX); 
          Serial.println (")"); 
          count++; 
          delay (1); // maybe unneeded? 
        } // end of good response 
    } // end of for loop 
    Serial.println ("Done."); 
    Serial.print ("Found "); 
    Serial.print (count, DEC); 
    Serial.println (" device(s).");
} // end of setup
void loop() {}

效果如图。