
lcd 20×4: http://alii.pub/66ack3
lcd 16×2: http://alii.pub/66acln
Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.
Дисплеи LCD на 16×2 и 20×4 наверное самые популярные из дисплеев на Arduino. Мне кажется у каждого человека, кто увлекается платами arduino и esp, у каждого есть такой дисплей. И будет правильным показать как выводить информацию с датчиков на этот дисплей.
Вывод осуществляется очень просто. Сейчас постараюсь здесь его описать.
Давайте сделаем следующим образом, ниже я добавлю готовый код с датчиком BME280 и выводом информации (температуры, влажности и давления) с этого датчика на дисплей LCD20x4. И попробую описать каждую строчку для того чтоб было понятно, что и зачем.
i2c:
  sda: 21
  scl: 22
  scan: true
  
sensor:
  - platform: bme280
    temperature:
      name: "BME280 Temperature"
      id: temperature
    pressure:
      name: "BME280 Pressure"
      id: pressure
    humidity:
      name: "BME280 Humidity"
      id: humidity
    address: 0x76
    update_interval: 10s
    
display:
  - platform: lcd_pcf8574
    dimensions: 20x4
    address: 0x27
    lambda: |-
      it.printf(2, 0, "%.1f", id(temperature).state);
      it.printf(2, 1, "%.1f", id(humidity).state);
      it.printf(2, 2, "%.1f", id(pressure).state);
      it.print(0, 0, "T=");
      it.print(0, 1, "H=");
      it.print(0, 2, "P=");
      
Итак, первый блок, это блок i2c там, мы указываем на каких пинах esp32 значатся пины SCL и SDA шины i2c.
Далее у нас объявляется Sensor. В нашем случае это сенсор BME280 и объявляется у него 3 параметр (температура, влажность и далвение). i2c адрес этого датчика и update_interval – это интервал с которым будут сниматься показания с датчика. Все это я уже показывал как сделать в этой статье:
Подключение датчика температуры, влажности и давления bme280 в ESPHome и Home Assistant.
Но, к каждому блоку параметров (температура, влажность и давление) мы добавили еще id. И назвал я каждый id произвольно, но так, чтоб понимал какой id к какому блоку параметров датчика bme280 он относится. В общем получается , что я назвал их temperature,humidity,pressure.
Эти id какраз и нужны для того, чтоб описывать какую информацию выводить на дисплей.
Далее у нас идет блок Display. dimensions: 20x4 Тут мы описываем, что это дисплей lcd_pcf8574 так называется i2c преобразователь для LCD дисплеев строчных.
Далее указываем размер дисплея. В моем случае это 20×4, но если у Вас поменьше, указываете 16×2.
address: 0x27  Ну тут понятно, это i2c адрес дисплея.
Ну а далее идет lambda. Это какраз блок вывода информации. Вот строчка вывода температуры:
it.printf(2, 0, "%.1f", id(temperature).state);
Где 2  это столбец начала вывода информации. Отсчет начинается с цифры 0. Так как информация будет просто цифрами выводиться, а я хотел впереди еще поставить “T=” То по этому и поставил цифру 2. Отступив тем самым 2 первых места под символы.
 0 – это строка на которой выводить информацию. Собственно у меня выводится на первой строке, по этому цифра 0. Так – же по аналогии постороены следующие 2 строчки кода, там меняется только номер строки.
Следующий параметр, это "%.1f". Это формат вывода информации. знак “%” это целые числа. 1f – это округление до 1 цифры после запятой. Следовательно если нам 2 цифры нужны после запятой, то пишем %.2f
Ну и последнее  это id(temperature).state Собственно тут меняется только то что в скобках. А именно это id температуры, который мы указывали в блоке сенсора. Если такого id не объявлено ни где в коде, то выдаст ошибку и не скомпилируется наш код.
Ну далее строчки
it.printf(2, 1, "%.1f", id(humidity).state);
      it.printf(2, 2, "%.1f", id(pressure).state);
Они такие -же только для вывода информации давления и влажности.
Ну и последние 3 строчки – это
it.print(0, 0, "T=");
      it.print(0, 1, "H=");
      it.print(0, 2, "P=");
Собственно тут все так-же как я описал выше, только значения "T=" "H=" "P="  – это обычные обозначения произвольные которые я написал от себя, чтоб было понятно где температура, где значения влажности. а где давления. Вы тут можете и полностью написать "Temperature=" Но у дисплея не много букв помещается, по этому я пишу обычно по короче.
Ну и собственно вот как все это выглядит в итоге:
