Вопрос Удобное хранение и редактирование пользовательских настроек NodeMCU

WhiteCharmer

New member
Доброго времени суток всем! Собираю несколько переносных светильников для фотосъемки на безе NodeMCU, мосфетов и светодиодов. Управление осуществляется посредством HTTP-запросов через встроенный Wi-Fi. Все хорошо, пока я нахожусь у себя дома - я прописал прямо в коде данные для своей сети, присвоил через роутер устройству IP-адрес. Шлю на него запросы - все успешно отрабатывает. Но, по задумке, устройство должно быть переносным. А это значит, что нужно как-то дать возможность удобно перезаписывать данные Wi-Fi сети. А еще устройств может быть несколько, так что было бы здорово иметь какой-то переключатель, чтобы установить режим Wi-Fi - клиент или точка доступа. Смысл: переводим одно устройство в точку доступа, конектим остальные устройства и мобилу к ней и с мобилы шлем на нужные адреса управляющие запросы. Таким образом можно использовать светильники хоть на улице и управлять всеми с одного телефона.
Теперь, собственно, вопрос: если переключение режимов работы сети можно реализовать перемычкой, то как можно сделать удобное редактирование настроек (для начала имя/пароль Wi-Fi)? Первое, что приходил мне в голову: добавить к устройствам SD-карточку, а на ней записать файл settings.ini, где указать нужные настройки в виде пары ключ=значение, а при запуске устройства, соответственно, их считывать. Но, имхо, выделять целую SD-карточку под пару килобайт настроек - это как-то слишком. Может, есть еще какие-то варианты, как передать параметры прошивке, не редактируя непосредственно код?
ЗЫ: Код C++, Arduino IDE
 

nikolz

Well-known member
Доброго времени суток всем! Собираю несколько переносных светильников для фотосъемки на безе NodeMCU, мосфетов и светодиодов. Управление осуществляется посредством HTTP-запросов через встроенный Wi-Fi. Все хорошо, пока я нахожусь у себя дома - я прописал прямо в коде данные для своей сети, присвоил через роутер устройству IP-адрес. Шлю на него запросы - все успешно отрабатывает. Но, по задумке, устройство должно быть переносным. А это значит, что нужно как-то дать возможность удобно перезаписывать данные Wi-Fi сети. А еще устройств может быть несколько, так что было бы здорово иметь какой-то переключатель, чтобы установить режим Wi-Fi - клиент или точка доступа. Смысл: переводим одно устройство в точку доступа, конектим остальные устройства и мобилу к ней и с мобилы шлем на нужные адреса управляющие запросы. Таким образом можно использовать светильники хоть на улице и управлять всеми с одного телефона.
Теперь, собственно, вопрос: если переключение режимов работы сети можно реализовать перемычкой, то как можно сделать удобное редактирование настроек (для начала имя/пароль Wi-Fi)? Первое, что приходил мне в голову: добавить к устройствам SD-карточку, а на ней записать файл settings.ini, где указать нужные настройки в виде пары ключ=значение, а при запуске устройства, соответственно, их считывать. Но, имхо, выделять целую SD-карточку под пару килобайт настроек - это как-то слишком. Может, есть еще какие-то варианты, как передать параметры прошивке, не редактируя непосредственно код?
ЗЫ: Код C++, Arduino IDE
Вам надо сделать точку доступа на мобиле
И все ваши устройства будут коннектится к ней
ничего перестраивать не надо
Свою сеть будете носить с собой.
 

enjoynering

Active member
имхо HTTP запросы слишком жирно (там до кучи передается вместе с вашим 1 байтом). переводим одно устройство в точку доступа она общается с вами с помощью HTTP запросов, а дальше всем раздает остальным по esp-now протоколу

пример - ESP-NOW-TX-RX

SD-карточка не нужна, смотрите в сторону встроенной файловой системы SPIFFS или недавно включенной в Arduino ESP8266 Framework новой файловой системы LittleFS. хорошие уроки по SPIFFS есть на канале комрада Третьякова - ESP8266 Плагин для загрузки Файловой системы
 

WhiteCharmer

New member
@nikolz это первое, о чем я подумал. Вариант рабочий, но, опять-таки, не универсальный. Ко мне уже обратились пара знакомых фотографов с просьбой устроить им подобное освещение, при этом они вообще ничего не понимают в технике. Делать прошивку для каждого из них не очень хочется, плюс в любой момент можно сменить данные Wi-Fi на мобиле (или просто купить новую мобилу). Хочется такого устройства, чтобы в любой момент запустить в массовое производство :)
@enjoynering благодарю за наводки! Не слышал ранее про esp-now протокол. Сам веб-разработчиком тружусь (ПоХаПе, вот это вот все :)) и немного линукс-админом. Привык к HTTP-запросам и даже и не думал про другое :) Пошел, так сказать, RTFM. Похоже, это, что надо.
 

nikolz

Well-known member
@nikolz это первое, о чем я подумал. Вариант рабочий, но, опять-таки, не универсальный. Ко мне уже обратились пара знакомых фотографов с просьбой устроить им подобное освещение, при этом они вообще ничего не понимают в технике. Делать прошивку для каждого из них не очень хочется, плюс в любой момент можно сменить данные Wi-Fi на мобиле (или просто купить новую мобилу). Хочется такого устройства, чтобы в любой момент запустить в массовое производство :)
@enjoynering благодарю за наводки! Не слышал ранее про esp-now протокол. Сам веб-разработчиком тружусь (ПоХаПе, вот это вот все :)) и немного линукс-админом. Привык к HTTP-запросам и даже и не думал про другое :) Пошел, так сказать, RTFM. Похоже, это, что надо.
Не совсем понятно, зачем Вам вообще тогда HTTP запросы .
Расскажите, что вы, а тем более ваши знакомые фотографы, будете перенастраивать , если в этом они ни бум бум.
На ESP-NOW да еще совместно с Wifi Вы самостоятельно не сделаете.
 

enjoynering

Active member
Сам веб-разработчиком тружусь (ПоХаПе, вот это вот все :)) и немного линукс-админом. Привык к HTTP-запросам и даже и не думал про другое :) Пошел, так сказать, RTFM. Похоже, это, что надо
ну тогда вам будет легко написать html, js и css и json для вебморды. дальше разобраться в esp-now, как закидывать вебморду на SPIFFS, как парсить ответы JSON с помощью ArduinoJson и как сохранять распарсенное на SPIFFS.
 

enjoynering

Active member
На ESP-NOW да еще совместно с Wifi Вы самостоятельно не сделаете.
вы сейчас себе цену набиваете?

все работает. просто сервер и ESP-NOW должны быть на одном канале, а именно 1.

Код:
WiFi.softAP(ssid, password, channel);

The Wifi you connect to must be on the same Wifi channel that is used for ESPNow.
In my case I tested with ESPNow sending/receiving on channel 1 and the ESP32 connected to a WiFi which is using channel 1 as well.
If I connect to another WiFi that uses e.g. channel 13, the ESP32 does not receive any ESPNow data anymore.
подробности тут.
 

pvvx

Активный участник сообщества
Хочется такого устройства, чтобы в любой момент запустить в массовое производство :)
с ограничением в 3 внешних светильника/светодиода? AP ESP не держит много клиентов.
Вообще такие задачи решаются на модулях Bluetooth Low Energy, т.к. жрут по минимуму в простое/ожидании и подключаются к смарту десятками... На некоторых модулях BLE c али есть готовая прошивка с R,G,B и W каналом управления для светильников с помощью PWM (плавность/яркость более 10 бит). Примеры программы (исходники) управления на Android прилагаются. Цена модуля до 100 рупь.
Так-же есть готовые (прошитые модули) сразу в RGB лампочке:
321.09руб. 35% СКИДКА|Новый Smart реветь Беспроводной Bluetooth 4,0 RGB лампа 15 W светодиодный Магия RGBW RGBWW лампа для дома E27 B22 изменение цвета на приложение IOS/Android-in Светодиодные лампы и трубки from Лампы и освещение on AliExpress - 11.11_Double 11_Singles' Day
 

pvvx

Активный участник сообщества
Пример модуля:
83.23руб. 7% СКИДКА|JDY 10 BLE Bluetooth 4,0 Uart прозрачная коробка передач совместима с модулем Bluetooth CC2541-in Сменные детали и аксессуары from Бытовая электроника on AliExpress - 11.11_Double 11_Singles' Day
Пример программы:
Screenshot_20190923-122611484.jpg Screenshot_20190923-131150276.jpg
В примере всего один модуль, но их может быть дцать штук и разбиваются на группы, правда типа "спальня", "ванна", и т.д. :) Но есть её исходники от производителя чипов BLE...
 

nikolz

Well-known member
вы сейчас себе цену набиваете?

все работает. просто сервер и ESP-NOW должны быть на одном канале, а именно 1.

Код:
WiFi.softAP(ssid, password, channel);



подробности тут.
Не угадали.
Вы сами то делали?
Предположу что нет.
Я делал,
а вот в инете Вы не найдете готового проекта.
--------------------------
Речь идет о ESP8266, а Вы цитируете про ESP32.
-----------------------
Сначала сделайте, потом советуйте.
 

WhiteCharmer

New member
с ограничением в 3 внешних светильника/светодиода? AP ESP не держит много клиентов.
А вот этого я не знал, благодарю! Существенные ограничения :(
Вообще такие задачи решаются на модулях Bluetooth Low Energy, т.к. жрут по минимуму в простое/ожидании и подключаются к смарту десятками...
Пока тоже пришел к такому же решению. У товарища Гайвера похожий проект есть. Заказал bluetooth-модули у китайцев, жду доставки.
Так-же есть готовые (прошитые модули) сразу в RGB лампочке:
У меня дома стоят подобные, только с Wi-Fi и управляются через специальный Wi-Fi контроллер (аналог philips hue, как я понял). А вот с Bluetooth раньше не встречал. В сети есть реализация API Philips HUE на Python - запустил его себе на Raspbery Pi и вывел веб-морду для управления. Хотел еще яркостью управлять по датчику освещенности и включать свет автоматом по датчику движения, да как-то все руки не доходят :rolleyes:
ну тогда вам будет легко написать html, js и css и json для вебморды. дальше разобраться в esp-now, как закидывать вебморду на SPIFFS, как парсить ответы JSON с помощью ArduinoJson и как сохранять распарсенное на SPIFFS.
Я поступил немного по-другому: нарисовал вебморду на bootstrap 4, оптимизированную для мобил. Затем создал в Android Studio проект, где одним единственным контролом является Web View. В него же (проект) залил html/js/css файлы веб-морды и прописал в Web View ее открытие при старте. В итоге получил готовый APK. Единственное, пока не получилось сделать автоматический поиск устройств, приходится вручную их IP вводить.
Расскажите, что вы, а тем более ваши знакомые фотографы, будете перенастраивать , если в этом они ни бум бум.
Например, снимаем в студии. В студии есть Wi-Fi роутер. Подключаем весь свет к нему, для этого нужно указать ESP имя и пароль сети студии. Далее, выезжаем на природу и снимаем там. Wi-Fi сети нет. Либо раздаем с мобилы, либо переводим одно из устройств в AP (что не вариант из-за ограничений, как мне указали выше). Нужно снова указать данные сети, к которой подключаться.
Не совсем понятно, зачем Вам вообще тогда HTTP запросы .
Возможно и незачем. Повторюсь - я по работе постоянно с ними сталкиваюсь, вот просто и взял то, что мне известно и понятно.
На ESP-NOW да еще совместно с Wifi Вы самостоятельно не сделаете.
Ну так для этого же и есть форумы и сообщества, разве нет? Вон мне сколько полезной инфы накидали за эти пару дней
 

enjoynering

Active member
Если хотите на синезубе делать, то надо брать nRF52, у Arduino под него есть фреймворк
 

pvvx

Активный участник сообщества
Если хотите на синезубе делать, то надо брать nRF52, у Arduino под него есть фреймворк
В чем причина, что надо брать обязательно(?) nRF52? (по тому что самый дорогой чип?)
Под Arduino у него нет полной поддержки. Реализовано всего до 1% поддержки внутренних аппаратных контроллеров старших чипов nRF52 :p
По тому без разницы какой чип BLE брать - на все есть SDK и все они пока проприетарные (закрытые стеки ВТ и т.д.).
 

WhiteCharmer

New member
А как вы рисуете морду в bootstrap?
Я не очень силен в верстке, так что bootstrap беру чисто из-за его CSS-сетки, на базе которой можно быстренььько накидать адаптивную разметку, которая будет нормально отображаться как на мобилах, так и планшетах с разными размерами экрана. Ну а сами запросы - обычный AJAX из JS'а
 

WhiteCharmer

New member
Вот как раз и интересна технология быстрого накидывания сетки
Доброго времени суток! Прошу прощения за столь долгое отсутствие - учил матчасть :) В итоге последовал совету и отказался от Wi-Fi в пользу Bluetooth на модуле HC-05. Сделал пробную "светопалку" на RGB-ленте, а вот пример моего приложения на JAVA для управления ей:
Charmer/NeoLight-Android-Controller
Там, как раз, фронт реализован на HTML+CSS+JS (Bootstrap 4 плюс пара JS-библиотек для красивостей и удобностей) и завернут в WebView. На JAVA я писал последний раз еще в институте (а это около 7 лет назад :rolleyes:), так что с разработкой сего дела возникли некоторые затруднения, которые я постарался кратенько описать readme. Можете глянуть там, как реализована 12-колоночная сетка (div с классами "row" и "col-X").
 
Сверху Снизу