• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь Подключение дисплея 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:

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

Trikster

New member
На 3V все работает прекрасно - на удаленом серваке вертится прога на Python, которая по запросу на 80-й порт отдает JSON с данными о системе (температура, кол-во памяти, процессов, сетевой траффик и т.д.). Я его дергаю раз в 10 секунд со своей ESP и хочу вывести на экран, а если вдруг будут критические значения - то еще и звуком просигналить. Этакий "железный" аналог Zabbix.

Я подключил экран в точности как указано в ссылке товарища nikitoz (Wi-fi термометр на ESP8266. Часть 2. Собираем индикатор с LCD дисплеем на Wemos D1):

И вдруг плата отвалилась прямо в процессе заливки прошивки, а микруха CH340G стала очень горячей - палец дольше пары секунд не подержишь. После этого она вообще перестала определятся - я и сделал вывод, что она сгорела. Но сейчас попробовал снова - прекрасно работает! Что же с ней в итоге случилось, я так и не понял.

Проверил. Видимо, у меня какая-то особенная платка - нет там 5V...

C LUA я знаком очень отдаленно, а вот на С/С++ и ему подобных писать приходилось, так что я как-то даже и не раздумывал об этом

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

Еще раз огромное спасибо всем откликнувшимся, экран прекрасно работает, все данные выводятся, как я и хотел!
Добрый день ! И у меня оказалась проблема с подключением дисплея точь в точь . Благодаря поднятому вами вопросу , почитал ответы , прошел по ссылкам и решил проблему . Нужно было загрузить для начала фишер -мастер и потом все получилось. Спасибо
 

Alexey_77

New member
Обычные LCD 1602 с алиэкспресс легко переделываются на 3.3В. Надо допаять ICL7660, пару конденсаторов 1206 на 1uF...4.7uF и переключить перемычку с J1 to J3. Вдруг кому поможет. Можно и сразу на 3.3В купить, но это дороже.
 
Сверху Снизу