Прошивка мікроконтролера esp32 для моніторингу світла проектом svitlobot.in.ua

Буквально нещодавно я написала ще одну нову покрокову статтю по прошивці та інтеграції мікроконтролера ESP із волонтерським проєктом СвітлоБот.
Стаття є набагато простішою в своїй реалізації та трішки краща ніж ця (на мою думку буквально кожен зможе повторити описані дії у ній)
Ознайомитися можна - 👉🏼 натиснувши тут 👈🏼
*все ж таки для загального розуміння принципу роботи, перед ознайомленням раджу спершу прочитати цю статтю, а лише потім - нову. Дякую!
Сьогодні ми спробуємо покроково інтегрувати проект СвітлоБот на базі мікроконтролера ESP32 для відслідковування статусу світла в нашому будинку. Якщо ви раптом не знали, існує чудовий проект під назвою СвітлоБот . Як він працює, та що це за дракон коротко описано нижче:

СвітлоБот - проект ентузіастів для моніторингу статусу світла у вашому будинку, який створила група учнів із ліцею «Наукова Зміна» - Чигарьови Дмитро і Артем. Суть проекту полягає в тому, аби підключивши вдома або в офісі в розетку на зарядку старенький або непотрібний смартфон/планшет (android) та налаштувавши його згідно наданої інструкції, ви зможете отримувати сповіщення у свій створений телеграм-канал повідомлення про наявність/відсутність світла на підставі того, йде зарядка цього смартфону чи ні.

Чудово! Цікаво! Те, що треба! Подумала я, споглядаючи графіки вимкнень світла у своєму місті. Через кляті обстріли русні, не зайвим було б розуміти, на відстані, чи є у моєму будинку 220v в розетці. Тим більше моніторинг через Телеграм виглядає дуже зручним.
Щоб створити свого СвітлоБота, переходимо на сайт і вивчаємо як це працює, адже тлумачити тут немає сенсу. Ок.
Рухаємося далі.. У нас є два варіанти моніторингу світла згідно інструкцій - через роутер або старий Android смартфон. Чесно кажучи я спробувала обидва варіанти. При першому варіанті не кожному дозволяє прошивка роутера налаштувати усе коректно, але це працює досить стабільно.
Тоді інше питання - як це має працювати коли у тебе є ДБЖ на роутері? Якщо ДБЖ і надалі живитиме його? Можна звісно використовувати інший старий роутер, який буде зв'язаний із основним, який буде працювати без ДБЖ - подумала значить я, і зрозуміла що не кожен це реалізує.
Значить залишається лише Android смартфон. Але й тут багато проблем.
Потрібно по-перше мати його, і достатньо в робочому стані не за часів палеоліту, адже в моєму випадку, програмка від СвітлоБота яка була встановлена на Android телефоні, по не відомим мені причинам, постійно працювала не стабільно, і так із декількома тестованими мною смартфонами (виліт програми, помилки, відвалювалась мережа після вимкнень світла тощо). Звісно, у когось це працює без нарікань, хтось навіть встановлює Бота на старі Android TV приставки - круто, прогресивно.
По-друге, телефон повинен бути 24\7 увімкнений в БЖ і розетку 220v, та підключений до WI-FI або моб. мережі для пінгу. А як відомо у смартфонах є літієві акумулятори, які з часом на постійній підзарядці можуть деградувати і нагріватися. А якщо це старий смартфон? А скільки в такому стані він пропрацює постійно увімкненим на підзарядці - для мене загадка, адже це в першу чергу безпека моєї оселі. Думаю ви самі знаєте, що літієві акумулятори можуть дуже сильно палати, як сраки окупантів. Тому цей варіант для мене теж відпав, а купувати інший Android смартфон лише під цей проект, навіть б\в - фінансово не розумно.
На деякий час я забула про цей проект, поки не зацікавив мене ще один, третій варіант, встановлення СвітлоБота на маленьку платку, яка живиться від 3v або 5v (USB), не потребує багато місця, є дуже компактною, та саме головне вартує як одна шаурма в кіоску. На перший погляд людині яка не розуміється в програмуванні це виявиться складним і не зрозумілим рішенням. STOP!
Витративши один вечір збирання інформації я зуміла за 15 хвилин прошити та запустити свій власний Бот сповіщень! Тому це не складно, а навпаки цікаво. Ось моя покрокова інструкція:
Перед тим як ми приступимо, хочу повідомити що я не несу жодної відповідальності за ваші дії. Усе що ви робите - на власний страх і ризик. Інформація подана виключно в інформативних цілях. Я не є автором прошивок, та ідеї цієї реалізації. Лише описую зібрану мною інформацію.
Після вступного слова, коментарів застереження - можемо приступати! Ю-ху!
Для реалізації нам потрібно придбати маленьку плату мікроконтролера ESP. Коротко що це таке:
ESP32 — це мікроконтролерний модуль з вбудованим Wi-Fi та Bluetooth, він широко використовується в IoT-проєктах, має високу продуктивність, низьке енергоспоживання і підтримує різноманітні периферійні інтерфейси. Завдяки своїй гнучкості та потужності, ESP32 підходить для розробки інтелектуальних пристроїв, сенсорних систем, автоматизації та інших електронних проєктів.
Існує безліч варіантів цих плат, із різними процесорами, потужністю (лол___)), та іншими характеристиками (наприклад esp8266). Так склалося, що в моєму випадку вибір впав саме на - ESP32, а інструкція написана саме під прошивку цієї версії ESP.
Пишу відразу, ця інструкція і прошивка писалася під ESP32, можете спробувати також інші версії ESP, але перед тим ознайомтеся в спільноті у Телеграм! (усі посилання в кінці статті).
Наприклад прошивка платки esp8266 може відрізнятися! Майте на увазі!
Чому саме ESP32? - вона є новішою та потужнішою (лол_)) навіть за ту саму ESP8266, а їх різниця в ціні як додатковий соус до шаурми.

Самим розумним варіантом буде замовити ESP32 із Aliexpress, їх ціна зазвичай становить в районі +- 100 гривень, дивлячись як і коли купувати. А ESP8266 - ще дешевше. При пошуку платки, обов'язково шукайте нормальну із USB роз'ємом на ній (MicroUSB або Type-C) - інакше як прошити?)
Звісно Алік - це довго, звісно можна придбати десь в найближчому радіомагазині або в інтернеті. Але наші чудові місцеві онлайн продавці останнім часом ставлять ціну в х2 від початкової, в районі +-200 гривень за цю версію ESP. Навіщо? - все ж для людей! Тому раджу також пошукати по усіма улюбленим OLX - можливо ви з рук придбаєте їх по ціні Аліка. Звісно на мою скромну думку, навіть ціна в 200 грн - у рази дешевше аніж купівля старого б\в корча на Android, для реалізації такого чудового проекту)
Отже ми маємо на руках ESP32, далі нам знадобиться ПК або ноут (на базі Windows \ Mac, можливо й Linux..) щоб швидко прошити платку. Саме в моєму випадку це MacBook, тому надалі інструкція саме під Mac. У кого система під Windows - не скіпайте цю статтю, процес прошивки приблизно однаковий що на Mac. Щодо Linux - не знаю, адже є питання в драйверах, чи "дружить" ця ОС із ESP. Відповіді вам не дам, тому спробуйте також.
Файно! 🤌🏻
У нас є ПК\ноут, платка ESP32, та кабель для підключення її до USB вашого компуктера. Кабель бажано використовуйте якісний. В моєму випадку потрібен MicroUSB шнур, адже в мене платка під цей роз'єм. Ваша платка може бути з роз'ємом Type-C, кому як зручніше.
Наступним моїм кроком було б завантаження прошивки та потрібних драйверів під мою версію ESP32.
Наголошую що я не є автором цієї прошивки, а любі зміни чи працездатність її залежить не від мене. На момент написання цієї статті усе працює коректно, а прошивка навіть своєчасно отримує виправлення.
АЛЕ ДЕЩО ЗМІНИЛОСЯ !
Після написання цієї статті, відбулися зміни і автор в своєму репозиторії GitHub видалив усі скомпільовані bin файли прошивок та замінив на варіант самостійної збірки, а також додав ЩЕ ПРОСТІШИЙ варіант за допомогою - власної швидкої веб-прошивки
Тому я відредагувала та оновила цю статтю щоб виключити ВЖЕ НЕАКТУАЛЬНІ кроки ))
Проте ви можете далі читати та ознайомлюватися з усіма діями, це обов'язково.
Звісно котята, я залишаю перші (не актуальні) кроки, які описала раніше, ось вони (їх повторювати не потрібно):
(ВЖЕ НЕАКТУАЛЬНІ КРОКИ):
Топаємо на репозиторій GitHub та завантажуємо саму прошивку для нашої ESP32. Ось посилання на репо - https://github.com/vitich/svitlobot-healthcheck

- - натискаємо на Code
- - завантажити ZIP архів
Після цього ви завантажите ZIP архів із всіма файлами та прошивками цього репо.
Далі я розпаковую файли із ZIP-архіву в зручному для мене місці у папку:

ОНОВЛЕНІ КРОКИ:
Тепер нічого нам не потрібно завантажувати із репозиторія автора!
Просто топаємо на репозиторій GitHub, ось знову посилання на репо - https://github.com/vitich/svitlobot-healthcheck
та шукаємо там посилання на веб-інсталятор, він має бути за адресою - https://vitich.github.io/svitlobot-healthcheck/
😮 Так в чому двіж? Ось:
Тепер ця штука самостійно завантажить та збере із вихідного коду прошивку, і навіть сама зашиє в платку! Вау
Усі кроки дуже схожі, що й описано нижче у статті. Якщо не з'являється наша ESP бо немає драйверів, встановлюємо їх як я описую усе нижче (читайте - усе зрозумієте).
Якщо помилки, вирішуємо все як я описую у статті нижче. Тобто за новою інструкцією все проходить аналогічно, єдине що тепер нам НЕ ПОТРІБНО щось завантажувати на ПК і прошивати платку за адресою - https://web.esphome.io ❌ - одним словом ЗАБУЛИ!
Натомість робимо ось так:
- Прочитали цю статтю до кінця, встановили усі потрібні драйвери (якщо потрібно), ознайомилися із майбутніми помилками - ОК 👍
- Підключили плату як описано все нижче у статті, і тепер замість адреси - https://web.esphome.io ❌, ми переходимо за адресою - https://vitich.github.io/svitlobot-healthcheck/ ✅
- Нажимаємо Connect, і у випадаючому списку з GoogleChrome також аналогічно шукаємо нашу ESP платку як за мануалом.
- Підключаємося до неї, і якщо у нас є всі драйвери, підключення буде успіше:

5. Чекаємо поки прошиється платка, і все! Прошивка збереться, та автоматично прошиється через браузер!
6. Наступні ваші дії будуть як за мануалом у цій статті, а саме - знайти нову точку доступу WI-FI яку ESP вам створить, підключитися.
7. Вписати дані вашого домашнього Wi-Fi, потім отримати IP адресу яку призначить роутер платі ESP, та увійти в адмінку на вашій ESP. Тобто усі дії що детально описую я нижче у статті!
Єдине що тепер адмінка по-дефолту не буде захищена додатково логіном і паролем, автор прибрав цю можливість. Але той хто зможе зібрати власноруч прошивку, зможе цю функцію реалізувати, переглянувши завжди вихідний код на GitHub (логічно не для простих користувачів). Але загалом і так все стало набагато простіше.
💬 Загалом, це всі зміни які були, можете далі читати статтю:
Наступним кроком підключіть вашу ESP32 кабелем до робочого USB порта вашого копма.

Та перейдіть в браузері на за цією адресою - https://web.esphome.io . (краще використовувати нові версії браузерів, в моєму випадку згаданий Хром). Щоб було зрозуміло - ми вже на етапі прошивання плати. Тому з підключеною платкою до мого Мас, я ще раз оновила веб сторінку (https://web.esphome.io ) та натиснула кнопку CONNECT:

Хром відразу покаже випадаючий список підключених пристроїв до мого Mac. Якщо все добре, із доступного списку мені потрібно буде знайти мою плату ESP32 і натиснути на неї:

На цьому етапі також у деяких виникають складнощі з конектом ESP до веб сторінки. Можуть відобразитися декілька портів, який обрати? Я не знаю чому таке відбувається, можливо Хром запам'ятовує попередні підключення до порту, або йому лаг наснився. В такому разі можете почистити кеш браузера, або спробувати увімкнути режим інкогніто. Далі звісно обирайте любий інший порт зі списку, який вдало запрацює як показано ось тутика:

Далі звісно мені пощастило, і мій MacBook без драйверів успішно законектився із ESP32:

Але на цьому етапі в багатьох (особливо користувачів Windows) комп може не "побачити" плату ESP32 як новий USB пристрій. І раз така халепа, нам потрібно буде завантажити і встановити потрібні драйвери в залежності від вашої операційної системи Windows\Mac. Ну по-перше, сам сайт нам в разі помилки підскаже де їх шукати:

- посилання на драйвери із скріншота:
CP2102 drivers: Windows & Mac - CH342, CH343, CH9102 drivers: Windows, Mac
- CH340, CH341 drivers: Windows, Mac
обираєте ті драйвери, в залежності який у вас контролер USB на вашій ESP32, та яка система у вас, Windows чи Mac. Але щоб дізнатися яку версію драйверів завантажити (CP2102? чи CH342 чи CH340?), просто погляньте маркування контролера на вашій ESP32:

В моєму випадку це CH340C. А по-друге, я тупо в Google вводжу - download driver CH340C Mac, та на перших же сайтах завантажую і встановлюю їх. Та сама процедура під Windows, і можливо й Linux. Після успішного встановлення, у вас має визначитися в пристроях новий - це наша плата ESP32. Користувачам Windows краще відкрити диспетчер пристроїв, та глянути під яким COM портом і номером при підключенні в USB визначилась наша платка, приклад:

і після цих хитро-мудрих операцій, повертаємось назад на сайт - https://web.esphome.io/ і конектимо нашу платку, обравши вже доступний пристрій. Чудово!
Наступним актом магії - заливка потрібної прошивки на ESP32. Тут все дуже просто. Якщо пам'ятаєте ми завантажити із GitHub прошивку, і розпакували її у папку. Далі на сторінці https://web.esphome.io/ з підключеним ESP я натискаю кнопку INSTALL

далі натискаю кнопку "вибрати файл"

шукаю папку "svitlobot-healthcheck-main" на своєму Mac із розпакованими раніше мною прошивками. Тут головне обрати під нашу ESP32 вже скомпільований із коду готовий бінарник (в кінці розширення .bin) для легкого прошивання платки. У автора буде два варіанти нам потрібної прошивки, саме:
- svitlobot-healthcheck_esp32_nopasswd.bin
- svitlobot-healthcheck_esp32_passwd.bin
все інше нам не цікаве. Яка різниця між ними? Все просто - версія з "passwd" буде мати захист у вигляді логіна\пароля нашої веб сторінки СвітлоБота, а "nopasswd" - ні. Таким чином із запароленою версією будь-хто спільний в локальній мережі так просто не зможе потрапити в адмін-панель на платі ESP32 нашого СвітлоБота, та наковиряти там гидоти). Я обираю версію із паролем:

Натискаю відкрити. Тепер йде процес конекту до нашої ESP, та завантаження прошивки:

в цей час варто зачекати, поки процес прошивки завершиться:


Після успішного успіху, мене повідомили про успішну прошивку esp32. Я була в захваті, це не так складно як здавалося.
Ми пройшли більшу половину шляху,
тому можете заварити собі чайку, ви молодець! ☕️
Після маніпуляцій із прошивкою наша ESP32 створить нову точку WI-FI без пароля. Після прошивки, можна вже відключати ESP32 від USB компуктера, та безпосередньо заживити її через любий хороший блок живлення з USB на постійну основу.
Так ось, далі я зі свого MacBook побачила новостворену точку доступу esp32:

потрібно підключитися до неї. Чесно скажу, що з першого разу не вийшло, спробуйте до тих пір, поки не буде з'єднання із цією WI-FI. (можливо доведеться увімкнути\вимкнути живлення на платі).
Опісля коннекту ві-фі ми топаєм в наш браузер, та переходимо за адресою:
192.168.4.1
І відразу ми можемо наштовхнутися на логін та пароль нашої веб-морди СвітлоБота:

так як я обирала прошивку із захистом. А який логін та пароль?
По замовчуванню автор прошивки залишив в коді:
admin - логін
Cdsnkj<jn - пароль
і скомпілював готовий бінарник-прошивку саме з таким паролем. Якщо ви хочете його змінити, вам доведеться зібрати власноруч із коду на репо GitHub автора власну прошивку, змінивши там логін і пароль. Можливо з оновленнями він добавить таку функцію в саму адмінку СвітлоБота.
Після авторизації, нас вітає веб сторінка Світлобота. Першим кроком обираєм вашу доступну домашню wi-fi мережу, із гарним сигналом. Натискаємо на неї, і вводимо в графі пароль від цієї точки доступу, натискаємо кнопку Save:

тепер ESP спробує підключитися до цієї мережі. Будь ласка, дайте їй деякий час для підключення, не вимикайте від живлення:

Зачекавши 1-2 хвилини, я побачила як мій MacBook втратив WI-FI коннект із ESP, а новостворена точка доступу від СвітлоБота зникла. Це свідчить про те, що наша ESP32 вдало підключена до нашого WI-FI роутера. Вимкнувши\ввімкнувши в живлення ESP і зачекавши ще 1-2 хв, далі я підключилася до своєї домашньої Wi-Fi мережі, що й моя ESP.
Наступним і фінальним кроком
мені потрібно потрапити у веб адмінку СвітлоБота, щоб далі прописати потрібні ключі від бота Telegram. І так як наша плата має зв'язок із роутером, я не можу просто перейти за адресою 192.168.4.1
Моя ціль - дізнатися яку локальну IP адресу присвоїв мій роутер нашій платі ESP32. Тому є декілька варіантів дізнатися її. Завантажити на телефон любу програму по-типу Ip Scanner, підключитися до моєї wi-fi мережі, та побачити усіх клієнтів та їхні призначені IP адреса. Або перейти в адмін панель нашого домашнього роутера, та в списку підключених клієнтів, дізнатися адресу:

Отже мій роутер призначив ESP32 саме таку IP адресу - 192.168.1.237
Майте на увазі, що у вас вона буде власна, та швидше за все відрізнятиметься від моєї.
Далі я закриваю все не потрібне і відкриваю браузер, моя платка ESP32 працює і заживлена, а я підключена до своєї домашньої WI-FI мережі, і вписую в адресному рядку саме - 192.168.1.237 , і що ми бачимо?:

І якщо я все зробила вірно. І прошивка не була пошкодженою, бачимо форму авторизації, вводимо вже відомі логін і пароль та потрапляємо не у світ фантазій та ілюзій, а краще - у адмінку СвітлоБота:

Тут є можливість переглянути базові налаштування та функції СвітлоБота. Можна змінити тему у верхньому правому куті з білої в темну. Зелений кружечок вказує на те - що все гуд. А зверху пише час праці ESP32.
Аби це все завелося із пінгуванням, нам потрібно отримати з Телеграм бота проекту СвітлоБот унікальний ключ авторизації, та вписати його сюди. Переходимо на сайт - https://svitlobot.in.ua/ . Ще раз перечитуємо як працює все, та як за інструкцією - пишемо у їхній Телеграм бот.
Важливо, обираємо варіант "через Android телефон", створюємо за інструкцією Телеграм канал, і отримуємо в боті унікальний ключ. Він виглядатиме, щось на кшталт - HDGWJ32HDK
Знаходимо на сайті https://svitlobot.in.ua/ посилання на ТелеграмБот Світлобота. Запускаємо його. Та створюємо свого бота:

створюємо "через смартфон", щоб отримати API ключ:

Виконуєм усі наступні кроки за інструкцією, та в результаті отримаєм унікальний КЛЮЧ:

Пізніше в налаштуваннях можете за бажанням змінити ключ, або натиснувши кнопку "статус" переглянути знову його та різну корисну інформацію:

Далі у вебі ESP32 натискаємо кнопку SHOW ALL:

та в графі SvitloBot Key просто вписуємо наш унікальний ключ СвітлоБота, який нам присвоїв за інструкцією Телеграм бот, без пробілів.
Далі ви можете перейти на сайт https://healthchecks.io/ та створити ще один додатковий варіант сповіщень відключення світла (за бажання). І також вписати ключ в графі Healthchecks.io Key . Отримати цей ключ можна на сайті https://healthchecks.io/ , зареєструвавшись, створити новий AddCheck, назвати його як завгодно, і отримати ключ:

копіюємо все після hc-ping.com/
та вписуємо в графу Healthchecks.io Key СвітлоБота:

після цього, можемо оновити сторінку. І через декілька секунд повинно в статусі відобразитися що все пінгується із серверами СвітлоБота і healthchecks.io :

Відразу після коннекту, в щойно створеному Телеграм каналі вам прийде сповіщення що у вас з'явилося світло. ВІТАЮ ВАС! 🥳 Ви це зробили.
На рахунок healthchecks.io - що це таке, погугліть. Але якщо не потрібно, можна залишити цю функцію вимкненою, просто не додаючи цей ключ в адмінку СвітлоБота.
То як це все працює?
Ваша задача залишати завжди увімкненою платку ESP32 замість смартфона чи роутера в розетку 220v. Знайдіть якісний блок живлення, з якісним кабелем. Варто вибирати якісні блоки, адже в дешевих і китайських БЖ можуть бути пульсації, які погано впливатимуть на нашу ESP32. В моєму варіанті - після усіх маніпуляцій вище, я знайшла не потрібну розетку 220v, з нормальним покриттям моєї домашньої WI-FI мережі. Просто заживила блочок, в блочок якісний кабель, а кабель в USB порт ESP32, і залишила її потужно працювати. Тепер коли вимкнуть світло, у мережі пропадає 220v, в свою чергу платка просто вимикається і перестає надсилати пінги на сервера СвітлоБота. СвітлоБот не "бачить" декілька хвилин пінги, і повідомляє вас про те що світла немає. При цьому якби я використовувала роутер в якості цього бота, у мене й надалі повідомлень не було, адже на роутері є ДБЖ, і він пінгуватиметься надалі.
Як тільки вмикають світло - вмикається моя плата ESP32, яка за декілька секунд чи до 1 хвилини знаходить WI-FI, і починає надсилати пінги далі. СвітлоБот "розуміє" що платка працює - повідомляє що світло зʼявилося в Телеграм канал.
Надіюся ця інструкція стане вам у нагоді, як витратити один вечір і чашку чаю, та дізнатися щось нове і цікаве.
Корисні посилання:
🔗 Telegram чат-форум Світлобот ⚡️ API
🔗 Офіційний Telegram Світлобот ⚡️ Новини
🔗 Світлобот ⚡️ FAQ (поширені питання)
🔗 Сайт https://svitlobot.in.ua/