Code Monkey home page Code Monkey logo

gyverlamp's Introduction

PROJECT_PHOTO

Крутая WiFi лампа на esp8266 своими руками

Описание проекта

Представляю вашему вниманию светильник на адресных светодиодах с кучей эффектов, управлением по Wi-Fi и функцией будильник-рассвет!

Железо

  • Проект собран на базе микроконтроллера ESP8266 в лице платы NodeMCU или Wemos D1 mini (неважно, какую из этих плат использовать!).
  • Вместо адресной ленты используется гибкая адресная матрица 16×16, что выходит дешевле ленты (матрица 16×16 стоит 1500р, она состоит из 256 диодов с плотностью 100 штук на метр. Лента такой же плотности стоит 1000р за метр (за 100 светодиодов). Для склейки матрицы размером 16×16 понадобится 2.5 метра ленты, то есть 2500р. А готовая матрица стоит на 1000р дешевле!).
  • Система управляется со смартфона по Wi-Fi (приложение GyverLamp для Android), а также “оффлайн” с кнопки на корпусе (сенсорная кнопка на TTP223).

Фишки

  • 14 крутых эффектов
  • Настройка скорости, яркости и “масштаба” для каждого эффекта
  • Настройка эффектов со смартфона
  • Работа системы как в локальной сети, так и в режиме “точки доступа”
  • Встроенный Wi-Fi менеджер для удобной настройки сети
  • Система получает точное время из Интернета
  • Управление кнопкой: смена режима, настройка яркости, вкл/выкл
  • Режим будильник-рассвет: менеджер будильников на неделю в приложении

Корпус

  • Корпус выглядит очень презентабельно, несмотря на простоту и доступность материалов
  • Рассеиватель – матовый плафон из Леруа Мерлен
  • Остальные элементы корпуса – канализационные трубы, в лучших традициях жанра!
  • Страница проекта на сайте: https://alexgyver.ru/GyverLamp/

Папки

ВНИМАНИЕ! Если это твой первый опыт работы с Arduino, читай инструкцию

  • libraries - библиотеки проекта. Заменить имеющиеся версии
  • firmware - прошивки для Arduino
  • schemes - схемы подключения компонентов

Схемы

SCHEME SCHEME

Материалы и компоненты

Ссылки оставлены на магазины, с которых я закупаюсь уже не один год

Wemos D1 mini – искать

Вам скорее всего пригодится

Как скачать и прошить

  • Первые шаги с Arduino - ультра подробная статья по началу работы с Ардуино, ознакомиться первым делом!
  • Скачать архив с проектом

На главной странице проекта (где ты читаешь этот текст) вверху справа зелёная кнопка Clone or download, вот её жми, там будет Download ZIP

  • Установить библиотеки в
    C:\Program Files (x86)\Arduino\libraries\ (Windows x64)
    C:\Program Files\Arduino\libraries\ (Windows x86)
  • Подключить внешнее питание 5 Вольт
  • Подключить плату к компьютеру
  • Файл/Настройки, вставить ссылку http://arduino.esp8266.com/stable/package_esp8266com_index.json в в текст-бокс для дополнительных ссылок для менеджера плат
  • Открыть Инструменты/Плата/Менеджер плат…, найти esp8266 by ESP8266 Community, установить версию 2.5.0
  • Открыть Инструменты, настроить Плату, Порт и другие параметры как на скриншоте
  • Загрузить прошивку

Настройки в коде

// -------- ВРЕМЯ -------
GMT 3              // смещение (москва 3)
NTP_ADDRESS  "europe.pool.ntp.org"    // сервер времени

// -------- РАССВЕТ -------
DAWN_BRIGHT 200       // макс. яркость рассвета
DAWN_TIMEOUT 1        // сколько рассвет светит после времени будильника, минут

// ---------- МАТРИЦА ---------
BRIGHTNESS 40         // стандартная маскимальная яркость (0-255)
CURRENT_LIMIT 2000    // лимит по току в миллиамперах, автоматически управляет яркостью (пожалей свой блок питания!) 0 - выключить лимит

WIDTH 16              // ширина матрицы
HEIGHT 16             // высота матрицы

COLOR_ORDER GRB       // порядок цветов на ленте. Если цвет отображается некорректно - меняйте. Начать можно с RGB

MATRIX_TYPE 0         // тип матрицы: 0 - зигзаг, 1 - параллельная
CONNECTION_ANGLE 0    // угол подключения: 0 - левый нижний, 1 - левый верхний, 2 - правый верхний, 3 - правый нижний
STRIP_DIRECTION 0     // направление ленты из угла: 0 - вправо, 1 - вверх, 2 - влево, 3 - вниз
// при неправильной настрйоке матрицы вы получите предупреждение "Wrong matrix parameters! Set to default"
// шпаргалка по настройке матрицы здесь! https://alexgyver.ru/matrix_guide/

// --------- ESP --------
ESP_MODE 1
// 0 - точка доступа (192.168.4.1 или другой)
// 1 - локальный (192.168.1.232 или другой)

// -------- Менеджер WiFi ---------
AC_SSID "AutoConnectAP"
AC_PASS "12345678"

// -------------- AP ---------------
AP_SSID "GyverLamp"
AP_PASS "12345678"
AP_PORT 8888

FAQ

Основные вопросы

В: Как скачать с этого грёбаного сайта?
О: На главной странице проекта (где ты читаешь этот текст) вверху справа зелёная кнопка Clone or download, вот её жми, там будет Download ZIP

В: Скачался какой то файл .zip, куда его теперь?
О: Это архив. Можно открыть стандартными средствами Windows, но думаю у всех на компьютере установлен WinRAR, архив нужно правой кнопкой и извлечь.

В: Я совсем новичок! Что мне делать с Ардуиной, где взять все программы?
О: Читай и смотри видос http://alexgyver.ru/arduino-first/

В: Вылетает ошибка загрузки / компиляции! О: Читай тут: https://alexgyver.ru/arduino-first/#step-5

В: Сколько стоит?
О: Ничего не продаю.

Вопросы по этому проекту

Полезная информация

gyverlamp's People

Contributors

alexgyver avatar gyverlibs avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gyverlamp's Issues

Настройки яркости

При установке яркость на минимальную она постепенно увеличивается обратно до максимума

different languages

can you plz add different languages to the app so that people with different languages can use this app

Перевесьте led_pin

По схеме на 8266 он висит на io2, это вызывает бутлуп при старте, с матрицей 16х16 точно. Я повесил на d1 (wemos d1 mini) и указал 5u пин, работает четко.

Проблема с загрузкой обновленной прошивки под работу с Iphone

Доброй ночи. Просьба помочь в решение вопроса. Возникает проблема ссылаясь на файл #include "timer2Minim.h" появляется ошибка о том что такой фаил найти он не может. При этом в репе вижу фаил с таким названием. Пробовал ради интереса удалять его, но в include еще с одним файлом такая проблема. Просьба подсказать не обращался ли кто с подобной проблемой

Проблема компиляции v1.5 версия с MQTT от Whilser

При первой сборке лампы скомпилировал прошивку v1.4 MQTT всё работает, решил внести исправления в параметрах и обновление. Возникает ошибка компиляции, любые пути решения проверки версий библиотек и плат не увенчались успехом.
Не смог разобраться где корень проблемы.

mqtt:2:1: error: 'MQTTconfig' does not name a type

MQTTconfig readMQTTConfig () {

^

C:\Temp\GyverLamp-master\firmware\GyverLamp_v1.5_MQTT\GyverLamp_v1.5_MQTT.ino: In function 'void setup()':

GyverLamp_v1.5_MQTT:399:42: error: 'readMQTTConfig' was not declared in this scope

MQTTconfig MQTTConfig = readMQTTConfig();

Используем библиотеку FastLED-3.2.9 версии 3.2.9 из папки: C:\Program Files (x86)\Arduino\libraries\FastLED-3.2.9
Используем библиотеку ESP8266WiFi версии 1.0 из папки: C:\Users\EJ\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.2\libraries\ESP8266WiFi
Используем библиотеку DNSServer версии 1.1.1 из папки: C:\Users\EJ\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.2\libraries\DNSServer
Используем библиотеку ESP8266WebServer версии 1.0 из папки: C:\Users\EJ\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.2\libraries\ESP8266WebServer
Используем библиотеку ESP8266mDNS версии 1.2 из папки: C:\Users\EJ\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.2\libraries\ESP8266mDNS
Используем библиотеку ESP8266HTTPUpdateServer версии 1.0 из папки: C:\Users\EJ\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.2\libraries\ESP8266HTTPUpdateServer
Используем библиотеку WiFiManager версии 0.15.0-beta из папки: C:\Program Files (x86)\Arduino\libraries\WiFiManager
Используем библиотеку EEPROM версии 1.0 из папки: C:\Users\EJ\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.2\libraries\EEPROM
Используем библиотеку NTPClient версии 3.2.0 из папки: C:\Program Files (x86)\Arduino\libraries\NTPClient
Используем библиотеку GyverButton в папке: C:\Program Files (x86)\Arduino\libraries\GyverButton (legacy)
Используем библиотеку PubSubClient версии 2.7 из папки: C:\Program Files (x86)\Arduino\libraries\PubSubClient
Используем библиотеку ArduinoJson версии 6.11.3 из папки: C:\Program Files (x86)\Arduino\libraries\ArduinoJson
Используем библиотеку ArduinoOTA версии 1.0 из папки: C:\Users\EJ\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.2\libraries\ArduinoOTA
Используем библиотеку Timer в папке: C:\Program Files (x86)\Arduino\libraries\Timer (legacy)
exit status 1
'MQTTconfig' does not name a type

First LED of Matrix is flashing/flickering green

I have the problem, that the first LED of my 16x16 LED Matrix is flashing/flickering green. I already have googled this problem and found out that I am not the only one with this problem. In Internet I found many people who have problems with NodeMCU, ESP8266, Wemos D1, and other boards and WS2812 LED-Strips with flashing/flickering green first LED-Pixel and no one have solved this issue. I saw that you have added an resistor and diode on LED-Strip of GyverLamp2 but with no description why and I think the diode don’t is in the right direction. So I hope you can help or describe why you have done this and only on GyverLamp2 and not change the scheme of GyverLamp. Am I the only one with this flashing first LED-Pixel problem? Thank you in advance.

Patrick

Чередование режимов точки доступа и локального при включении

Планирую иногда брать лампу на дачу где нет вайфая, а каждый раз изменять прошивку лень. Поэтому добавил самый простой, как мне кажется, вариант переключения без доработки железа - рандомный выбор при включении)
Если включился не тот режим, нужно просто вытащить из розетки и вставить снова)

// --------- ESP --------
int r = micros()%2; // рандомный выбор режима при включении
#define ESP_MODE r

добавил некоторве функции и упростил настройку статического IP

Есть константа const char HOSTNAME[] = "GyverLamp";
Значение которую можно вводить вместо адреса в программе
HOSTNAME это имя клиента сети

/*
Скетч к проекту "Многофункциональный RGB светильник"
Страница проекта (схемы, описания): https://alexgyver.ru/GyverLamp/
Исходники на GitHub: https://github.com/AlexGyver/GyverLamp/
Нравится, как написан код? Поддержи автора! https://alexgyver.ru/support_alex/
Автор: AlexGyver, AlexGyver Technologies, 2019
https://AlexGyver.ru/
*/

/*
Версия 1.2:

  • Добавлена настройка статического IP
  • Добавлен эффект "Цвет"
  • Добавлен эффект "Снег"
  • Добавлен эффект "Матрица"
  • Добавлен эффект "Светлячки"
    */

// Ссылка для менеджера плат:
// http://arduino.esp8266.com/stable/package_esp8266com_index.json

// ============= НАСТРОЙКИ =============
// -------- ВРЕМЯ -------
#define GMT 3 // смещение (москва 3)
#define NTP_ADDRESS "europe.pool.ntp.org" // сервер времени

// -------- РАССВЕТ -------
#define DAWN_BRIGHT 200 // макс. яркость рассвета
#define DAWN_TIMEOUT 1 // сколько рассвет светит после времени будильника, минут

// ---------- МАТРИЦА ---------
#define BRIGHTNESS 40 // стандартная маскимальная яркость (0-255)
#define CURRENT_LIMIT 2000 // лимит по току в миллиамперах, автоматически управляет яркостью (пожалей свой блок питания!) 0 - выключить лимит

#define WIDTH 6 // ширина матрицы
#define HEIGHT 9 // высота матрицы

#define COLOR_ORDER GRB // порядок цветов на ленте. Если цвет отображается некорректно - меняйте. Начать можно с RGB

#define MATRIX_TYPE 1 // тип матрицы: 0 - зигзаг, 1 - параллельная
#define CONNECTION_ANGLE 2 // угол подключения: 0 - левый нижний, 1 - левый верхний, 2 - правый верхний, 3 - правый нижний
#define STRIP_DIRECTION 3 // направление ленты из угла: 0 - вправо, 1 - вверх, 2 - влево, 3 - вниз
// при неправильной настройке матрицы вы получите предупреждение "Wrong matrix parameters! Set to default"
// шпаргалка по настройке матрицы здесь! https://alexgyver.ru/matrix_guide/

// --------- ESP --------
const char HOSTNAME[] = "GyverLamp";
#define ESP_MODE 1
// 0 - точка доступа
// 1 - локальный
byte IP_AP[] = {192, 168, 4, 1}; // статический IP точки доступа (менять только последнюю цифру)

//#define WIFIMGR_PORTAL_TIMEOUT 1
//#define WIFIMGR_SET_MANUAL_IP
#ifdef WIFIMGR_SET_MANUAL_IP
char static_ip[16] = "192.168.1.56";
char static_gw[16] = "192.168.1.1";
char static_sn[16] = "255.255.255.0";
#endif

// ----- AP (точка доступа) -------
#define AP_SSID "GyverLamp"
#define AP_PASS "12345678"
#define AP_PORT 8888

// -------- Менеджер WiFi ---------
#define AC_SSID "AutoAP"
#define AC_PASS "12345678"

// ============= ДЛЯ РАЗРАБОТЧИКОВ =============
#define LED_PIN 2 // пин ленты
#define BTN_PIN 3
#define MODE_AMOUNT 18

#define NUM_LEDS WIDTH * HEIGHT
#define SEGMENTS 1 // диодов в одном "пикселе" (для создания матрицы из кусков ленты)
// ---------------- БИБЛИОТЕКИ -----------------
#define FASTLED_INTERRUPT_RETRY_COUNT 0
#define FASTLED_ALLOW_INTERRUPTS 0
#define FASTLED_ESP8266_RAW_PIN_ORDER
#define NTP_INTERVAL 60 * 1000 // обновление (1 минута)

#include "timerMinim.h"
#include <FastLED.h>
#include <ESP8266WiFi.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#include <WiFiUdp.h>
#include <EEPROM.h>
#include <NTPClient.h>
#include <GyverButton.h>

// ------------------- ТИПЫ --------------------
CRGB leds[NUM_LEDS];
WiFiServer server(88);
WiFiUDP Udp;
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, NTP_ADDRESS, GMT * 3600, NTP_INTERVAL);
timerMinim timeTimer(3000);
GButton touch(BTN_PIN, LOW_PULL, NORM_OPEN);

// ----------------- ПЕРЕМЕННЫЕ ------------------
const char AP_NameChar[] = AP_SSID;
const char WiFiPassword[] = AP_PASS;
unsigned int localPort = AP_PORT;
char packetBuffer[UDP_TX_PACKET_MAX_SIZE + 1]; //buffer to hold incoming packet
String inputBuffer;
static const byte maxDim = max(WIDTH, HEIGHT);
struct {
byte brightness = 50;
byte speed = 30;
byte scale = 40;
} modes[MODE_AMOUNT];

struct {
boolean state = false;
int time = 0;
} alarm[7];

byte dawnOffsets[] = {5, 10, 15, 20, 25, 30, 40, 50, 60};
byte dawnMode;
boolean dawnFlag = false;
long thisTime;
boolean manualOff = false;

int8_t currentMode = 0;
boolean loadingFlag = true;
boolean ONflag = true;
uint32_t eepromTimer;
boolean settChanged = false;
// Конфетти, Огонь, Радуга верт., Радуга гориз., Смена цвета,
// Безумие 3D, Облака 3D, Лава 3D, Плазма 3D, Радуга 3D,
// Павлин 3D, Зебра 3D, Лес 3D, Океан 3D,

unsigned char matrixValue[8][16];

void setup() {
//ESP.wdtDisable();
//ESP.wdtEnable(WDTO_8S);
wifi_station_set_hostname(const_cast<char*>(HOSTNAME));
// ЛЕНТА
FastLED.addLeds<WS2812B, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS)/.setCorrection( TypicalLEDStrip )/;
FastLED.setBrightness(BRIGHTNESS);
if (CURRENT_LIMIT > 0) FastLED.setMaxPowerInVoltsAndMilliamps(5, CURRENT_LIMIT);
FastLED.clear();
FastLED.show();

touch.setStepTimeout(100);
touch.setClickTimeout(500);

Serial.begin(115200);
Serial.println();

// WI-FI
if (ESP_MODE == 0) { // режим точки доступа
WiFi.softAP(AP_NameChar, WiFiPassword);
IPAddress myIP = WiFi.softAPIP();
Serial.print("Access point Mode");
Serial.print("AP IP address: ");
Serial.println(myIP);
server.begin();
} else { // подключаемся к роутеру
Serial.print("WiFi manager");
WiFiManager wifiManager;

#ifdef WIFIMGR_SET_MANUAL_IP
  IPAddress _ip,_gw,_sn;
  _ip.fromString(static_ip);
  _gw.fromString(static_gw);
  _sn.fromString(static_sn);
  wifiManager.setSTAStaticIPConfig(_ip, _gw, _sn);
#endif
#ifdef WIFIMGR_PORTAL_TIMEOUT
wifiManager.setConfigPortalTimeout(WIFIMGR_PORTAL_TIMEOUT);
#endif    
wifiManager.autoConnect(HOSTNAME);
wifiManager.setDebugOutput(false);
//wifiManager.resetSettings();

Serial.print("Connected! IP address: ");
Serial.println("local ip");
Serial.println(WiFi.localIP());
Serial.println(WiFi.gatewayIP());
Serial.println(WiFi.subnetMask());
server.begin();

}

Serial.printf("UDP server on port %d\n", localPort);
Udp.begin(localPort);

// EEPROM
EEPROM.begin(202);
delay(50);
if (EEPROM.read(198) != 20) { // первый запуск
EEPROM.write(198, 20);
EEPROM.commit();

for (byte i = 0; i < MODE_AMOUNT; i++) {
  EEPROM.put(3 * i + 40, modes[i]);
  EEPROM.commit();
}
for (byte i = 0; i < 7; i++) {
  EEPROM.write(5 * i, alarm[i].state);   // рассвет
  eeWriteInt(5 * i + 1, alarm[i].time);
  EEPROM.commit();
}
EEPROM.write(199, 0);   // рассвет
EEPROM.write(200, 0);   // режим
EEPROM.commit();

}
for (byte i = 0; i < MODE_AMOUNT; i++) {
EEPROM.get(3 * i + 40, modes[i]);
}
for (byte i = 0; i < 7; i++) {
alarm[i].state = EEPROM.read(5 * i);
alarm[i].time = eeGetInt(5 * i + 1);
}
dawnMode = EEPROM.read(199);
currentMode = (int8_t)EEPROM.read(200);

// отправляем настройки
sendCurrent();
char reply[inputBuffer.length() + 1];
inputBuffer.toCharArray(reply, inputBuffer.length() + 1);
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
Udp.write(reply);
Udp.endPacket();

timeClient.begin();
memset(matrixValue, 0, sizeof(matrixValue));

randomSeed(micros());
}

void loop() {
parseUDP();

effectsTick();
eepromTick();
timeTick();
buttonTick();
//ESP.wdtFeed(); // пнуть собаку
yield();
}

void eeWriteInt(int pos, int val) {
byte* p = (byte*) &val;
EEPROM.write(pos, *p);
EEPROM.write(pos + 1, *(p + 1));
EEPROM.write(pos + 2, *(p + 2));
EEPROM.write(pos + 3, *(p + 3));
EEPROM.commit();
}

int eeGetInt(int pos) {
int val;
byte* p = (byte*) &val;
*p = EEPROM.read(pos);
*(p + 1) = EEPROM.read(pos + 1);
*(p + 2) = EEPROM.read(pos + 2);
*(p + 3) = EEPROM.read(pos + 3);
return val;
}

Отображение времени (часы)

Круто бы добавить режим отображения времени. На такой крутой адресной матрице это должно выглядеть хорошо. Можно также сделатьнесколько эфектов отображения/анимации времени.

Не прямоугольная матрица

Возможно ли применить не прямоугольную матрицу. Например в виде треугольника. Идея сделать подсветку плоской проекции елочки.
Посмотрел что в эффектах везде указаны переменные HEIGHT и WIDTH указывающие на ширину и высоту, но как в данном случае указать ширину и высоту прямоугольного треугольника не понимаю. Как например, указать что в первом столбце 1 светодиод, во втором - 3, в третьем 5 и т.д. до 25, а потом по убывающей?

проблема с таймингом без интернета

При отсутствии интернета вызов метода timeClient.update(); вешает обработку тика эффекта на секунду. В итоге нет реакции на изменение скорости и т.п.

В библиотечном методе NTPClient::forceUpdate() есть кусок кода:

  byte timeout = 0;
  int cb = 0;
  do {
    delay ( 10 );
    cb = this->_udp->parsePacket();
    if (timeout > 100) return false; // timeout after 1000 ms
    timeout++;
  } while (cb == 0);

В итоге при каждом выполнении цикла эффекта мы попадаем на таймаут, а так как используется delay, а не millis, то мы попадаем с эффектами лампы.
Надо как-то это учесть в работе самой лампы и возможно стоит как-то переписать это на millis()

CI pipeline для автоматической сборки прошивки

Недавно на хабре проскочила статья как раз про автосборку средствами гитхаба бинарников под платформу данного проекта.

Это позволит получать прямо с гитхаба готовые бинарники сразу после релиза и не компилировать их у себя.

В выше упомянутой статье есть пример скрипта для настройки CI. Мне ещё не все компоненты приехали из китая и не на чем попробовать, а-то бы я занялся этим вопросом и сделал бы пуллриквест. Так, собственно, и сделаю, если никто не сделает раньше.

проблема настройки Wi-Fi подключения к роутеру

модуль стартует только в режиме точки доступа. первый раз был запуск менеджера wi-fi%) после этого( пытался сбросить, или перепрошить заново) никаких эффектов, в wi-fi сети не появляется, вместо этого работает в режиме точки доступа на своем стандартном (указанном в прошивке) ip 192.168.4.1. Подскажите куда копать ?

Зависания при недоступности NTP сервера

Проблема: Если NTP сервер недоступен происходит зависание примерно каждые 3 секунды на 1 секунду. В моем случае это происходило из-за нестандартного gateway роутера.

Причина: т.к. в таком состоянии доступа в интернет нет, получить время невозможно. В timeTick() строчка timeClient.update() пытается получить время и блокирует поток на 1 секундный таймаут.

Решение для нестандартного gateway :

byte IP_GTW[] = {192, 168, 1, 10};  // gateway
...
WiFi.config(IPAddress(IP_STA[0], IP_STA[1], IP_STA[2], IP_STA[3]),
                IPAddress(IP_GTW[0], IP_GTW[1], IP_GTW[2], IP_GTW[3]),
                IPAddress(255, 255, 255, 0));

Демонстрация проблемы: https://youtu.be/V2hN8KUBEi0

Эта проблема может воспроизводится если ntp сервер будет недоступен по другим причинам (нет интернета например).
Предлагаю в timeTick делать синхронизацию не циклично, по готовности, а раз в час (например). Так же это уменьшит избыточное количество запросов.

PS. Спасибо за проект. Внес бы корректировку сам, но не мой профиль, сложновато, да и "костыль" меня пока устраивает.

Не "корректная/реалистичная" работа огня

Огонь сменяется слишком дискретно, причина как мне кажется в том что скорость в текущей конфигурации влияет на FPS, а в идеальном варианте должна влиять на скорость изменения/интерполяции самого эффекта.(в текущем коде проценты меняются со скоростью 30 https://github.com/AlexGyver/GyverLamp/blob/master/firmware/GyverLamp_v1.5.5/effects.ino#L78 )
и сам таймер https://github.com/AlexGyver/GyverLamp/blob/master/firmware/GyverLamp_v1.5.5/effectTicker.ino#L5

я попробую поэксперементировать, но может есть сразу подводные камни или предложения куда копать?

Описание протолкала команд

Лампу можно подключить к умному дому. Подскажите описания протолкала http запросов с переменными и значениями.

Куда писать ишью для gunner47? Есть проблема. (Это вопрос)

Я дичайше извиняюсь, что сюда пишу. Просто не понял как обратиться к gunner47.
Бейте не сильно, отправьте в нужный форум, плиз.
Просто установил его прошивку, а там работает со старта только режим точки доступа.
В Вашей же прошивке, как сейчас помню, при первом обращении к WiFi платы можно было настроить подключение её к роутеру.
Я в файле констант у него нашёл следующее:
#define ESP_MODE (1U) // 0U - WiFi точка доступа, 1U - клиент WiFi (подключение к роутеру)
Ставил обе - 42.
У меня плата с надписью "D1 MINI PRO". Пробовал выставлять другие esp - 42.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.