Программируем ESP8266 в Arduino IDE

Часы с NTPВ предыдущей статье про «народные» WiFi модули я делал обзор купленных почти за $2.6 ES-07 с платами адаптерами.

Сейчас расскажу о программировании модулей в среде Arduino IDE. Заодно в этой статье можно узнать, как сделать часы с синхронизацией времени по NTP протоколу.

Короткий экскурс по программированию ESP-шек

Изначально с завода ESP8266 идут с прошивкой от компании Espressif. В данной прошивке реализована работа с WiFi модулем как с модемом, через AT команды, подаваемые в последовательный порт. В таком режиме хорошо управлять ESP-шкой с внешнего контроллера, тем же Arduono, правда интерфейс обмена данными с контроллером, на мой взгляд, довольно тормозной.

Компания Espressif выпускает SDK для этих модулей, позволяющей разрабатывать собственные прошивки. Здесь подробно описано о данном процессе. Здесь все хорошо по возможностям, но довольно сложно по среде разработки и программировании.

Можно воспользоваться готовыми прошивками со встроенными интерпретаторами. Например, в этой статье я экспериментировал с прошивкой NodeMCU, позволяющей реализовывать логику работы модуля на встроенном интерпретаторе LUA. Можно использовать прошивку со встроенным JavaScript. К недостаткам таких прошивок я бы отнес «прожорливость» встроенных интерпретаторов к ресурсам ESP, в первую очередь ОЗУ, медленную работу и небольшое количество готовых библиотек.

Есть еще ряд прошивок, которые позволяют настроить работу модуля через WEB-интерфейс. Например коммерческая HOME-SMART, работа с которой описана мною здесь. Данная прошивка дает быстрый старт на ряд применений, но, к сожалению, никаких возможностей к расширению и созданию собственных алгоритмов работы не имеет. Хотя авторы очень быстро развивают возможности данной прошивки и в новой версии недавно появилась возможность разработки собственных  модулей на Си к ней.

И, наконец, я подошел к еще одному способу программирования ESP8266 — из среды Arduino IDE. Мне, реализовавшему десятки проектов в этой среде, такой способ работы очень понравился. К тому же, большая часть библиотек для Arduino, не использующий внутренние порты и прочие аппаратные возможности микроконтроллера, отлично работают и на ESP-модулях.

Подключение и настройка ESP8266 в среде Arduino IDE

Очень хорошо работа с ESP8266 в среде Ардуино IDE описана в этой статье.

Хочу немного добавить, что купленные мною модули ESP-07 распаянные на платы-адаптеры уже практически готовы к использованию. Подключаем TX/RX и GND к TTL-USB конвертеру, например, такому. Подключаем питание 3.3В к VCC. Для загрузки прошивки GPIO0 присоединяем к земле. Собственно и все. Подключить GPIO0 и RESET к данному конвертеру у меня не получилось, но это оказалось не сильно нужно.  При подсоединенном GPIO0 к земле ESP находится в режиме загрузки прошивки во флэш-память, но после загрузки происходит запуск программы без отсоединения данного GPIO. Это позволяет вполне комфортно отлаживать свою программу. Нужно перед загрузкой только перезагрузить модуль передергиванием питания или кратковременно подав на вывод RESET на землю. Я припаял для этого специальную кнопку

Кнопка RESET для Arduino IDE

На снимке виден еще и припаянный конденсатор, так как были подозрения неустойчивой работы ESP-шки от пульсаций по питанию. Два последних модуля вполне стабильно работают без этого конденсатора.

Итак модуль подключен, среда настроена. Для ES07 все настройки ESP8266 ставятся «по умолчанию»:

Настройка ES-07

 Пример разработки прошивки для ESP8266 в Ardiuno IDE

Итак, среда установлена и настроена. Модуль подключен и тестовое «Hello, World!» грузится.

Теперь разработаем что-нибудь полезное. Например, часы на четырехразрядном семисегментном индикаторе с микросхемой TM1637.

Дисплей на TM1637

Дисплей на TM1637

Для работы с этим модулем я взял готовую библиотеку для Ардуино DigitalTube. «По умолчанию», дополнительные библиотеки устанавливаются в каталог: «Мои документы\Arduino\libraries\». Чтобы оправдать использование WiFi-модуля, эти часы буду синхронизировать время с NTP сервером в интернете.

Подключаем ESP, дисплей к CLK -> GPIO4, DIO ->GPIO5, стабилизатор 3.3В и USB-TTL конвертер макетными проводами

ESP8266 + TM1637

Загружаем прошивку: Скетч для ESP8266 часов NTP.
Настраиваем параметры своей точки доступа: AP_SSID и AP_PASS, свою таймзону TIMEZONE. У меня установлена TIMEZONE 5 для Перми/Екатеринбурга. Для Москвы будет TIMEZONE 3.
Функцией tm1637.set(2) устанавливаем необходимую яркость индикатора от 0 до 7.

Получаем готовые часы:
Часы с NTP

Собирать все это в корпусе я не буду, так как это заготовка для будущего проекта.

Пока работал, кот следил за процессом через зеркало

Кот следит за процессом

Скетч для ESP8266 часы с NTP
5.8 KiB
3482 Downloads
Детали
Вы можете оставить отзыв или трекбек со своего сайта.

59 комментариев на «Программируем ESP8266 в Arduino IDE»

  1. Egor:

    Посмею поправить. На Homes-Smart появился редактор кода. Пока в тесте, но уже можно как-то прописывать свой алгоритм.

  2. Александр:

    Здравствуйте.
    Подскажите пожалуйста, где брали такую удобную плату питания.
    Спасибо и всего доброго.

  3. Алексей:

    Доброе время!
    Что я делаю не так?
    ntp-clock.ino:1:25: fatal error: ESP8266WiFi.h: No such file or directory

    • Alexey Alexey:

      Либо не установили пакет ESP8266 Core for Arduino IDE
      Либо плату ESP8266 не выбрали в контроллерах

  4. Евгений:

    Почему то отказывается компилироваться скетч. Выдает вот такое…

    ntp-clock:9: error: ‘TM1637’ does not name a type
    ntp-clock.ino: In function ‘void setup()’:
    ntp-clock:52: error: ‘tm1637’ was not declared in this scope
    ntp-clock.ino: In function ‘void DisplayTime()’:
    ntp-clock:134: error: ‘tm1637’ was not declared in this scope
    ‘TM1637’ does not name a type

    делал все по вашей инструкции, не пойму в чем дело.

    • Alexey Alexey:

      У вас не находится библиотека TM1637
      Проверьте путь к пользовательским библиотекам и поместите туда TM1637

  5. Алексей:

    Что делать если в среде нету пункта «generic esp8266 module» ?
    Скачал самую свежую только что … всё равно нет..
    Залез в boards manager — там тоже ничего похожего нет… ввёл в поиск ESP — результат нулевой (((
    Посоветуйте как быть?

  6. Александр:

    Можно вопрос. Установил Arduino 1.7.7 — так там в настройках не нахожу поле «Additional Boards Manager URLs» , куда надо вставить ссылку http://arduino.esp8266.com/stable/package_esp8266com_index.json

    Ну нет там этого поля. Может надо установить версию Arduino 1.6.5 ?

    Спасибо.

  7. Serg:

    Скажите, как часто обновляется время с сервера?
    Как часто включается/долго работает ESP?

    • Alexey Alexey:

      Делаю сейчас проект NTP-часов.
      Время обновляю раз в 2ч. Включается ESP секунд 5 (инициализация библиотек), подключается к WiFi секунд 5-10. Перезагрузки идут очень редко

  8. Николай:

    Здравствуйте! Скажите, можно ли подключить OLED SH1106? Везде библиотеки только для SSH1306! Мучаюсь уже 2 недели, но рабочих библиотек так и не нашел! Спасибо!

  9. DenisSh:

    Добрый день,
    Меня интересует есть ли готовое решение чтобы передавать get/post запрос на мой сервер. На входе в esp будет два числа по uart — значение и id которые должны быть переданы на сервер например так http://109.109.102.82/meter/current_data.php?id='023932'&data='64343‘. Вам, как бывалому человеку в этой теме, легче сориентироваться где можно поискать ответ или людей которые занимались подобными задачами. Подскажите куда смотреть.

    • Alexey Alexey:

      В Arduino IDE если программировать ESP-шку как то так будет

      WiFiClient client;
      IPAddress ip1(109,109,102,82);;
      if (!client.connect(ip1, 80)) {
      Serial.println("Connection %s failed");
      return false;
      }
      String out = ""GET http://109.109.102.82/meter/current_data.php?id=023932&data=64343 HTTP/1.0\r\n\r\n";
      client.print(out);
      return true;

      Через AT команды по другому, но примеров навалом

  10. Анатолий:

    Доброго времени суток.

    Решил так же поработат с Esp 8266.
    Хотелос повторить Ваши опыты.

    При реализации данного, столкнулся с ошибкой:

    Arduino: 1.6.7 (Windows 7), Плата:»Generic ESP8266 Module, Serial, 80 MHz, 40MHz, DIO, 115200, 512K (64K SPIFFS), ck, Disabled, None»

    J:\###YANDEX DISK###\===TECH===\=Arduino=\=Arduino=\=ПРОВЕРР?РўР¬=\NTP\ntp-clock\ntp-clock.ino: In function ‘void setup()’:

    ntp-clock:44: error: ‘ConnectWiFi’ was not declared in this scope

    J:\###YANDEX DISK###\===TECH===\=Arduino=\=Arduino=\=ПРОВЕРР?РўР¬=\NTP\ntp-clock\ntp-clock.ino: In function ‘void loop()’:

    ntp-clock:68: error: ‘GetNTP’ was not declared in this scope

    ntp-clock:79: error: ‘DisplayTime’ was not declared in this scope

    J:\###YANDEX DISK###\===TECH===\=Arduino=\=Arduino=\=ПРОВЕРР?РўР¬=\NTP\ntp-clock\ntp-clock.ino: In function ‘bool GetNTP()’:

    ntp-clock:146: error: ‘sendNTPpacket’ was not declared in this scope

    exit status 1
    ‘ConnectWiFi’ was not declared in this scope

    Подскажите, что я не учел?

    • Alexey Alexey:

      Попробуйте 1.6.5 IDE. Под 1.6.7 раньше возникали проблемы при сборке

      • Анатолий:

        Спасибо! Помогло. Видать баг был со сборкой IDE.

        • Alexey Alexey:

          А какая версия Core ESP была?
          Вроде в последних сделали совместимость с IDE 1.6.7

          • Анатолий:

            Вы уж простите за глупые вопросы. Но, это мой первый опыт с данным модулем.

            Если я вас верно понял, 2.0.0.

            Теперь не загрузает скетч из IDE:

            error: failed reading byte
            warning: espcomm_send_command: cant receive slip payload data
            error: failed reading byte
            warning: espcomm_send_command: cant receive slip payload data
            error: failed reading byte
            warning: espcomm_send_command: cant receive slip payload data
            error: failed reading byte
            warning: espcomm_send_command: cant receive slip payload data
            error: failed reading byte
            warning: espcomm_send_command: cant receive slip payload data
            error: failed reading byte
            warning: espcomm_send_command: cant receive slip payload data
            error: failed reading byte
            warning: espcomm_send_command: cant receive slip payload data
            error: failed reading byte
            warning: espcomm_send_command: cant receive slip payload data
            error: failed reading byte
            warning: espcomm_send_command: cant receive slip payload data
            warning: espcomm_sync failed
            error: espcomm_open failed
            error: espcomm_upload_mem failed
            Invalid library found in C:\Program Files (x86)\Arduino\arduino-1.6.5-r5\libraries\Ethernet: Library can’t use both ‘src’ and ‘utility’ folders.
            Invalid library found in C:\Program Files (x86)\Arduino\arduino-1.6.5-r5\libraries\WiFi: Library can’t use both ‘src’ and ‘utility’ folders.
            Invalid library found in C:\Program Files (x86)\Arduino\arduino-1.6.5-r5\libraries\Ethernet: Library can’t use both ‘src’ and ‘utility’ folders.
            Invalid library found in C:\Program Files (x86)\Arduino\arduino-1.6.5-r5\libraries\WiFi: Library can’t use both ‘src’ and ‘utility’ folders.

  11. Анатолий:

    И еще вопрос по экрану, он сразу при подаче питания начитает работать, независимо от сигналов на входах? А то мой что то молит, подозреваю м.б. нерабочий пришел.

    • Alexey Alexey:

      CH_PD через резистор к + чтобы работал
      GPIO0 к земле чтобы программировался

      • Анатолий:

        Использую плату переходник, даже слегка ее доработал, кнопкой на RESET, там на CH_PD резистор есть, GPIO0 на землю замкнул. Грузит и в конце выдает то чтовыше написал.

      • Алексей:

        Добрый день! Необходимо написать прошивку под ESP8266 за материальное вознаграждение 20000р.! Пожалуйста, свяжитесь со мной в скайпе alex268040

  12. Анатолий:

    Тоже решил повторить часики но ESP8266-12E часто перезагружается, в консоли такое пишет:

    Time: 23:24
    Time: 23:24
    Time: 23:24

    Exception (0):
    epc1=0x4020bac0 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000

    ctx: sys
    sp: 3ffffd80 end: 3fffffb0 offset: 01a0

    >>>stack>>>
    3fffff20: 3ffeeee8 000001cd 000001cd 4010020c
    3fffff30: 00000000 00000000 3fff0eac 401008c8
    3fffff40: 40223f21 3fff0eb4 3fff0eb4 40107218
    3fffff50: 4021937f 00000196 00000000 4021938d
    3fffff60: 40218b34 3fff0eb4 3fff091c 40223c7d
    3fffff70: 00000000 3ffee5f0 021241ad 60000600
    3fffff80: 40223cc2 3fffdab0 00000000 3fffdcb0
    3fffff90: 3ffee600 3fff0eb4 00000000 40226fd2
    3fffffa0: 40000f49 3fffdab0 3fffdab0 40000f49
    <<<stack<<<

    ets Jan 8 2013,rst cause:4, boot mode:(3,7)

    wdt reset
    load 0x4010f000, len 1264, room 16
    tail 0
    chksum 0x42
    csum 0x42
    ~ld

    Free Memory: 45680

    Connecting to: TP-LINK_7C222C
    3
    WiFi connect true: 192.168.1.104/255.255.255.0/192.168.1.1
    Starting UDP
    Local port: 2390
    sending NTP packet…
    packet received, length=48
    Unix time = 1458861854
    Time: 23:24
    Time: 23:24
    Time: 23:24

    не подскажите, в чем может быть проблема?

    • Alexey Alexey:

      Вы столкнулись со срабатыванием сторожевого таймера WDT.
      Это происходит, когда ESP не может перейти на обработку WiFi Слишком долго, по его мнению
      Может он с точкой доступа не может соединится и «подвисает» при этом
      Попробуйте в цикле loop() поставить delay() побольше и почаще.

  13. Эдуард:

    повторил часики, только мне пришли из Китая индикаторы на 595 регистрах, пришлось слегка поправить код и до кучи добавил датчик DS18b20, мой первый опыт с 8266, правда заботало только на IDE 1.6.5, на 1.6.7 и 1.6.8 не компелировалось, а так штука прикольная 🙂

  14. Дмитрий:

    На вашу плату питания подается 12В? Это блок питания от телефона?

  15. Дмитрий:

    На вид плата питания AMS1117, а вот что за черный кабель к ней идет?

    • Alexey Alexey:

      Черный кабель — это 5В через разъем питания. 12В входящих LM1117 не осилит. Сгорит с таким током потребления, а потом спалит ESP-шку

  16. Дмитрий:

    А отчево он запитан — 5В?

    • Alexey Alexey:

      От чего угодно. От USB или блока питания, зарядника от телефона, повербанка

  17. Дмитрий:

    У вас запитано от зарядника? Не нашел у нас в городе зарядник от телефона, чтобы подходил к таким блокам питания или вы на али его заказывали?

  18. Сергей:

    Интересно, возможно ли использовать модуль как NTP-клиент для таких часиков http://www.rusimpuls.ru/production/ofisnye-chasy/.

    • Alexey Alexey:

      Даже если и есть там синхронизация времени, то протокол, скорее всего, закрытый.
      Да и дороговаты часики.
      за 3000-4000 рублей можно собрать часики в красивом корпусе со всеми теми же функциями но подключенные к интернету и настраиваемые через встроенный WEB сервер

  19. Павел:

    Здравия желаю:) !
    Вопросы:
    1. Есть ли зависания при работе девайса? Публикации почти год наверняка есть статистика на предмет зависаний? Нужно «собрать и забыть», в смысле оставить работать, чтобы девайс не требовал к себе внимания. Можно на это рассчитывать? Беглый просмотр инфы по esp8266 настораживает количеством сообщений о зависаниях. У этих замечательных часов возможен мертвый висяк? Может это только в старых моделях и уже пофиксили??? Это основной вопрос. Жду esp-13f с алиэкспресс.

    2. Можно ли добавить сюда вэб-морду, обязательно с логином/паролем, в которой непродвинутый пользователь, зайдя по wi-fi, смог бы менять:
    — имя ssid и пароль,
    — имя сервера ntp
    — и по возможности яркость?

    3. Можно ли сделать переключение яркости по времени, с 23ч до 6ч яркость низкая, а днем высокая ? И тоже бы интервалы времени в вэб морду бы :)… Регулировка с датчиком освещенности не интересна.

    4. Выложенный на странице скетч ntp-clock.ino — это свежая версия, может что-то уже правили/ фиксили за год?

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

    6. Не совсем понятно — что будет если Инета нет долго (сутки, неделя)? Часы в цикле будут перезагружаться? Что при этом на дисплее будет отображаться?

    Искреннее СПАСИБО за публикацию!!!

    Извините пожалуйста за «многабуков»!
    Очень интересная тема, познания в програмировании не великие, поэтому вопросы.

    • Alexey Alexey:

      1. Зависания на ESP очень редкие, связаны с плохим питанием или внешними помехами, а вот перезагрузки от его внутреннего WDT-вещь довольно распостраненная
      2,3,4 Да. Есть несколько свежих проектов, в том числе и часов с WEB-мордой, настройкой яркости и прочими фенечками. Будет время, обзор напишу обязательно
      5,6 В некоторых версиях поставил еще и DS3231. Часы могут работать сколь угодно долго без Инета, а с ним только подстраиваются. WiFi в них интересен только как конфигуратор параметров через WEB

  20. Павел:

    Спасибо! Дико ждем обзор на DS3231 с синхронизацией по ntp и web-мордой. И еще бы индикатор покрупнее бы 🙂 и модель бы его заранее знать бы чтобы уже заказать :). К заказаной ранее esp дозаказал на Али еще DS3231, удивила цена вопроса =34руб с бесплатной доставкой.

    PS «мечты сбываются» 🙂 !

  21. Олег:

    Добрый день!
    Хочу сделать такие часы как у вас только на ESP8266-01 и тут возникает пару вопросов.
    1. У 8266-01 2 GPIO(0 и 2), важно как им из них вешать CLK или DIO?
    2. В коде TM1637_CLK 4 заменить на 0, а TM1637_DIO 5 на 2?
    3. Как правильно прошивать eSP — когда все потребители (часы в данном случае) отключены ?
    4. После окончания прошивки модуля — убрать питание и снять GPIO0 с GND (TTL UART кроме прошивки не нужен?) и соединить уже часами?

    Спасибо.

    • Monk:

      Немного развлекся с кодом автора.
      ESP8266 — 07, индикатор LCD 24×2

      #include
      #include
      #include
      #include
      #define DS3231_SCL 1 //тут нужные пины для и2си
      #define DS3231_SDA 3 //тут нужные пины для и2си

      LiquidCrystal_I2C lcd(0x27, 24, 2);
      #define AP_SSID «точкадоступа»
      #define AP_PASS «парольточкидоступа»

      #define TIMEZONE 3 //—— Москва

      char ssid[] = «ссайди»; // your network SSID (name)
      char pass[] = «ипаролькней»; // your network password

      unsigned int localPort = 2390; // local port to listen for UDP packets
      unsigned long ntp_time = 0;
      long t_correct = 0;
      unsigned long cur_ms = 0;
      unsigned long ms1 = 0;
      unsigned long ms2 = 10000000UL;
      unsigned long t_cur = 0;
      bool points = true;
      unsigned int err_count = 0;

      IPAddress timeServerIP;
      const char* ntpServerName = «time.nist.gov»;

      const int NTP_PACKET_SIZE = 48;
      byte packetBuffer[ NTP_PACKET_SIZE];
      WiFiUDP udp;

      void setup()
      {
      Wire.begin(DS3231_SDA, DS3231_SCL); //тут запускаем и2си на наших пинах
      lcd.begin();
      lcd.setCursor(0, 0);
      lcd.print(«Free Memory: «);
      lcd.print(ESP.getFreeHeap());
      delay(2000);

      // Соединение с WiFi
      if( !ConnectWiFi(AP_SSID,AP_PASS) ){
      lcd.clear();
      lcd.print(«Reset ESP8266 …»);
      delay(2000);
      ESP.reset();
      }
      delay(1000);

      // Инициализауия UDP соединения с NTP сервером
      lcd.clear();
      lcd.print(«Starting UDP, port: «);
      udp.begin(localPort);
      delay(200);
      lcd.print(udp.localPort());
      delay(2000);
      }

      void loop(){
      cur_ms = millis();
      t_cur = cur_ms/1000;
      // Каждые 60 секунд считываем время в интернете
      if( cur_ms 60000 ){
      err_count++;
      // Делаем три попытки синхронизации с интернетом
      if( GetNTP() ){
      ms2 = cur_ms;
      err_count = 0;
      t_correct = ntp_time — t_cur;
      }
      }

      // Каждые 0.5 секунды выдаем время 500
      if( cur_ms 1000 ){
      ms1 = cur_ms;
      ntp_time = t_cur + t_correct;
      DisplayTime();
      points = !points;
      }

      // Если нет соединения с интернетом, перезагружаемся
      if( err_count > 10 ){
      lcd.clear();
      lcd.print(«NTP connect false»);
      lcd.setCursor(0, 1);
      lcd.print(«Reset ESP8266 …»);
      delay(2000);
      ESP.reset();

      }
      delay(100);
      }

      /**
      * Соединение с WiFi
      */
      bool ConnectWiFi(const char *ssid, const char *pass) {
      // Три попытки соединения по WiFi
      for( int i=0; i<3; i++){
      lcd.clear();
      lcd.print("Connecting to: ");
      lcd.print(ssid);
      WiFi.begin(ssid,pass);
      delay(2000);
      // Максиммум 12 раз проверка соединения
      for( int j=0; j<12; j++ ){
      if (WiFi.status() == WL_CONNECTED) {
      lcd.setCursor(0, 1);
      lcd.print("IP ");
      lcd.print(WiFi.localIP());
      //lcd.print(" mask ");
      //lcd.print(WiFi.subnetMask());
      //lcd.print(" gate ");
      //lcd.println(WiFi.gatewayIP());
      delay(5000);
      return true;
      }
      lcd.setCursor(0, 0);
      lcd.print(WiFi.status());
      delay(5000);
      }
      }
      lcd.setCursor(0, 1);
      lcd.print("Connect WiFi failed …");
      return false;
      }

      /**
      * Выдача текущего времени на индикатор
      */
      void DisplayTime(void){
      uint16_t m = ( ntp_time/60 )%60;
      uint16_t h = ( ntp_time/3600 )%24;
      lcd.setCursor(0, 1);
      lcd.print("Time: ");
      lcd.print(h);
      lcd.print(":");
      lcd.println(m);
      }

      /**
      * Посылаем и парсим запрос к NTP серверу
      */
      bool GetNTP(void) {
      WiFi.hostByName(ntpServerName, timeServerIP);
      sendNTPpacket(timeServerIP);
      delay(1000);

      int cb = udp.parsePacket();
      lcd.setCursor(0, 0);
      if (!cb) {
      lcd.print("No packet yet ");
      //Serial.println("No packet yet");
      return false;
      }
      else {
      lcd.print("packet received, length=");
      lcd.println(cb);
      // Читаем пакет в буфер
      udp.read(packetBuffer, NTP_PACKET_SIZE);
      // 4 байта начиная с 40-го сождержат таймстамп времени — число секунд
      // от 01.01.1900
      unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
      unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
      // Конвертируем два слова в переменную long
      unsigned long secsSince1900 = highWord << 16 | lowWord;
      // Конвертируем в UNIX-таймстамп (число секунд от 01.01.1970
      const unsigned long seventyYears = 2208988800UL;
      unsigned long epoch = secsSince1900 — seventyYears;
      // Делаем поправку на местную тайм-зону
      ntp_time = epoch + TIMEZONE*3600;
      lcd.setCursor(0, 0);
      lcd.print("Unix time = ");
      lcd.print(ntp_time);
      }
      return true;
      }

      /**
      * Посылаем запрос NTP серверу на заданный адрес
      */
      unsigned long sendNTPpacket(IPAddress& address)
      {
      lcd.print("sending NTP packet…");
      // Очистка буфера в 0
      memset(packetBuffer, 0, NTP_PACKET_SIZE);
      // Формируем строку зыпроса NTP сервера
      packetBuffer[0] = 0b11100011; // LI, Version, Mode
      packetBuffer[1] = 0; // Stratum, or type of clock
      packetBuffer[2] = 6; // Polling Interval
      packetBuffer[3] = 0xEC; // Peer Clock Precision
      // 8 bytes of zero for Root Delay & Root Dispersion
      packetBuffer[12] = 49;
      packetBuffer[13] = 0x4E;
      packetBuffer[14] = 49;
      packetBuffer[15] = 52;
      // Посылаем запрос на NTP сервер (123 порт)
      udp.beginPacket(address, 123);
      udp.write(packetBuffer, NTP_PACKET_SIZE);
      udp.endPacket();
      }

  22. Павел:

    Собрал. Работают, но странно. Пару минут после включения показывают время точно, ушел минут на 5-10, возвращаюсь — отстают точно на 2 минуты. Выключаю, включаю питалово, наблюдаю безотрывно за индикатором, сравнивая с точными часами с секундами. Опять пару минут идут точно, потом в 10:14, естественно должно быть следующее значение 10:15, но вместо 10:15 на индикаторе на долю секунды отображается 10:13 и дальше опять 10:14, вместо 10:15. В скетче менял только ssid, пароль и таймзону. Может мне esp или 1637 глючные попались? 1117 с ali тоже странный — на входе 5.65в, на выходе только 3.25 и под нагрузкой и без. Проверить в терминале, что там в ESP твориться пока не было времени, видимо в след. выходные.

  23. Сергей:

    Спасибо за проект. Все сразу заработало)))

  24. Михаил:

    Доброго дня! Подскажите пожалуйста, как создать соединение по UDP между двумя устройствами ESP8266. И ещё вопрос, как в этом модуле с защитой, если я прошил его, чтобы слить прошивку было невозможно. Спасибо!

    • Alexey Alexey:

      1. Ну на одном поднять сервер UDP, на втором клиента. Примеры клиента есть Arduino IDE. Чем HTTP не устраивает, который уже реализован в библиотеках?

      2. Никак. Программатором я с внешней микросхемы могу скачать любую прошивку и залить ее в другую ESP
      Можно как то попытаться зашифровать данные и хранить ключ на внешнем ресурсе. Тогда программа просто не будет работать

  25. edgi:

    Здравствуйте Алексей. Часто читаю Ваш сайт. Пытаюсь начать программировать, но нигде нет обучения на youtube много видео якобы «программирование esp8266» начинаешь смотреть, а там вводная часть как подключить как прописать стройки Arduino IDE а нужно именно программирование прям по строчкам что бы сделать то и то надо написать то-то и объясняется почему это, а не другое. Единственное что более внятное нашел: https://esp8266.ru/arduino-ide-esp8266/#func на енглише наверняка есть все но я средненько с ним. По примерам как то учится не выходит.

  26. Серж Мур:

    Алексей, написал Вам на почту, но Вы не видите. Поэтому спрошу здесь.
    Проект повторил, всё работает. Но хотелось бы немного расширить функционал — ввести датчик DHT22 (чтобы на дисплее попеременно отображалось время/температура/влажность с настраиваемым временем отображения). И ввести в скетч отправку на сервер Мажордомо в формате:
    hostname:NAME;dhtt1:25.7;dhth1:38.4;
    Помогите, пожалуйста, сам я не программист, только пытаюсь что-то
    сделать.
    ПС. Умный дом у меня работает полгода на Orange PiPC (Armbian). Наполняю потихоньку датчиками. Этот проект NTP часов тоже будет частью Мажордомо.
    ППС. На Муське тоже регулярно читаю Ваши обзоры, сам иногда пишу.

Ваш отзыв