Нужна помощь Подключение дисплея i2c 16х2 к Nodemcu 8266 12e

powermetall

New member
Доброго времени суток.
Пытаюсь подключить к Nodemcu 8266 12e lcd дисплей 16x2 i2c LCM1602
LCD дисплей 16x2 с I2C переходником, желтая подсветка. Интернет-магазин электроники и радиодеталей Амперкот.ру

подключаю GND, 5v
SDA - D2
SDL - D1

скетч

#include <LiquidCrystal_I2C.h>

// Construct an LCD object and pass it the
// I2C address, width (in characters) and
// height (in characters). Depending on the
// Actual device, the IC2 address may change.
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {

// The begin call takes the width and height. This
// Should match the number provided to the constructor.
lcd.begin(16,2);
lcd.init();

// Turn on the backlight.
lcd.backlight();

// Move the cursor characters to the right and
// zero characters down (line 1).
lcd.setCursor(5, 0);

// Print HELLO to the screen, starting at 5,0.
lcd.print("HELLO");

// Move the cursor to the next line and print
// WORLD.
lcd.setCursor(5, 1);
lcd.print("WORLD");
}

void loop() {
}

пробовал и другие примеры, в частности с этого сайта
Esp8266 и lcd 16x2 по i2c
и классика
Wiring NodeMCU ESP8266 12E with i2C 16×2 LCD Screen | 14Core.com

Однако результат всегда один - ряд черных квадратиков в первом ряду.

При этом пробовал подключать экран к Ардуино Нано как в примере у амперкота, все прекрасно работает, текст выводится. Отсюда можно сделать вывод что экран исправен и номер порта 0х27. Но ни один пример подключения к esp, найженный в инете не работает.
Может кто-нибудь сталкивался с такой проблемой?
 

Arthur

Active member
Я брал отсюда GitHub - agnunez/ESP8266-I2C-LCD1602: Library to control LCD1602 Liquid Crystal Displays like from ESP8266 mcu's through I2C bus - всё влёт заработало.

Пример кода:
Код:
#include <LiquidCrystal_I2C.h>
#include <Wire.h>

#include <OneWire.h>
#include <DallasTemperature.h>

#include "DHT.h"

#define LED     D0
#define DHTPIN 12     // what digital pin we're connected to

// Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)



// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);


#define ONE_WIRE_BUS 14  // DS18B20 pin
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);
DeviceAddress insideThermometer0, insideThermometer1;

// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors.  This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);

void setup() {

  Serial.begin(115200);

 
  pinMode(LED, OUTPUT);     // Initialize the LED_BUILTIN pin as an output


  // initialize the LCD
  lcd.begin(0,2);  // sda=0, scl=2

  // Turn on the blacklight and print a message.
  lcd.backlight();
// lcd.autoscroll();

  lcd.blink();
  lcd.print("Hello, world!");
 

WhiteCharmer

New member
Господа, та же самая фигня :(
Имею вот эту платку, 1602 экран с I2C. Под обычным Arduino UNO все работает без проблем, а на esp8266 NodeMCU 3 не хочет - либо вообще не заводится, либо тупо квадратики в верхней строке. Пробовал либу из поста выше - не заводится...
 

tretyakov_sa

Moderator
Команда форума
Зачем вы ее подключаете на GPIO0 и GPIO2?
Подключите GPIO4 и GPIO5 и будет вам счастье.
 

WhiteCharmer

New member
Спасибо за ответ - навело на определенные мысли, и в результате исследования и переподключения проводов все заработало!
Код:
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
 
  LiquidCrystal_I2C lcd(0x27,16,2); // Check I2C address of LCD, normally 0x27 or 0x3F
 
  void setup()  {
    lcd.begin(0,2);      // In ESP8266-01, SDA=0, SCL=2              
    lcd.backlight();
    lcd.createChar(1, heart);
  }
 
  void loop()  {
    lcd.home();                // At column=0, row=0
    lcd.print("ESP8266");  
    lcd.setCursor(0, 1);
    lcd.print("LiquidCrystalI2C");
    delay(500);
    lcd.setCursor(10, 0);      // At column=10, row=0
     delay(500);
    lcd.setCursor(10, 0);      // At column=10, row=0
}
Но теперь возникла другая проблема: у экрана очень низкая контрастность, хотя при подключении к Arduino UNO все прекрасно. Грешу на то, что экран запитан на 3V вместо 5v. Отсюда вопрос: если я возьму 5V с внешнего источника 5V 2A и заведу ноги дисплея GND и VCC на него, не спалю ли я все нафиг? Или все-таки лучше заказать у китайцев нормальный преобразователь?
 

tretyakov_sa

Moderator
Команда форума
Отсюда вопрос: если я возьму 5V с внешнего источника 5V 2A и заведу ноги дисплея GND и VCC на него, не спалю ли я все нафиг? Или все-таки лучше заказать у китайцев нормальный преобразователь?
Возьмите 5V прямо с вашей платы. Подключитесь lcd.begin(4,5);
Не используйте lcd.begin(0,2); На этих пинах стоят подтяжки к +3.3v.
 

WhiteCharmer

New member
Возьмите 5V прямо с вашей платы. Подключитесь lcd.begin(4,5);
Не используйте lcd.begin(0,2); На этих пинах стоят подтяжки к +3.3v.
Поэкспериментировал еще с подключением дисплея и благополучно сжег платку :) Вроде не первый год занимаюсь программированием, высшее математическое за плечами, а как был рукожопом, так и остался :(. С ардуинкой второй день знаком, хорошо хоть, что заказал сразу несколько. Не будите ли вы так любезны кинуть в меня ссылкой на нормальный мануал, а то в интернетах всякого насмотрелся. За основу взял вот эту картинку: тут как раз пины 0 и 2 - это те, к которым я подключал дисплей (lcd.begin(0,2)). Меня насторожило то, что это линии данных, а не питания, но я все же решил попробовать перенести их на D1 и D2. Насколько я сейчас понимаю, 3V и землю тоже нужно было перенести. Встречал примеры, где для 5V берется VIN и G рядом с ним для земли, но у меня в таком виде даже подсветка не загорелась.
 

tretyakov_sa

Moderator
Команда форума
Чтоб спалить плату нужно очень сильно постараться.
Делайте все поэтапно, с начала все включите на 3v, чтоб заработало.
Подключайте D2, D1. Если экран заработал все Ок.
Vin это 5 вольт с USB. Проверьте тестером.
 

nikolz

Well-known member
Поэкспериментировал еще с подключением дисплея и благополучно сжег платку :) Вроде не первый год занимаюсь программированием, высшее математическое за плечами, а как был рукожопом, так и остался :(. С ардуинкой второй день знаком, хорошо хоть, что заказал сразу несколько. Не будите ли вы так любезны кинуть в меня ссылкой на нормальный мануал, а то в интернетах всякого насмотрелся. За основу взял вот эту картинку: тут как раз пины 0 и 2 - это те, к которым я подключал дисплей (lcd.begin(0,2)). Меня насторожило то, что это линии данных, а не питания, но я все же решил попробовать перенести их на D1 и D2. Насколько я сейчас понимаю, 3V и землю тоже нужно было перенести. Встречал примеры, где для 5V берется VIN и G рядом с ним для земли, но у меня в таком виде даже подсветка не загорелась.
Согласно datasheet питать дисплей надо от 5 вольт На плате nodemcu можно подключить к VIN и плату питаете от USB , через который будете программировать .
Для проверки что все исправно возьмите программу терминала например Tera Term установите в ней com порт платы и скорость 74880 и нажмите кнопку RST на плате.
Увидите сообщение загрузчика и успокоитесь.
-----------------------
Рекомендую для начала поставить на nodemcu LUA и поиграться с ней в ESPloader. Там же можно и с дисплеем поиграться
------------------------
Вот здесь все разжевано относительно как подключить и что залить :
egueli/nodemcu-i2c-lcd
i2c / SPI character LCD backpack
Wi-fi термометр на ESP8266. Часть 2. Собираем индикатор с LCD дисплеем на Wemos D1
How to Connect an LCD Display to ESP8266 NodeMCU
ArduinoIDE + NodeMCU + LCD1602 + I2C | Амперка / Форум
 

WhiteCharmer

New member
Делайте все поэтапно, с начала все включите на 3v, чтоб заработало.
На 3V все работает прекрасно - на удаленом серваке вертится прога на Python, которая по запросу на 80-й порт отдает JSON с данными о системе (температура, кол-во памяти, процессов, сетевой траффик и т.д.). Я его дергаю раз в 10 секунд со своей ESP и хочу вывести на экран, а если вдруг будут критические значения - то еще и звуком просигналить. Этакий "железный" аналог Zabbix.
Чтоб спалить плату нужно очень сильно постараться.
Я подключил экран в точности как указано в ссылке товарища nikitoz (Wi-fi термометр на ESP8266. Часть 2. Собираем индикатор с LCD дисплеем на Wemos D1):

И вдруг плата отвалилась прямо в процессе заливки прошивки, а микруха CH340G стала очень горячей - палец дольше пары секунд не подержишь. После этого она вообще перестала определятся - я и сделал вывод, что она сгорела. Но сейчас попробовал снова - прекрасно работает! Что же с ней в итоге случилось, я так и не понял.
Vin это 5 вольт с USB. Проверьте тестером.
Проверил. Видимо, у меня какая-то особенная платка - нет там 5V...
Рекомендую для начала поставить на nodemcu LUA и поиграться с ней в ESPloader. Там же можно и с дисплеем поиграться
C LUA я знаком очень отдаленно, а вот на С/С++ и ему подобных писать приходилось, так что я как-то даже и не раздумывал об этом

В итоге я тут еще поковырялся с внезапно ожившей платкой, изучил вот этот материал: Начало работы с ESP8266 (LiLon NodeMCU V3) Полное руководство для IoT (в качестве сервера) и у меня получилось все завести, взяв 5V с пина VU:

Еще раз огромное спасибо всем откликнувшимся, экран прекрасно работает, все данные выводятся, как я и хотел!
 
Сверху Снизу