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="
Но у дисплея не много букв помещается, по этому я пишу обычно по короче.
Ну и собственно вот как все это выглядит в итоге: