ESP, IoT WiFi лампа-будильник. Обсуждение проекта

Сообщение изъято на правах администрации
ВНИМАНИЕ !!!
те кто живой и хочет увидеть ссылку на свое исполнение, прошу централизовать все свои доработки и сообщения. Далее в теме пишем сообщение с ссылкой на ваше сообщение (с проектом), с пометкой @mechanic .


В данной ветке обсуждаются только сия проект. Общие вопросы, доработки и проблемы, не относящиеся к конкретным прошивкам!. Вопросы по прошивкам решаем в темах самих прошивок. Здесь такие разговоры оффтоп.
Всякий любой вопрос не по теме сразу удаляется БЕЗ объяснения причины!
Для этого есть соответствующие ветки форума. Вопрос почему удалили мой пост? также удаляется.

  • Общаясь на форуме будьте взаимно вежливы!
  • Обратите внимание на то, что у нас принято говорить Спасибо путём повышения репутации, нажав на кнопочку
    .
  • Если есть претензии то нажмите кнопку .
  • Запрещено писать красным цветом в ваших постах - этот цвет только для Модераторов .
  • Вопросы, ответ на которые есть в шапке или в FAQ, будут удаляться. За повторный вопрос пользователь может быть наказан.
  • Убедительная просьба придерживаться тематики ветки, избегать флуда и оффтопа!
Очень часто при первом запуске лампы, при подключении к сети лампы не открывается менеджер сетей WIFI.
Помогает комментирование строки #define ESP_USE_BUTTON (отключение кнопки) и заливка скетча выставив Erase flash в All Flash Content
После того, как вы подключили лампу к сети эту строку можно раскомментировать и залить скетч с параметром Erase flash установленным в Only Sketh
Наш участник собрал много полезной информации по блокам питания для лампы. Качественное питание - необходимое условие надёжной работы любого устройства. Изучаем: https://community.alexgyver.ru/threads/nebolshoj-opus-po-bp-dlja-gyverlamp-wifi-lampa-budilnik.3523/

ВНИМАНИЕ! Если у вас не компилируется или не загружается скетч - значит вы сделали что-то неправильно. Специально для вас созданы две темы:
ESP8266, проблема с компиляцией скетча
ESP8266, проблема с загрузкой скетча
Читайте (ЧИТАЙТЕ! Не пишите!) эти темы, там уже есть решение вашей проблемы.
Здесь подобные вопросы считаются оффтопом и молча удаляются, а авторы получают баллы нарушений.
 

Комментарии

recoshet

★✩✩✩✩✩✩
15 Июн 2019
1
14
Сообщение изъято на правах администрации
ВНИМАНИЕ !!!
те кто живой и хочет увидеть ссылку на свое исполнение, прошу централизовать все свои доработки и сообщения. Далее в теме пишем сообщение с ссылкой на ваше сообщение (с проектом), с пометкой @mechanic .


В данной ветке обсуждаются только сия проект. Общие вопросы, доработки и проблемы, не относящиеся к конкретным прошивкам!. Вопросы по прошивкам решаем в темах самих прошивок. Здесь такие разговоры оффтоп.
Всякий любой вопрос не по теме сразу удаляется БЕЗ объяснения причины!
Для этого есть соответствующие ветки форума. Вопрос почему удалили мой пост? также удаляется.

  • Общаясь на форуме будьте взаимно вежливы!
  • Обратите внимание на то, что у нас принято говорить Спасибо путём повышения репутации, нажав на кнопочку
    .
  • Если есть претензии то нажмите кнопку .
  • Запрещено писать красным цветом в ваших постах - этот цвет только для Модераторов .
  • Вопросы, ответ на которые есть в шапке или в FAQ, будут удаляться. За повторный вопрос пользователь может быть наказан.
  • Убедительная просьба придерживаться тематики ветки, избегать флуда и оффтопа!
Очень часто при первом запуске лампы, при подключении к сети лампы не открывается менеджер сетей WIFI.
Помогает комментирование строки #define ESP_USE_BUTTON (отключение кнопки) и заливка скетча выставив Erase flash в All Flash Content
После того, как вы подключили лампу к сети эту строку можно раскомментировать и залить скетч с параметром Erase flash установленным в Only Sketh
Наш участник собрал много полезной информации по блокам питания для лампы. Качественное питание - необходимое условие надёжной работы любого устройства. Изучаем: https://community.alexgyver.ru/threads/nebolshoj-opus-po-bp-dlja-gyverlamp-wifi-lampa-budilnik.3523/

ВНИМАНИЕ! Если у вас не компилируется или не загружается скетч - значит вы сделали что-то неправильно. Специально для вас созданы две темы:
ESP8266, проблема с компиляцией скетча
ESP8266, проблема с загрузкой скетча
Читайте (ЧИТАЙТЕ! Не пишите!) эти темы, там уже есть решение вашей проблемы.
Здесь подобные вопросы считаются оффтопом и молча удаляются, а авторы получают баллы нарушений.
 

c1053

✩✩✩✩✩✩✩
4 Авг 2019
5
0
@gunner47, Все норм У меня роутер фаирволил Разобрался У меня вопрос к тебе есть
 

gunner47

★★★★★✩✩
18 Июн 2019
253
393
@gunner47, Все норм У меня роутер фаирволил Разобрался У меня вопрос к тебе есть
Файерволил внутреннюю сеть? :) Никому нельзя верить.
Раз уже два человека отписались о проблемах, связанных с файерволами, то на всякий случай уточню: в прошивке есть пару мест (определение маски подсети, адреса широковещательных сообщений), где код свято верит в то, что сеть разбита с маской /24. Если у кого сегменты сети больше или меньше, могут быть проблемы. Я до последних сообщений думал, что никто дома так серьёзно сеть не перекраивает. Но если вдруг... пишите, вынесу всё это в отдельные константы с подробными комментариями, как и что нужно настраивать.

А что собственно за вопрос ко мне?
 

c1053

✩✩✩✩✩✩✩
4 Авг 2019
5
0
@gunner47, Я в написании приложений под Андроид новичок Я сам живу не в РФ и делал светильник в подарок Хочел попросить декомпелированный код приложения чтоб не писать его с нуля У меня на это вечность уйдет а мне его немного нужно переделать и перевести на другой язык Это мне под силу
 

c1053

✩✩✩✩✩✩✩
4 Авг 2019
5
0
@gunner47, а на счет фаирвола Я не заморачивался У нас тут такие роутеры продают По умолчанию зашиты на защиту
 

Veresk

✩✩✩✩✩✩✩
6 Авг 2019
10
1
Доброго дня всем!
Столкнулся с такой проблемой - может кто встречал - в чем может быть дело?

Установил на WEMOS d1 r1 прошивку от gunner47.

При первом запуске все как положено захожу в точку доступа лампы -> выбираю сеть -> ресет лампы -> после чего подключение к домашней сети -> все как положено и работает. Но...стоит только перегрузить лампу/модуль, т.е нажал на кнопку ресет на плате питания - в логе пишется следующее:

*WM: settings invalidated
06:53:41.133 -> *WM: THIS MAY CAUSE AP NOT TO START UP PROPERLY. YOU NEED TO COMMENT IT OUT AFTER ERASING THE DATA.
06:53:41.133 -> Режим WiFi клиента
06:53:41.133 -> Подключение WiFi сети:
06:53:41.133 -> *WM:
06:53:41.133 -> *WM: AutoConnect
06:53:41.205 -> *WM: Connecting as wifi client...
06:53:41.205 -> *WM: Custom STA IP/GW/Subnet
06:53:41.205 -> *WM: 192.168.5.100
06:53:41.205 -> *WM: Already connected. Bailing out.
06:53:41.205 -> *WM: IP Address:
06:53:41.205 -> *WM: 192.168.5.100
06:53:41.205 -> IP адрес: 192.168.5.100
06:53:41.205 -> Порт UDP сервера: 8888

Т.е. вроде бы подключился к домашней сети и вроде бы даже адрес установлен (причем сама надпись появляется без какой либо задержки - за долю секунды - другими словами не ждет подключения хотяб секунду/две, как бывает обычно при подключения например компьютера к сети), однако сам модуль не пингуется и не подключается к сети - роутер его также не видит.
Кто сталкивался с этим? Помогите по возможности пожалуйста.

В настройках менял только следующие строчки кода:

C++:
// --- ESP -----------------------------
#define ESP_MODE         (1U)                               // 0U - WiFi точка доступа, 1U - клиент WiFi (подключение к роутеру)
//#define GENERAL_DEBUG                                       // если строка не закомментирована, будут выводиться отладочные сообщения
#define WIFIMAN_DEBUG    (true)                             // вывод отладочных сообщений при подключении к WiFi сети: true - выводятся, false - не выводятся; настройка не зависит от GENERAL_DEBUG

// --- ESP (WiFi клиент) ---------------
uint8_t STA_STATIC_IP[] = {192,168,5,100};                               // статический IP адрес: {} - IP адрес определяется роутером; {192, 168, 1, 66} - IP адрес задан явно (если DHCP на роутере не решит иначе); должен быть из того же диапазона адресов, что разадёт роутер
                                                            // SSID WiFi сети и пароль будут запрошены WiFi Manager'ом в режиме WiFi точки доступа, нет способа захардкодить их в прошивке

// --- AP (WiFi точка доступа) ---
#define AP_NAME          ("MagicLamp")                        // имя WiFi точки доступа, используется как при запросе SSID и пароля WiFi сети роутера, так и при работе в режиме ESP_MODE = 0
#define AP_PASS          ("*************")                       // пароль WiFi точки доступа
uint8_t AP_STATIC_IP[] = {192, 168, 4, 1};                  // статический IP точки доступа (лучше не менять)
 
Изменено:

Inuki

✩✩✩✩✩✩✩
5 Авг 2019
9
1
Приветствую. У меня проблема такого плана: при выключении и повторном включении не стартует NodeMCU, на матрице горят белым первых шесть светодиодов (если нажимаешь на плате Reset - загорается белым шестой диод). Если вырубить БП (5V 10A), подождать минут пять и потом включить, тогда NodeMCU иногда стартует нормально. Не могу понять в чём дело. Скетч пробовал шить и оригинальный v1.4 и от товарища gunner47. По вольтажу всё ок, просадок нет, ровно 5 вольт. Иногда плата стартует при подключении USB-кабеля к компу или при многократном нажатии reset. Если запускается, то работает нормально часами. До выключения питалова. :(

UPD: Запитал отдельно матрицу от БП и Ноду от повербанка. Тоже самое. Я так понимаю, плату можно выкидывать?
 

gunner47

★★★★★✩✩
18 Июн 2019
253
393
Доброго дня всем!
Столкнулся с такой проблемой - может кто встречал - в чем может быть дело?

Установил на WEMOS d1 r1 прошивку от gunner47.

При первом запуске все как положено захожу в точку доступа лампы -> выбираю сеть -> ресет лампы -> после чего подключение к домашней сети -> все как положено и работает. Но...стоит только перегрузить лампу/модуль, т.е нажал на кнопку ресет на плате питания - в логе пишется следующее:

*WM: settings invalidated
06:53:41.133 -> *WM: THIS MAY CAUSE AP NOT TO START UP PROPERLY. YOU NEED TO COMMENT IT OUT AFTER ERASING THE DATA.
06:53:41.133 -> Режим WiFi клиента
06:53:41.133 -> Подключение WiFi сети:
06:53:41.133 -> *WM:
06:53:41.133 -> *WM: AutoConnect
06:53:41.205 -> *WM: Connecting as wifi client...
06:53:41.205 -> *WM: Custom STA IP/GW/Subnet
06:53:41.205 -> *WM: 192.168.5.100
06:53:41.205 -> *WM: Already connected. Bailing out.
06:53:41.205 -> *WM: IP Address:
06:53:41.205 -> *WM: 192.168.5.100
06:53:41.205 -> IP адрес: 192.168.5.100
06:53:41.205 -> Порт UDP сервера: 8888

Т.е. вроде бы подключился к домашней сети и вроде бы даже адрес установлен (причем сама надпись появляется без какой либо задержки - за долю секунды - другими словами не ждет подключения хотяб секунду/две, как бывает обычно при подключения например компьютера к сети), однако сам модуль не пингуется и не подключается к сети - роутер его также не видит.
Кто сталкивался с этим? Помогите по возможности пожалуйста.

В настройках менял только следующие строчки кода:

C++:
// --- ESP -----------------------------
#define ESP_MODE         (1U)                               // 0U - WiFi точка доступа, 1U - клиент WiFi (подключение к роутеру)
//#define GENERAL_DEBUG                                       // если строка не закомментирована, будут выводиться отладочные сообщения
#define WIFIMAN_DEBUG    (true)                             // вывод отладочных сообщений при подключении к WiFi сети: true - выводятся, false - не выводятся; настройка не зависит от GENERAL_DEBUG

// --- ESP (WiFi клиент) ---------------
uint8_t STA_STATIC_IP[] = {192,168,5,100};                               // статический IP адрес: {} - IP адрес определяется роутером; {192, 168, 1, 66} - IP адрес задан явно (если DHCP на роутере не решит иначе); должен быть из того же диапазона адресов, что разадёт роутер
                                                            // SSID WiFi сети и пароль будут запрошены WiFi Manager'ом в режиме WiFi точки доступа, нет способа захардкодить их в прошивке

// --- AP (WiFi точка доступа) ---
#define AP_NAME          ("MagicLamp")                        // имя WiFi точки доступа, используется как при запросе SSID и пароля WiFi сети роутера, так и при работе в режиме ESP_MODE = 0
#define AP_PASS          ("*************")                       // пароль WiFi точки доступа
uint8_t AP_STATIC_IP[] = {192, 168, 4, 1};                  // статический IP точки доступа (лучше не менять)
Я вижу два повода задуматься:
  1. Нетипичное сообщение
    06:53:41.133 -> *WM: THIS MAY CAUSE AP NOT TO START UP PROPERLY. YOU NEED TO COMMENT IT OUT AFTER ERASING THE DATA.
    выводится библиотекой WiFiManager при вызове сброса запомненных настроек WiFi подключения - resetSettings(). В моей прошивке этот сброс выполняется только при подаче питания на выключенный модуль с нажатой кнопкой. У вас кнопка физически установлена? Если нет, закомментируйте строку:
    C++:
    #define ESP_USE_BUTTON
    Если кнопка установлена, то не нажимаете ли вы её, делая рестарт? Есть ли разница в поведении при рестарте модуля кнопкой reset и подачей питания?
  2. У вас сеть действительно настроена так, что обслуживает IP адреса из диапазона 192.168.5.xxx?
 

Xmas

✩✩✩✩✩✩✩
20 Июл 2019
12
0
Я залил на гитхаб обновление с моей версией android приложения.
Пока так:
  • Реализован только раздел Управление, в очереди Избранные эффекты, Будильник, Таймер.
  • Добавлено два эффекта: Светлячки со шлейфами и Белый свет.
  • Реализовано управление несколькими лампами, лампы нужно внести в список сохранённых устройств, и потом между ними можно будет переключаться (подключение - тап по IP адресу в списке).
  • Реализовано сканирование сети multicast пакетами, поиск и добавление ламп в список сохранённых устройств без ручного ввода IP адреса.
  • Приложение, когда запущено, опрашивает лампу раз в две секунды, чтобы подтянуть изменения, если лампой управляли кнопкой.
  • Снова используется стандартная библиотека GyverButon, все изменения из неё перенесены в основную прошивку. Прежнюю мою доработку можно оставить как есть, ошибки не будет.
  • При запросе обновления по воздуху (2 четверных касания к кнопке) лампа переключается в режим "Матрица" для визуального подтверждения готовности к прошивке.
Приложение лежит в папке Android в виде apk файла. Пока так. Может, когда-то выложу в гугл стор, у меня ещё нет девелоперской учётки, да и не понятно, нужно ли это кому-то. В общем, кто знает, как устанавливать, берите.
Знаю и пытаюсь побороть один баг, связанный с UDP клиентом в приложении. Вроде на работоспособность не влияет. Ну, и в принципе ещё отлавливаю и правлю ошибки.
Для работы приложения нужно перепрошить и модуль esp.
А как должно это выглядеть в приложении ? А то у меня вот так:
 

Вложения

BSN

✩✩✩✩✩✩✩
6 Авг 2019
7
0
Добрый день!
При попытке "Открыть Инструменты/Плата/Менеджер плат…, найти esp8266 " в нижнем окне Arduino IDE появляется сообщение "http://arduino.esp8266.com/stable/package_esp8266com_index.json ошибка проверки сигнатуры файла. Файл проигнорирован."
Как победить не знаю. Новичок я пока еще.
Подскажите решение проблемы.
 

gunner47

★★★★★✩✩
18 Июн 2019
253
393
Добрый день!
При попытке "Открыть Инструменты/Плата/Менеджер плат…, найти esp8266 " в нижнем окне Arduino IDE появляется сообщение "http://arduino.esp8266.com/stable/package_esp8266com_index.json ошибка проверки сигнатуры файла. Файл проигнорирован."
Как победить не знаю. Новичок я пока еще.
Подскажите решение проблемы.
Попробовать вставить этот адрес в любом браузере и посмотреть, откроет ли он этой файл на вашем компьютере. Убедиться, что у вас есть доступ в интернет, сетевые настройки и файерволы (если настроены) позволяют получить к нему доступ.
Попытаться в настройках Файл - Настройки - Дополнительные ссылки для Менеджера плат заменить http в адресе на https:
1565077960797.png
 

gunner47

★★★★★✩✩
18 Июн 2019
253
393
А как должно это выглядеть в приложении ? А то у меня вот так:
Да, пока так.
Ещё делаю в свободное время. Потому, увы, не так быстро, как хотелось бы.
Собственно, я даже это написал, а вы это даже процитировали:
  • Реализован только раздел Управление, в очереди Избранные эффекты, Будильник, Таймер.
 
Изменено:
  • Лойс +1
Реакции: Xmas

gunner47

★★★★★✩✩
18 Июн 2019
253
393
Приветствую. У меня проблема такого плана: при выключении и повторном включении не стартует NodeMCU, на матрице горят белым первых шесть светодиодов (если нажимаешь на плате Reset - загорается белым шестой диод). Если вырубить БП (5V 10A), подождать минут пять и потом включить, тогда NodeMCU иногда стартует нормально. Не могу понять в чём дело. Скетч пробовал шить и оригинальный v1.4 и от товарища gunner47. По вольтажу всё ок, просадок нет, ровно 5 вольт. Иногда плата стартует при подключении USB-кабеля к компу или при многократном нажатии reset. Если запускается, то работает нормально часами. До выключения питалова. :(

UPD: Запитал отдельно матрицу от БП и Ноду от повербанка. Тоже самое. Я так понимаю, плату можно выкидывать?
Я бы посмотрел, что в Монторе порта. И попробовал бы отключить модуль ото всего и тоже посмотреть Монитор порта в первую очередь. Есть вероятность, что каким-то образом проблемы возникают из-за подключения или "битой" матрицы.
 
  • Лойс +1
Реакции: Inuki

Veresk

✩✩✩✩✩✩✩
6 Авг 2019
10
1
Я вижу два повода задуматься:
  1. Нетипичное сообщение выводится библиотекой WiFiManager при вызове сброса запомненных настроек WiFi подключения - resetSettings(). В моей прошивке этот сброс выполняется только при подаче питания на выключенный модуль с нажатой кнопкой. У вас кнопка физически установлена? Если нет, закомментируйте строку:
    C++:
    #define ESP_USE_BUTTON
    Если кнопка установлена, то не нажимаете ли вы её, делая рестарт? Есть ли разница в поведении при рестарте модуля кнопкой reset и подачей питания?
  2. У вас сеть действительно настроена так, что обслуживает IP адреса из диапазона 192.168.5.xxx?
Благодарю Вас, первая ошибка ушла. Но проблема не решилась - как писалось в лог, что все хорошо, так и пишет, но устройство не видно в сети.

Номер подсетки именно 5.

Откровенно говоря пока решил прошить модуль без подключения кнопки и матрицы - может поэтому такие проблемы?
 

gunner47

★★★★★✩✩
18 Июн 2019
253
393
Благодарю Вас, первая ошибка ушла. Но проблема не решилась - как писалось в лог, что все хорошо, так и пишет, но устройство не видно в сети.

Номер подсетки именно 5.

Откровенно говоря пока решил прошить модуль без подключения кнопки и матрицы - может поэтому такие проблемы?
Отсекать компоненты и упрощать схему - всегда хорошее решение при поиске ошибок. Я не вижу, как они могли бы повлиять на сетевую доступность, но всё же...
Попробуйте не задавать статический IP:
C++:
uint8_t STA_STATIC_IP[] = {};
После тестовой прошивки посмотрите в монитор порта, если она получит адрес, то должна его написать. Мне кажется, проблема в настройках сети/сетей. Какая у вас маска подсети? В прошивке захардкожена 255.255.255.0. У вас один сегмент сети? И вы пингуете модуль из него же? Никакого промежуточного сетевого железа, ACL, статических маршрутов, правил блокировки echo пакетов? Нет ли конфликта адресов? Не могло ли случиться так, что в сети есть другой узел, уже занявший этот IP? Или роутер имеет привязку MAC-IP для другого устройства на этот айпишник? Можете просканировать сеть любой программой-сканером (я использую WiFiMan с android телефона)? Он выдаёт все устройства в сети с их hostname'ами, MAC-адресами и даже названиями производителей железа. Даже моё android-приложение умеет искать лампу в сети по кнопке "Сканировать и добавить", попробуйте. На совсем тяжёлый случай можно посмотреть логи роутера (выдаёт ли он этот адрес, есть ли ошибки) или попытаться поставить сетевой сниффер на компьютер, типа WireShark'а и посмотреть, шлёт ли устройство DHCP Akcnowlege запросы роутеру, чтобы получить свой IP.
Как вариант, статический IP, прописанный в лампе, можно заменить динамическим IP + привязкой DHCP в роутере.
 
Изменено:
  • Лойс +1
Реакции: Inuki

Veresk

✩✩✩✩✩✩✩
6 Авг 2019
10
1
Отсекать компоненты и упрощать схему - всегда хорошее решение при поиске ошибок. Я не вижу, как они могли бы повлиять на сетевую доступность, но всё же...
Попробуйте не задавать статический IP:
C++:
uint8_t STA_STATIC_IP[] = {};
После тестовой прошивки посмотрите в монитор порта, если она получит адрес, то должна его написать. Мне кажется, проблема в настройках сети/сетей. Какая у вас маска подсети? В прошивке захардкожена 255.255.255.0. У вас один сегмент сети? И вы пингуете модуль из него же? Никакого промежуточного сетевого железа, ACL, статических маршрутов, правил блокировки echo пакетов? Нет ли конфликта адресов? Не могло ли случиться так, что в сети есть другой узел, уже занявший этот IP? Или роутер имеет привязку MAC-IP для другого устройства на этот айпишник? Можете просканировать сеть любой программой-сканером (я использую WiFiMan с android телефона)? Он выдаёт все устройства в сети с их hostname'ами, MAC-адресами и даже названиями производителей железа. Даже моё android-приложение умеет искать лампу в сети по кнопке "Сканировать и добавить", попробуйте. На совсем тяжёлый случай можно посмотреть логи роутера (выдаёт ли он этот адрес, есть ли ошибки) или попытаться поставить сетевой сниффер на компьютер, типа WireShark'а и посмотреть, шлёт ли устройство DHCP Akcnowlege запросы роутеру, чтобы получить свой IP.
Как вариант, статический IP, прописанный в лампе, можно заменить динамическим IP + привязкой DHCP в роутере.
Вот что пишет сейчас в монитор порта:

14:50:54.033 -> Режим WiFi клиента
14:50:54.033 -> Подключение WiFi сети:
14:50:54.033 -> *WM:
14:50:54.033 -> *WM: AutoConnect
14:50:54.033 -> *WM: Connecting as wifi client...
14:50:54.033 -> *WM: Custom STA IP/GW/Subnet
14:50:54.033 -> *WM: 192.168.5.100
14:50:54.033 -> *WM: Already connected. Bailing out.
14:50:54.033 -> *WM: IP Address:
14:50:54.033 -> *WM: 192.168.5.100
14:50:54.033 -> IP адрес: 192.168.5.100
14:50:54.033 -> Порт UDP сервера: 8888

Маска стандартная - 255.255.255.0, на роутере установил на МАК wemos-а статический адрес - 192.168.5.100, который и прописал в настройках.

UPD:
Вопрос решился - благодарю за совет:
1. В настройках платы установил режим Flash Erase -> Scetch + Wifi settings (для обнуления настроек WiFi)
2. В настройках убрал статический адрес и прописав это
C++:
uint8_t STA_STATIC_IP[] = {};
3. Подключился к точке доступа
4. Выбрал сеть свою и прописал пароль
5. Подключился через приложение - все работает
6. Сделал ресет - все работает )))
7. В настройках платы установил режим Flash Erase -> Only Scetch (для того, чтобы при обновлении прошивки плата запомнила рабочие настройки по WiFi)

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

Еще раз, gunner47, благодарю Вас за Вашу помощь.
 
Изменено:

Inuki

✩✩✩✩✩✩✩
5 Авг 2019
9
1
Я бы посмотрел, что в Монторе порта. И попробовал бы отключить модуль ото всего и тоже посмотреть Монитор порта в первую очередь. Есть вероятность, что каким-то образом проблемы возникают из-за подключения или "битой" матрицы.
Спасибо. Нашел причину, виновата была глючная сенсорная кнопка, с виду рабочая и даже отрабатывающая нажатия, когда плата всё-таки запускалась. Поставил другую, теперь всё нормально заводится. Заодно, на всякий случай, запаял резистор на пин матрицы, как выше напомнил уважаемый @SES.
 

motorkk7

✩✩✩✩✩✩✩
5 Авг 2019
3
2
В общем получилось подключить лампу к Majordomo. Правда пока с обратной связью не разобрался. Получается, что выбирать эффект, менять яркость, масштаб, скорость могу, а запросить текущие настройки лампы не знаю как.
Лампу практически уже готовую купил в Фикспрайсе за 200 р. Удалил внутренности, матрица получилась 6х6 диодов, при этом в качестве ночника и декоративной ламы смотрится офигенно. Ну и работать может просто от USB.
Привет, матрицу готовую 6х6 или из ws2812? Какая прошивка для подключения к MJD?
 
  • Лойс +1
Реакции: Belokota

Алексей 1982

✩✩✩✩✩✩✩
5 Июн 2019
9
0
всем привет! Нужна помощь. при загрузке прошивки в окне процесса красным пишет: (uploading 329696 bytes from C:\users\D4BE~1\AppData\lokal\temp\arduino_build_535436/GyverLamp_v1.4.info.bin to at 0x00000000) дальше идет процентная загрузка
...................................................................................[24]
...................................................................................[49]
...................................................................................[74]
...................................................................................[99]
.. [100]
пишет загрузка завершена и тишина. что не так?
 

gunner47

★★★★★✩✩
18 Июн 2019
253
393
всем привет! Нужна помощь. при загрузке прошивки в окне процесса красным пишет: (uploading 329696 bytes from C:\users\D4BE~1\AppData\lokal\temp\arduino_build_535436/GyverLamp_v1.4.info.bin to at 0x00000000) дальше идет процентная загрузка
...................................................................................[24]
...................................................................................[49]
...................................................................................[74]
...................................................................................[99]
.. [100]
пишет загрузка завершена и тишина. что не так?
Что вы подразумеваете под "и тишина"? Судя по вашему сообщению, загрузка выглядит вполне успешной, но салют вряд ли будет после каждой успешной прошивки :) Попробуйте телефоном поискать WiFi точку доступа лампы, подключитесь введите имя/пароль от домашней WiFi сети, и должно наступить счастье. Вот четырьмя сообщениями выше прям по пунктам распсиано, как всё должно быть в идеале.
А ещё откройте Монитор порта в Arduino IDE и посмотрите, что туда выводится.
 

Andrew Haronych

★✩✩✩✩✩✩
17 Июл 2019
64
37
Москва
В очередной раз глядя в код проекта вспомнил про хороший индейский ритуал
532bbecs-960.jpg
И подумал в самом деле, зачем плодить сущности на ровном месте?!
Для тех кто пользует сервер умного дома Domoticz и желает полную интеграцию лампы, но при этом хочет остаться на оригинальной прошивке смотрим в спойлер.
Для начала нам понадобится ииииbash скрипт
обзовем его например gl_con.sh
Bash:
#!/bin/sh
if [ $# -eq 0 ]; then
        echo -n GET | nc -w 1 -u 192.168.1.17 8888
    else
        echo -n $1 $2 | nc -w 1 -u 192.168.1.17 8888
fi
Не забываем сделать его исполняемым и кладем в каталог /domoticz/scripts/
Вместо 192.168.1.17 адрес вашей лампы.
Смысл его предельно прост. Если выполнить его как есть то он вернет текущее состояние лампы в виде строки:
C++:
CURR 1 40 10 1 1 1 1 23:51:27
Формат: "CURR <число:текущий режим> <число:яркость> <число:скорость> <число:масштаб> <число:вкл/выкл>...".
Также скрипт может принять 2 параметра и это позволяет в полной мере управлять лампой.
К примеру:
./gl_con.sh EFF 0 - 19 Включает нужный эффект
./gl_con.sh BRI 0 - 255 Устанавливает яркость
./gl_con.sh SPD 0 - 255 Устанавливает скорость
./gl_con.sh SCA 0 - 100 Устанавливает масштаб
./gl_con.sh P_ON Включает лампу
./gl_con.sh P_OFF Выключает лампу
Далее идем в сам домотикз.
Тут всё как раньше. Создаем виртуальный переключатель, три диммера и селектор.
Названия выключателя: "LedLamp", селектора: "LedLamp Эффект" и диммеры: "LedLamp Яркость", "LedLamp Скорость" и "LedLamp Масштаб"
Switch.png
В действиях включения/выключения наш скрипт с параметром.
Sel.png
Оставляем нулевую позицию и ставим галочку "Убрать уровень отключения". Прописываем названия эффектов и скрипт с параметром для переключения.
В диммерах ничего не меняем.
Далее в событиях создаем Lua - Device, название LedLamp (можно любое)
C++:
commandArray = {}
LedLamp_volume = 'LedLamp  Яркость';
LedLamp_speed = 'LedLamp  Скорость';
LedLamp_scale = 'LedLamp  Масштаб';
IP = '192.168.1.17';

if devicechanged[LedLamp_volume] then
         llVolValue = otherdevices_svalues[LedLamp_volume];
         CalcValue = llVolValue*2.5;
    runcommand = "echo -n BRI "..CalcValue.." | nc -w 1 -u "..IP.." 8888";
   os.execute(runcommand);
   print("Command= "..runcommand);
end

if devicechanged[LedLamp_speed] then
         llSpdValue = otherdevices_svalues[LedLamp_speed];
         CalcValue = llSpdValue*2.5;
    runcommand = "echo -n SPD "..CalcValue.." | nc -w 1 -u "..IP.." 8888";
   os.execute(runcommand);
   print("Command= "..runcommand);
end

if devicechanged[LedLamp_scale] then
         llScaValue = otherdevices_svalues[LedLamp_scale];
    runcommand = "echo -n SCA "..llScaValue.." | nc -w 1 -u "..IP.." 8888";
   os.execute(runcommand);
   print("Command= "..runcommand);
end
return commandArray
Тут проверяем адрес лампы и названия диммеров.
Всё! В таком виде лампой можно полноценно управлять. Но хочется обратной связи, чтобы при изменении кнопкой или из программы на телефоне полоумный дом об этом узнал.
Создаем еще один скрипт Lua. Тут я поставил триггер Time. Это значит что проверяться состояние лампы будет раз в минуту! В ЛУА нельзя явно регулировать этот параметр, но есть грязный хак! Если нужно чтобы скрипт выполнялся чаще можно просто указать триггер "All" тогда будет примерно раз в 3-5 секунд, если указать Device то будет примерно раз в 10-15 секунд. Можно и не прибегать к хитрым уловкам и использовать dzVents, там можно с произвольной периодичностью исполнять скрипт. Но по моим наблюдениям если очень часто дергать лампу то она время от времени ребутится. По крайней мере мой китайский подвальный модуль сомнительного качества с прошивкой от уважаемого @gunner47, именно так себя ведет. Так что решайте сами, пробуйте...
Обзываем скрипт к примеру StatusLed
C++:
commandArray = {}

runcommand = "echo -n GET | nc -w 1 -u 192.168.1.17 8888";
local handle = io.popen(runcommand)
local result = handle:read("*a")
handle:close()
local t={}

for str in string.gmatch(result, "%S+") do table.insert(t, str)
end

    CalcMOD = (t[2]+1)*10
    CalcVOL = t[3]/2.5
    CalcSPD = t[4]/2.5

    if otherdevices_svalues['LedLamp  Эффект'] ~= tostring(CalcMOD) then
        print("SwMod: "..otherdevices_svalues['LedLamp  Эффект'].." - "..CalcMOD)
        strurl = 'curl "http://192.168.1.37:8080/json.htm?type=command&param=switchlight&idx=608&switchcmd=Set%20Level&level='..tostring(CalcMOD)..'"'
        os.execute(strurl)
    end


    if otherdevices_svalues['LedLamp  Яркость'] ~= tostring(CalcVOL) then
        print("SwVol: "..otherdevices_svalues['LedLamp  Яркость'].." - "..CalcVOL)
        strurl = 'curl "http://192.168.1.37:8080/json.htm?type=command&param=switchlight&idx=605&switchcmd=Set%20Level&level='..tostring(CalcVOL)..'"'
        os.execute(strurl)
    end

    if otherdevices_svalues['LedLamp  Скорость'] ~= tostring(CalcSPD) then
        print("SwSpd: "..otherdevices_svalues['LedLamp  Скорость'].." - "..CalcSPD)
        strurl = 'curl "http://192.168.1.37:8080/json.htm?type=command&param=switchlight&idx=606&switchcmd=Set%20Level&level='..tostring(CalcSPD)..'"'
        os.execute(strurl)
    end

    if otherdevices_svalues['LedLamp  Масштаб'] ~= t[5] then
        print("SwSca: "..otherdevices_svalues['LedLamp  Масштаб'].." - "..t[5])
        strurl = 'curl "http://192.168.1.37:8080/json.htm?type=command&param=switchlight&idx=607&switchcmd=Set%20Level&level='..t[5]..'"'
        os.execute(strurl)
    end

    if t[6] == '0' then
        if otherdevices['LedLamp'] == 'On' then
            strurl = 'curl "http://192.168.1.37:8080/json.htm?type=command&param=switchlight&idx=604&switchcmd=Off"'
            os.execute(strurl)
        end
    else
        if otherdevices['LedLamp'] == 'Off' then
            strurl = 'curl "http://192.168.1.37:8080/json.htm?type=command&param=switchlight&idx=604&switchcmd=On"'
            os.execute(strurl)
        end
    end

return commandArray
192.168.1.17 - адрес лампы, 192.168.1.37:8080 - адрес и порт сервера Домотикз. Тут можно в принципе указывать локалхост. IDXы в запросах нужно указать свои! В переменные в этом скрипте я их не выносил ибо мне влом. Кратко тут мы получаем состояние лампы, раскидываем строку на параметры и пихаем в табличку. Потом пересчитываем значения для диммеров ибо они 0-100, а значения яркости и скорости 0-255 а селектор вообще 10-200 с шагом в 10. И потом сравниваем полученные значения с положением ползунков диммеров, значением селектора и состоянием выключателя. Если совпадает не трогаем, если не совпадает корректируем.
На этом всё. Лампа управляется, состояние отслеживается.

По мне конечно более правильно реализовать обратную связь в скетче самой лампы. Чтобы данные об изменениях передовались только если они имели место быть. Но такой способ тоже вполне рабочий. Именно так лампа общается с приложением на телефоне.
 
  • Лойс +1
Реакции: Xmas

gunner47

★★★★★✩✩
18 Июн 2019
253
393
Очень здравый принцип!
Я двумя руками за вышеупомянутых индейцев, двумя ногами - за старика Оккама и всеми прочими органами - за всех нелюбителей увеличивать энтропию :)
Хотя есть и обратный принцип "тепловой смерти Вселенной", гласящий: "чтобы что-то работало, нужно это сделать, как только перестать делать, это что-то начнёт самостоятельный процесс старения, ветшания и разрушения, пока не сведётся к единому среднесерому и среднетёплому протовеществу" :) Я стараюсь учитывать оба эти принципа, т.е., движение - это жизнь! а суета - это боль! :)

А теперь применим это к нашей лампе.

По мне конечно более правильно реализовать обратную связь в скетче самой лампы. Чтобы данные об изменениях передовались только если они имели место быть

Это краеугольный вопрос архитектуры и внедрения зависимостей.
Если лампа будет отдавать свои изменения по собственной инициативе, то вопрос: кому?
Получается, она должна знать подключенных (точнее, работающих с ней) клиентов, так? Одного или всех? И дублировать данные всем? Попахивает суетой... И как определить этих клиентов? Хардкодить по IP, запоминать всех, кто управлял лампой с момента её загрузки? Если клиент - Domoticz, MajorDomo и т.д., тогда проще, просто хардкодим их. Тогда объявляем ВСЁ управление жизнью и пускаем его ТОЛЬКО через них, и никто кроме них не должен коннектиться с лампой напрямую (ибо суета). Забываем об android приложении.
Но не у всех дома развёрнуты Domoticz, MajorDomo и т.д. Как быть остальным?
Вспоминаем об android приложении. Или web панели управления, не важно. Важно, чтобы можно было обойтись без "сервера", а управлять лампой через "клиентское" приложение и получать от неё статус в рамках инициированной именно клиентом сессии. И тут снова вопрос: как синхронизировать клиентов? Как сообщить приложению, панели и т.д. изменения яркости или текущего режима от кнопки на лампе, а? А если лампой попытаться управлять с двух телефонов одновременно?
Постулат гласит: если есть несколько агентов управления одним ресурсом, их нужно синхронизировать, и в клиент-серверной архитектуре за это ответственен клиент, сервер (лампа) не обязан знать всех клиентов и обновлять их, он обязан обновлять только себя.
И неизбежно приходим к суете. Как бы печально это ни казалось. Я её не оправдываю, но в двухзвенной клиент-серверной архитектуре по-другому никак. А это плодит регулярные запросы к лампе для обновления её статуса на клиенте.
Вывод: такой сценарий скорее жив, чем мёртв, но только до весомой доли суеты, и скорее мёртв при нескольких клиентах одновременно ввиду превышения параметром суеты критического значения, esp'шка может загнуться или просто изрядно тормозить, если одновременно на 10 смартфонах открыть управляющее ей приложение. И это я ещё не говорю о том, что вряд ли кто-то предусмотрел такой сценарий в дизайне изначально. Я вот точно не проверял, не возникнут ли ошибки с такими перекрёстными, почти одновременными запросами.
Отсюда логичный вопрос: а как же тогда сделать правильнее?
И вселенская архитектура нам отвечает: с помощью трёхзвенной связки, реализующей шаблон "издатель-подписчик". Трёхзвенной, потому что помимо издателя и подписчика есть пресловутый брокер. Это как раз сценарий с Domoticz, MajorDomo, MQTT и пр. Издатель - тот, кто генерирует событие (взаимодействие). Подписчик - тот, кто заинтересован о нём узнать. В такой архитектуре что издатель, что подписчик общаются ТОЛЬКО с брокером и не знают о существовании друг друга, а только надеются :) иначе зачем было бы всё это городить. Суета исключена как класс. Произошло изменение - сообщи брокеру. Брокер узнал об изменении - выдал в эфир в надежде, что до подписчиков дойдёт. Подписчик изначально достаточно умный, чтобы просто заявить о своём присутствии брокеру. Всё! Лампа бросает Сизифов камень с криком: "Теперь я не сервер!" (по природе она действительно не сервер, она - исполнительный механизм, не приспособленный к общению со всеми заинтересованными, см. выше).
Итак, рецепт всеобщего счастья найден, концепция "умного дома" сформирована.
Но куда деть всех тех, кто увидел ролик Гайвера и просто загорелся этой лампой здесь и сейчас? Умно рассказывать им об "умном" доме? Могут ведь и в морду дать.
Итак, возвращаемся к суете...
И регулярным опросам приложением статуса лампы.
Всё равно дома всегда есть "хозяин пульта", и он обычно один. Ну, ещё кот, который из вредности может на нём лежать в раздумиях о вселенской архитектуре.
Если у вас есть здравые идеи о том, как можно организовать всё лучше, я бы послушал.


P.S. На данный момент CURR возвращает:
C++:
CURR <число:текущий режим> <число:яркость> <число:скорость> <число:масштаб> <число:вкл/выкл> <число:esp_mode> <число:use_ntp> <hh:mm:ss>
esp_mode и use_ntp нужны, чтобы приложение скрывало управление будильником, если лампа не синхронизировала время; возможно ещё буду вносить тут коррективы.
P.P.S. С одной из своих ламп убрал конденсатор по питанию, на другую поставил 2200 мкФ. В течение 2 дней та, что с конденсатором ещё не перезагружалась. Без конденсатора перезагружается 1-2 раза в день. Android приложением пользуюсь часто. Но выводы делать пока рано.
 
Изменено:

Samuelli1997

✩✩✩✩✩✩✩
24 Май 2019
6
0
Добрый день,заказал плату nodemcu c таким ядром ESP8266 ESP-12F, прошилось на ESP8266 ESP-12Е и работает,но не всегда корректно,может спокойно работать несколько часов к ряду без проблем,после отключения питания по тем или иным причинам и последующим включением в сеть ,начинались моргания двух нижних диодов из начала ленты, белым и зеленым,моргает примерно раз в 7-8 секунд. Бывает что после перезапуска запускается быстро и работает нормально,а бывает что может стоять минут по 20 и просто моргать 2 диодами, в чем проблема? в Менеджере плат не могу найти с этим ядром плату,подскажите как быть,спасибо
 

Andrew Haronych

★✩✩✩✩✩✩
17 Июл 2019
64
37
Москва
@gunner47, Согласен со всем озвученным!
Тут действительно каждый сам решает ехать или шашечки. Ктото таки запилит интеграцию конкретного сервера в скетч и будет вести свою ветку прошивки с маджонгом и гейшами каждый раз при обновлении базовой перенося свой код в проект. Ктото будет пользовать базовый функционал не думая о доп возможностях. Ктото в лучших традициях технопроктолога получит функционал из базы методом хитрого колдунства и костылеписательства ))) Я всего лишь показал уже два варианта интеграции. Ранее с поддержкой конкретного сервера в скетче и сейчас вообще без вмешательства в прошивку ) Я для себя в итоге выбрал промежуточный вариант ) Всёравно когда обновляется базовая прошивка скачав ее с гитхаба нужно настроить скетч под себя. Указать часовой пояс, ntp сервер, пины... Для меня во время этого процесса совсем не сложно добавить в скетч ОДНУ! строчку кода которая проверит флаг settChanged и если он взведен дернет сервер ) При этом изменения в коде минимальны, а полоумный дом знает когда в лампе чтото изменилось без постоянного опроса )

З.Ы. Это не значит что я забросил ковырять проект ) я продолжаю экспериментировать в попытках скрестить ежа, ужа и натянуть результат на глобус ) но это происходит на тестовом стенде. Возможно когданибудь из этого родится шедевр с преферансом и поэтессами. А кроме этого есть уже собранная лампа которая заняла своё почетное место на колонке возле монитора и просто работает и радует )
 
Изменено:
  • Лойс +1
Реакции: Xmas, gunner47 и Inuki

Veresk

✩✩✩✩✩✩✩
6 Авг 2019
10
1
Друзья, доброго всем дня

Сейчас начал прикручивать к wemos матрицу и столкнулся с проблемой, что не ведаю как подключать матрицу к модулю.
На самой матрице есть два проводка DOUT и DIN какой из них подключать к модулю, а какой оставлять без подключения?
Помогите понять пожалуйста, так как в видео к сожалению видна только разводка по питанию.