Добрый вечер! Написал скетч, который заливаю в ESP266-01. Получаю по NTP время, чтобы понять нужно включить реле или еще нет и получаю странные значения для t_time_b и t_time_e Код (C++): unsigned long ntp_time = 0; int sH[2]= {6,20}; int sM[2]= {0,0}; int eH[2]= {6,21}; int eM[2]= {30,15}; time_t t_time_now, t_time_b, t_time_e; struct tm ts, te, t_now; t_time_now = (time_t(ntp_time)); ts = te = t_now = *localtime(&t_time_now); for (int i = 0; i < 2; i++) { ts.tm_hour = sH[i]; ts.tm_min = sM[i]; ts.tm_sec = 0; te.tm_hour = eH[i]; te.tm_min = eM[i]; te.tm_sec = 0; t_time_b = mktime(&ts); t_time_e = mktime(&te); if (t_time_now >= t_time_b && t_time_now <= t_time_e) { Serial.println("RELAY ON"); on_off = true; } else { on_off = false; Serial.println("RELAY OFF"); } } ntp_time - значение корректное вида - 1470248857 заметил что, ф-я mktime почему то не корректно конвертирует, значения получаются отрицательные. t_time_b = -444412352 t_time_e = -444407852 Помогите понять ошибку, спасибо P.S. - нормально ли, что скетч заливается в ESP8266-01 минут 5 через Arduino IDE?
Да вроде навскидку не видно особого криминала. Правка: прогнал ваш код: Код (C++): // Example program #include <iostream> #include <string> int main() { bool on_off; unsigned long ntp_time = 0; int sH[2]= {6,20}; int sM[2]= {0,0}; int eH[2]= {6,21}; int eM[2]= {30,15}; time_t t_time_now, t_time_b, t_time_e; struct tm ts, te, t_now; t_time_now = (time_t(ntp_time)); ts = te = t_now = *localtime(&t_time_now); for (int i = 0; i < 2; i++) { ts.tm_hour = sH[i]; ts.tm_min = sM[i]; ts.tm_sec = 0; te.tm_hour = eH[i]; te.tm_min = eM[i]; te.tm_sec = 0; t_time_b = mktime(&ts); t_time_e = mktime(&te); std::cout << t_time_b << std::endl; std::cout << t_time_e << std::endl; if (t_time_now >= t_time_b && t_time_now <= t_time_e) { std::cout << ("RELAY ON") << std::endl; on_off = true; } else { on_off = false; std::cout << ("RELAY OFF") << std::endl; } } } через http://cpp.sh/ - всё корректно выводит.
DIYMan - в том то и дело, у меня то же через http://www.tutorialspoint.com/codingground.htm также верно выводит данные, не пойму в чем проблема у Arduino IDE.
Arduino Mega Server умеет корректно получать время по NTP. Там, правда, W5100, но реализацию посмотреть можете
ESP8266 корректно получает данные, я это указал (ntp_time - это и есть текущее время полученное по NTP). А вот изменение полученного времени с последующей конвертацией с помощью mktime - происходит некорректно.
Проверял, год, месяц, день, часы, минуты и секунды - Код (Text): 116, 7, 3, 6, 0 , 0 116, 7, 3, 6, 30 , 0 116, 7, 3, 20, 0 , 0 116, 7, 3, 21, 15 , 0 Т.е. структура содержит корректные данные. Появилась идея прогнать этот код на nano или mega.
Там не в Arduino IDE дело, а в исходниках надстройки для ESP8266 - там надо править багу эту, насколько я понял.
А что Вы понимаете под надстройкой? Как только я залил скетч в ESP - весь SDK был стерт из памяти , верно? Вижу что они включили исправление в версию 2.4.0 - понять бы что это и как это потом установить при выходе данной версии.
Вы программируете ESP из-под Arduino IDE, так? Значит, у вас стоит пакет поддержки этого дела, установленный в Arduino IDE. Так вот - бага в этом пакете, а не в Arduino IDE. Обновить пакет можно, зайдя в менеджер плат и выбрав там новую версию, если она доступна уже. Неверно.
SDK никуда не стирается - это набор файлов, которые лежат по месту установки SDK. SDK можно либо использовать - либо нет. Использование того или иного SDK в Arduino IDE осуществляется выбором типа платы для проекта.