Skip to content

Files

Latest commit

afb9688 · Apr 26, 2017

History

History
69 lines (59 loc) · 5.18 KB

README.md

File metadata and controls

69 lines (59 loc) · 5.18 KB

Еще одни часы или показываем информацию на экране

У меня на кухне есть дисплеи на плите, на микроволновке и на холодильнике, но все они требуют отдельной ручной настройки и не умеют показывать ничего, кроме времени. Да и то через пару месяцев оказывается что все показывают разное. С помощью этого проекта мы добавим к ним еще один дисплей и покажем как отображать на нем время с точностью до секунды, текущую погоду и прогноз на сегодня.

Аппаратные компоненты

Собираем устройство

Из магазина нам приходят компонетны в таком виде: Так выглядят наши железочки Воспользовавшись паяльником, собираем наш убердевайс В сборе Проследите, чтобы платы не соприкасались Вид сбоку

Прошиваем наше устройство

Идем на сайт NodeMCU custom builds выбираем там ветку dev (мы же хотим использовать последние фичи). Выбираем там необходимые модули. Нам понадобятся: file,i2c,mqtt,net,node,sjson,tmr,u8g,uart,wifi,tls. Выбираем драйвер дисплея, в нашем случае это ssd1306_64x48_i2c и шрифты по вкусу, кириллические символы находятся в font_unifont_0_8. Через некоторое время на почту приходит письмо с ссылкой на скомпилированную прошивку. Если вам лень этим заниматься можете взять уже собранную. Заливаем ее с помощью esptool: esptool.py --port /dev/ttyUSB0 write_flash -fm dio -fs 32m 0x00000 nodemcu-dev-13-modules-2017-04-24-09-58-48-integer.bin. Наш девайс готов к программированию на lua.

Заливаем код

С помощью приложенного Makefile или любым другим способом загружаем код из репозитория в устройство. В файле config.json определяем настройки для нашей беспроводной сети и MQTT брокера. Так же загружаем его.

Показываем что-нибудь

Наше устройство подключается к брокеру и подписывается на топик oled/events/+. Модуль ожидает получить в качестве тела сообщения JSON представляющий собой массив объектов примерно такого вида:

[  
   {  
      "text":"13:12:34",
      "x":0,
      "y":11,
      "type":"text",
      "font":"font_6x10"
   },
   {  
      "text":15 C,
      "x":2,
      "y":29,
      "font":"font_unifont_0_8",
      "type":"text"
   },
   {  
      "text":"15 16 C",
      "x":2,
      "y":47,
      "type":"text",
      "font":"font_unifont_0_8"
   },
   {  
      "type":"image",
      "image":{  
         "type":"Buffer",
         "data":[0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,6,0,8,2,1,56,192,1,48,206,0,128,31,0,192,49,0,96,96,0,102,96,10,103,96,15,96,96,0,192,48,0,192,63,0,128,15,0,56,192,1,24,128,1,0,6,0,0,6,0,0,6,0,0,0,0]
      },
      "x":40,
      "y":12,
      "w":24,
      "h":24
   }
]

Поле type может принимать значения text, image, gird. В последнем случае будет нарисована сетка, облегчающая размещение элементов на экране.

Отправляем информацию

Информацию можно отправить любым удобным для нас способом. Я использовал Node-RED Код для него доступен в этом репозитории. Не забудьте подкорректировать пути, по которым у вас лежат иконки.

Демонстрационное видео

Загрузка

TODO

  • Собрать в корпусе