esp8266、Arduino用LCD1602(iic接口)进行显示
这里用了两个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或0x27LiquidCrystal_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 setupvoid loop() {}效果如图。
LCD1602和超声波传感器,进行整合后代码如下:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// 定义I2C地址和LCD尺寸
// LCD1602 D1 D2针脚
#define I2C_ADDR 0x27 // 根据你的I2C模块设置正确的地址
#define LCD_COLS 16
#define LCD_ROWS 2
// 初始化LCD
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLS, LCD_ROWS);
// 定义超声波传感器的引脚
const int trigPin = 2; //D4
const int echoPin = 0; //D3
void setup() {
Wire.begin(); // 初始化I2C总线
lcd.init();//初始化显示屏
lcd.backlight(); // 打开背光
lcd.setCursor(0, 0); // 设置LCD光标位置
lcd.print("Distance: "); // 在LCD上显示文本
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2; // 将时间转换为距离(厘米)
// 检查距离是否在有效范围内
if (distance >= 0 && distance <= 400) {
lcd.clear(); // 清除LCD屏幕
lcd.setCursor(0, 0); // 设置LCD光标位置
lcd.print("Distance: "); // 显示文本
lcd.setCursor(9, 0); // 设置光标位置以显示距离值(留出空间给文本)
lcd.print(distance, DEC); // 显示距离值
lcd.print(" cm"); // 显示单位
}
delay(1000); // 等待一秒钟再次读取
}


黑公网安备 23010302001359号