Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

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

Тема в разделе "Железные вопросы по esp8266", создана пользователем powermetall, 24 дек 2016.

  1. powermetall

    powermetall Новичок

    Сообщения:
    2
    Симпатии:
    0
    Доброго времени суток.
    Пытаюсь подключить к 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, найженный в инете не работает.
    Может кто-нибудь сталкивался с такой проблемой?
     
  2. Arthur

    Arthur Авторитетный участник сообщества

    Сообщения:
    803
    Симпатии:
    89
    LiquidCrystal_I2C откуда брали?
     
  3. Arthur

    Arthur Авторитетный участник сообщества

    Сообщения:
    803
    Симпатии:
    89
    Я брал отсюда GitHub - agnunez/ESP8266-I2C-LCD1602: Library to control LCD1602 Liquid Crystal Displays like from ESP8266 mcu's through I2C bus - всё влёт заработало.

    Пример кода:
    Код (C):
    1.  
    2. #include <LiquidCrystal_I2C.h>
    3. #include <Wire.h>
    4.  
    5. #include <OneWire.h>
    6. #include <DallasTemperature.h>
    7.  
    8. #include "DHT.h"
    9.  
    10. #define LED     D0
    11. #define DHTPIN 12     // what digital pin we're connected to
    12.  
    13. // Uncomment whatever type you're using!
    14. #define DHTTYPE DHT11   // DHT 11
    15. //#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
    16. //#define DHTTYPE DHT21   // DHT 21 (AM2301)
    17.  
    18.  
    19.  
    20. // Set the LCD address to 0x27 for a 16 chars and 2 line display
    21. LiquidCrystal_I2C lcd(0x27, 16, 2);
    22.  
    23.  
    24. #define ONE_WIRE_BUS 14  // DS18B20 pin
    25. OneWire oneWire(ONE_WIRE_BUS);
    26. DallasTemperature DS18B20(&oneWire);
    27. DeviceAddress insideThermometer0, insideThermometer1;
    28.  
    29. // Connect pin 1 (on the left) of the sensor to +5V
    30. // NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
    31. // to 3.3V instead of 5V!
    32. // Connect pin 2 of the sensor to whatever your DHTPIN is
    33. // Connect pin 4 (on the right) of the sensor to GROUND
    34. // Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
    35.  
    36. // Initialize DHT sensor.
    37. // Note that older versions of this library took an optional third parameter to
    38. // tweak the timings for faster processors.  This parameter is no longer needed
    39. // as the current DHT reading algorithm adjusts itself to work on faster procs.
    40. DHT dht(DHTPIN, DHTTYPE);
    41.  
    42. void setup() {
    43.  
    44.   Serial.begin(115200);
    45.  
    46.  
    47.   pinMode(LED, OUTPUT);     // Initialize the LED_BUILTIN pin as an output
    48.  
    49.  
    50.   // initialize the LCD
    51.   lcd.begin(0,2);  // sda=0, scl=2
    52.  
    53.   // Turn on the blacklight and print a message.
    54.   lcd.backlight();
    55. // lcd.autoscroll();
    56.  
    57.   lcd.blink();
    58.   lcd.print("Hello, world!");
     
  4. WhiteCharmer

    WhiteCharmer Новичок

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

    tretyakov_sa Moderator Команда форума

    Сообщения:
    986
    Симпатии:
    151
    Зачем вы ее подключаете на GPIO0 и GPIO2?
    Подключите GPIO4 и GPIO5 и будет вам счастье.
     
    WhiteCharmer нравится это.
  6. tretyakov_sa

    tretyakov_sa Moderator Команда форума

    Сообщения:
    986
    Симпатии:
    151
    А нет подключаете вы правильно. Но вот почему: lcd.begin(16,2)?
     
    WhiteCharmer нравится это.
  7. WhiteCharmer

    WhiteCharmer Новичок

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

    tretyakov_sa Moderator Команда форума

    Сообщения:
    986
    Симпатии:
    151
    Возьмите 5V прямо с вашей платы. Подключитесь lcd.begin(4,5);
    Не используйте lcd.begin(0,2); На этих пинах стоят подтяжки к +3.3v.
     
  9. WhiteCharmer

    WhiteCharmer Новичок

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

    tretyakov_sa Moderator Команда форума

    Сообщения:
    986
    Симпатии:
    151
    Чтоб спалить плату нужно очень сильно постараться.
    Делайте все поэтапно, с начала все включите на 3v, чтоб заработало.
    Подключайте D2, D1. Если экран заработал все Ок.
    Vin это 5 вольт с USB. Проверьте тестером.
     
    WhiteCharmer нравится это.
  11. nikolz

    nikolz Гуру

    Сообщения:
    4.924
    Симпатии:
    454
    Согласно 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 нравится это.
  12. WhiteCharmer

    WhiteCharmer Новичок

    Сообщения:
    4
    Симпатии:
    0
    На 3V все работает прекрасно - на удаленом серваке вертится прога на Python, которая по запросу на 80-й порт отдает JSON с данными о системе (температура, кол-во памяти, процессов, сетевой траффик и т.д.). Я его дергаю раз в 10 секунд со своей ESP и хочу вывести на экран, а если вдруг будут критические значения - то еще и звуком просигналить. Этакий "железный" аналог Zabbix.
    Я подключил экран в точности как указано в ссылке товарища nikitoz (Wi-fi термометр на ESP8266. Часть 2. Собираем индикатор с LCD дисплеем на Wemos D1):[​IMG]
    И вдруг плата отвалилась прямо в процессе заливки прошивки, а микруха CH340G стала очень горячей - палец дольше пары секунд не подержишь. После этого она вообще перестала определятся - я и сделал вывод, что она сгорела. Но сейчас попробовал снова - прекрасно работает! Что же с ней в итоге случилось, я так и не понял.
    Проверил. Видимо, у меня какая-то особенная платка - нет там 5V...
    C LUA я знаком очень отдаленно, а вот на С/С++ и ему подобных писать приходилось, так что я как-то даже и не раздумывал об этом

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

    enjoynering Авторитетный участник сообщества

    Сообщения:
    559
    Симпатии:
    54

Поделиться этой страницей