Arduino Pro Mini + i2c + lcd 2004 (20x4)
Долгая и муторная эпопея подключения arduino к lcd по i2c закончилась победой.
Небольшой мануал на тему "как это сделать", так как информации в интернете много, а в целом не всегда все сразу получается. Начнем.
Шаг 1.
Подключаем дисплей как указано на картинке:
А именно: SDA к A4, SCL к A5, vcc к vcc, gnd к gnd. Желательно, конечно, отдельно подавать питание на дисплей, но питания от ардуино в данном случае хватит.
Возможно у вас могут быть перепутаны ноги SDA\SCL или A5\A4 на вашей плате или перепутаны подписи к ним. С этим позже разберемся.
Шаг 2.
Надо найти адрес нашего монитора. Так как на i2c шине может быть подключено до 127 устройств параллельно, то у каждого устройства должен быть свой адрес. Для этого воспользуемся i2c сканером. В интернете их великое множество, я использовал такой:
#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
while (!Serial);
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000); // wait 5 seconds for next scan
}
Заливаем этот скетч в ардуино и запускаем. Ждем результата в консоли в виде
I2C Scanner
Scanning...
I2C device found at address 0x3F
Если все именно так и получилось в консоли, то значит все подключено правильно и ничего не перепутано. Записываем адрес монитора, в моем случае это 0x3F.
Если же у вас ошибки или сканирование просто повисло (более 5 секунд ничего не пишет), то скорее всего у вас перепутаны ноги SDA\SCL (ну или A5\A4), потому просто берем и меняем из местами либо на ардуино, либо на мониторе. Запускаем сканер еще раз!
Внимание! Будьте внимательны и убедитесь, что скетч заливается нормально, то есть arduino ide выдает "Загрузка завершена" без ошибок в консоли. Иначе пробуйте залить снова.
Шаг 3.
Пробуем что нибудь вывести на дисплее.
Для этого нам понадобится библиотека LiquidCrystal_I2C.
Ее можно поставить, как из Arduino Ide (Меню->Скетч->Подключить библиотеку->Управлять библиотеками), так и из Git. Я рекомендую вариант из Git - https://github.com/agnunez/ESP8266-I2C-LCD1602 . Это немного пропатченная библиотека.
Теперь берем скетч, типа этого:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
// Arduino UNO => PIN 4 = SCL, PIN 5 = SDA
// NodeMCU Dev Kit => D1 = SCL, D2 = SDA
LiquidCrystal_I2C lcd(0x3F, 20, 4);
void setup()
{
// initialize the LCD
lcd.begin();
}
void loop()
{
lcd.print("Hello LCD Line 1");
lcd.setCursor(0, 1);
lcd.print("Hello LCD Line 2");
lcd.setCursor(0, 2);
lcd.print("Hello LCD Line 3");
lcd.setCursor(0, 3);
lcd.print("Hello LCD Line 4");
delay(4000);
}
Заливаем его в ардуино и смотрим на дисплей. Если все получилось и надписи видны - круто.
Если нет, то крутим потенциометр:
Крутим его в одну сторону до упора и в другую, настраивая таким образом яркость\контрастность дисплея. У меня он изначально был в самом крайнем положении (в 0) и я долго не мог понять, почему у меня не выводится текст.
На этом пожалуй все.
Небольшой мануал на тему "как это сделать", так как информации в интернете много, а в целом не всегда все сразу получается. Начнем.
Шаг 1.
Подключаем дисплей как указано на картинке:
А именно: SDA к A4, SCL к A5, vcc к vcc, gnd к gnd. Желательно, конечно, отдельно подавать питание на дисплей, но питания от ардуино в данном случае хватит.
Возможно у вас могут быть перепутаны ноги SDA\SCL или A5\A4 на вашей плате или перепутаны подписи к ним. С этим позже разберемся.
Шаг 2.
Надо найти адрес нашего монитора. Так как на i2c шине может быть подключено до 127 устройств параллельно, то у каждого устройства должен быть свой адрес. Для этого воспользуемся i2c сканером. В интернете их великое множество, я использовал такой:
#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
while (!Serial);
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000); // wait 5 seconds for next scan
}
Заливаем этот скетч в ардуино и запускаем. Ждем результата в консоли в виде
I2C Scanner
Scanning...
I2C device found at address 0x3F
Если все именно так и получилось в консоли, то значит все подключено правильно и ничего не перепутано. Записываем адрес монитора, в моем случае это 0x3F.
Если же у вас ошибки или сканирование просто повисло (более 5 секунд ничего не пишет), то скорее всего у вас перепутаны ноги SDA\SCL (ну или A5\A4), потому просто берем и меняем из местами либо на ардуино, либо на мониторе. Запускаем сканер еще раз!
Внимание! Будьте внимательны и убедитесь, что скетч заливается нормально, то есть arduino ide выдает "Загрузка завершена" без ошибок в консоли. Иначе пробуйте залить снова.
Шаг 3.
Пробуем что нибудь вывести на дисплее.
Для этого нам понадобится библиотека LiquidCrystal_I2C.
Ее можно поставить, как из Arduino Ide (Меню->Скетч->Подключить библиотеку->Управлять библиотеками), так и из Git. Я рекомендую вариант из Git - https://github.com/agnunez/ESP8266-I2C-LCD1602 . Это немного пропатченная библиотека.
Теперь берем скетч, типа этого:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
// Arduino UNO => PIN 4 = SCL, PIN 5 = SDA
// NodeMCU Dev Kit => D1 = SCL, D2 = SDA
LiquidCrystal_I2C lcd(0x3F, 20, 4);
void setup()
{
// initialize the LCD
lcd.begin();
}
void loop()
{
lcd.print("Hello LCD Line 1");
lcd.setCursor(0, 1);
lcd.print("Hello LCD Line 2");
lcd.setCursor(0, 2);
lcd.print("Hello LCD Line 3");
lcd.setCursor(0, 3);
lcd.print("Hello LCD Line 4");
delay(4000);
}
Заливаем его в ардуино и смотрим на дисплей. Если все получилось и надписи видны - круто.
Если нет, то крутим потенциометр:
Крутим его в одну сторону до упора и в другую, настраивая таким образом яркость\контрастность дисплея. У меня он изначально был в самом крайнем положении (в 0) и я долго не мог понять, почему у меня не выводится текст.
На этом пожалуй все.
Комментарии
Отправить комментарий