NSPanel: http://alii.pub/6d6k50
NSPanel подешевле: http://alii.pub/6d6k66
Программатор: http://alii.pub/6d6k7x
Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.
ВАЖНО!!! ПОСЛЕ ПЕРЕПРОШИВКИ, ВЫ УЖЕ НЕ ВЕРНЕТЕ СТАНДАРТНУЮ ПРОШИВКУ ОТ SONOFF И В EWELINK ПРИЛОЖЕНИИ РАБОТАТЬ НЕ БУДЕТ.
Для того чтоб перепрошить NSPanel нам нужно добраться до основной платы. Там выведены пины 3.3v , rx, tx, io, gnd.
Для программирования нам понадобится usb/ttl конвертер.
Подключать нужно rx и tx пины платы и конвертера крест на крест.
Пин Io0 на плате нужно замкнуть на землю.
Если не хотите замыкать, то нужен специальный usb/ttl конвертер. Я использовал вот такой: http://alii.pub/6d6k7x
С ним не нужно пин io0 замыкать на землю. Программатор сам это делает.
Итак, как подключить программатор и прошить вроде разобрались. Теперь давайте собственно перейдем к подготовке прошивки.
Без Home Assistant нам не удастся полностью прошить панель. Мы сможем прошить только Основную плату с esp32. Но у нас в NSPanel присутствует еще дисплей Nextion. Который собственно сам является отдельным умным дисплеем и под него нужно отдельную прошивку изготавливать и загружать.
И так, первым делом в Home Assistant открываем File Editor и там в папке /config/esphome/ отредактируем файл secrets.yaml. Если нет этого файла, то создадим новый.
Содержимое конфига должно выглядеть примерно так:
wifi_ssid: "NETGEAR"
wifi_password: "24112515156"
nextion_update_url: "http://192.168.31.145:8123/local/hmi.tft"
Собственно SSID и пароль – это учетные данные от вашей wi-fi сети.
А вот с nextion_update_url интересней.
ip адрес нужно заменить на ip адрес Вашего сервера Home Assistant. А путь /local/hmi.tft – это путь который ведет к /config/www/hmi.tft
Не спрашивайте почему (долго объяснять) Просто примите к сведению, что файл hmi.tft должен у Вас лежать по пути /config/www/.
Ну и собственно вам нужно в File Editoре перейти в папку /config/www и закачать туда файл hmi.tft. Это файл дисплея Nextion, который собственно я уже подготовил для работы. Если хотите чтоб у Вас все так-же работало как у меня в видео, то качайте его и загружайте в NSPanel не меняя ничего. Скачать его можно по ссылке: https://disk.yandex.ru/d/ry6xj0WL9PhE8g
Ну а если Вы хотите сами отредактировать проект в Nextion editor, то качайте файл проекта: https://disk.yandex.ru/d/QKqBHNqndye0gw
Чтоб проверить работоспособность, что Ваш файл hmi.tft доступен для загрузки прошивки, просто в браузере впишите адрес http://192.168.31.145:8123/local/hmi.tft
И у Вас должен начать скачиваться файл. Если этого не происходит, то что-то у Вас не так.
Ну а если у Вас скачивается файл, то значит все у Вас правильно. И после того как Вы прошьете основную плату NSPanel прошивкой ESPHome. У Вас в Home Assistant появится служба под названием “ESPHome: nspanel_upload_tft”
Ее можно найти (но только после загрузки прошивки в NSPanel и добавлении получившегося устройства в Home Assistant) перейдя в “Панель разработчика-> службы” там найти службу ESPHome: nspanel_upload_tft и нажать кнопку “Вызвать службу”. После этого начнется прошивка дисплея.
Ну и собственно на дисплее NSPanel вы должны увидеть шкалу загрузки прошивки:
Так, с прошивкой дисплея Nextion у NSPanel разобрались. Надеюсь понятно как это сделать.
Теперь возвращаемся немного в прошлое. А именно в то время, когда мы подготавливаем прошивку ESPHome Для NSPanel.
У прошивки более 800 строчек кода и все мне очень сложно описать. По этому давайте я опишу основные. А про все остальные я рассказал в видео, которое будет в конце статьи.
Итак, из прошивки Важно следующее.
Например, за кнопку включения и выключения объекта освещения light или выключателя switch. Отвечают следующие блоки:
- platform: nextion
name: $device_name Light 0 button
page_id: 2
component_id: 17
on_click:
- homeassistant.service:
service: light.toggle
data:
entity_id: light.desk_lamp
Эта кнопка, которая находится на странице id 2 nextion дисплея. Компонент кнопки 17. Их можно посмотреть в Nextion проекте:
Далее объявляется, что это service Home Assistant который называется light.toggle
И он работает с объектом light.desk_lamp
light.desk_lamp – это моя настольная лампа.
Далее код который будет выбирать картинку из проекта Nextion для этой лампы. Картинки две. Одна будет показывать состояние включенное, и вторая следовательно выключенное состояние.
- platform: homeassistant
id: secto
entity_id: light.desk_lamp
on_value:
then:
- wait_until:
switch.is_on: nextion_init
- lambda: |-
int symbol = 33;
if (id(secto).state == "off") {
symbol=32;
}
id(disp1).send_command_printf("Lights.light0.pic=%i", symbol);
Тут тоже описываем, что это элемент Home assistant light.desk_lamp
тоесть моя настольная лампа. Далее описывается функция которая будет вызывать при включении symbol = 33
, а при выключении symbol=32
ЧТо – это за symbolы такие. Это собственно id картинки. Тоесть когда лампа будет включена, вызвать картинку 33, а когда выключена картинку 32. Номера этих картинок так-же надо смотреть в проекте nextion:
Картинки можете сами вставлять свои, они должны быть разрешением 85×85. Ну и собственно изменить надо будет только symbol.
Ну а собственно вот эта строчка какраз выводит эти картинки в поле light0 которое тоже выделено на картинке выше. id(disp1).send_command_printf("Lights.light0.pic=%i", symbol)
- platform: homeassistant
id: secto_name
entity_id: light.desk_lamp
attribute: friendly_name
on_value:
then:
- wait_until:
switch.is_on: nextion_init
- lambda: id(disp1).set_component_text_printf("Lights.light0t", "%s", id(secto_name).state.c_str());
Ну а этот блок выводит название объекта под каждой кнопкой. тут тоже надо указать какой это объект. В моем случае это light.desk_lamp
Таким образом описывать можно все 8 блоков. Я описал так только 3. И выглядят они в итоге на живой NSPanel вот таким образом:
Так-же описаны и кнопки управления музыкой. Музыкой яндекс колонки ( какнибудь о ней тоже расскажу).
- platform: nextion
name: $device_name Music play pause
page_id: 1
component_id: 2
on_click:
- homeassistant.service:
service: media_player.media_play_pause
data:
entity_id: media_player.yandex_station_lp0000000000003532610000c4d25201
Ну и давайте рассмотрим одну кнопку “Пауза, плей” остальные по аналогии.
Значит тут так-же как в начале с выключателем настольной лампы, указывается page_id: 1 – это id страницы на которой находится кнопка.
Далее component_id: 2 – это id кнопки которая отвечать будет за play_pause.
Потом идет сервис Home assistant. У Home Assistant есть куча сервисов которые отвечают за медиа плеер. Там куча кнопок и старт, пауза, громкость и всякое всякое. Вот оттуда я собственно и взял службу которая отвечает за старт и стоп трека. Она называется: media_player.media_play_pause
Ну и последним указывается для какого устройства управлять кнопкой плей/стоп. У меня это яндекс станция. И у меня это устройство выглядит как: media_player.yandex_station_lp0000000000003532610000c4d25201
Так, со страницей музыки тоже разобрались.
Теперь давайте покажу как вывести например свой какой-нибудь датчик. В моем случае это датчик CO2. Он тоже берется из Home Assitant.
- platform: homeassistant
id: co2
entity_id: sensor.mh_z19_co2_value
on_value:
then:
- wait_until:
switch.is_on: nextion_init
- lambda: id(disp1).set_component_text_printf("Home.text2", "%.1fppm", id(co2).state);
Ну собственно тут берется сенсор sensor.mh_z19_co2_value
– это мой сенсор co2 в home assitant.
Ну и вот этой строчкой он собственно выводится на дисплей на страничку Home в блок text2 - lambda: id(disp1).set_component_text_printf("Home.text2", "%.1fppm", id(co2).state)
Это я описал элементы, которые каждый будет конфигурировать под себя. А остальное собственно останется без изменений. По этому с Вашего позволения я не буду их описывать. О них я рассказал в видео. Которое можете посмотреть ниже.
Скачать конфиг esphome можно по ссылке: https://disk.yandex.ru/d/FlD3wQL9dEr2hg
Там файл в формате .yaml Его лучше открывать блокнотом.