![](https://catcatcat.d-lan.dp.ua/wp-content/uploads/2018/04/ESP8266_catcatcat-300x300.jpg)
Views: 5831
Эта функция доступна уже в версии 1.6.1.
Для многих приложений, необходимо часы реального времени, если в вашем проекте есть модуль WiFI ESP8266, то легко можно сделать следующим образом.
Процедура описывает полный цикл подключения к роутеру WIFI подключение к серверам, получение данных времени конвертация его в двоично десятичный форма, для часов реального времени и отключения от роутера.
- AT+CWMODE_CUR=1 – настройка режим станции.
- AT+CIPMUX=0 – установить режим одного соединения.
- AT+CWJAP_CUR=”логин вашего роутера”,”пароль вашего роутера” – подключение к роутеру.
- AT+CIPSNTPCFG=1,3,”0.ua.pool.ntp.org”,”1.ua.pool.ntp.org”,”2.ua.pool.ntp.org” – вариант подключения к часовым серверам .(*1)
- AT+CIPSNTPTIME? – запрос времени.
ESP8266 – вернет время, день недели и дату в следующем формате:
Если не получено данных:
+CIPSNTPTIME:Thu Jan 01 00:00:00 1970
И если данные получены:
+CIPSNTPTIME:Wed Mar 18 12:35:17 2018
После получения времени, можно отключиться от сети.
- AT+CIPSNTPCFG=0 отключиться от серверов
- AT+CWQAP отключиться от роутера
- При желании можно перевести модуль в спящий режим.
ПРИМЕЧАНИЕ!!! После подключения в серверам точного времени и перед командой чтения времени возможно придется сделать пауза она может быть более 3 секунд (это зависит от вашего провайдера сети)!!!
Дополнительно можно прочитать WiFi ESP8266 – AT команды связанные с функцией TCP/IP (v.1.6.1)
*1 Небольшое описание для команды +CIPSNTPCFG
Чтение времени
SNTP включить, часовой пояс 3 часовые сервера “0.ua.pool.ntp.org”,”1.ua.pool.ntp.org”,”2.ua.pool.ntp.org”
// для подключения к конкретным серверам
AT+CIPSNTPCFG=1,3,”0.ua.pool.ntp.org”,”1.ua.pool.ntp.org”,”2.ua.pool.ntp.org”
для подключения к китайским серверам, по умолчанию
AT+CIPSNTPCFG=1,3
AT+CIPSNTPCFG?
+CIPSNTPCFG:1,3,”cn.ntp.org.cn”,”ntp.sjtu.edu.cn”,”us.pool.ntp.org”
// прочитать время
AT+CIPSNTPTIME? // команда
+CIPSNTPTIME:Wed Apr 11 22:00:46 2018 // ответ
OK
в 16-ричном виде (обрезаны данные для удобства)
+CIPSNTPTIME:Wed Apr 11 22:02:48 2018
+ C I P S N T P T I M E : W e d A p r 1 1 2 2 : 0 2 : 4 8 2 0 1 8
2B 43 49 50 53 4E 54 50 54 49 4D 45 3A 57 65 64 20 41 70 72 20 31 31 20 32 32 3A 30 32 3A 34 38 20 32 30 31 38
месяц
Jan – January – Январь
Feb – February – Февраль
Mar – March – Март
Apr – April – Апрель
May – May – Май
Jun – June – Июнь
Jul – July – Июль
Aug – August – Август
Sep – September – Сентябрь
Oct – October – Октябрь
Nov – November – Ноябрь
Dec – December –Декабрь
дни недели
Fri – Monday-понедельник
Tue – Tuesday-вторник
Wed – Wednesday-среда
Thu – Thursday-четверг
Fri – Friday-пятница
Sat – Saturday-суббота
Sun – Sunday-воскресенье
Преобразуем в формат двоично десятичный для хранения в часах реального времени
input_buf откуда извлекаются текстовый данные
DS1340.buf[] – где храняться данные для записи в часы
DS1340.buf[0] Seconds
DS1340.buf[1] Minutes
DS1340.buf[2] Hours
DS1340.buf[3] Day
DS1340.buf[4] Date
DS1340.buf[5] Month
DS1340.buf[6] Year
Процедура, сначала читаем данные с часов, чтобы получить со временем флаги управления
потом читаем время от сервера (ESP должна быть подключен к инету)
записываем новые данные от сервера времени, с учетом коррекции флагов
и сохраняем в часы реального времени
Возвращает
1-если операция прошла корректно
0-если ошибка
в не подключено варианте к сети будут возвращать время
+CIPSNTPTIME:Thu Jan 01 00:00:00 1970
bool realtime (void) // чтение реального времени { bool errorconnect=0; // флаг ошибки обена работы с ESP uint8_t * ucazat ; // указатель на данные uint8_t mas[4]; // Чтение времени и даты от часов реального времени на устройстве readtime (); // подключиться к серверам AT+CIPSNTPCFG=1,3,"0.ua.pool.ntp.org","1.ua.pool.ntp.org","2.ua.pool.ntp.org" if(AT_COMMAND ((uint8_t *)"AT+CIPSNTPCFG=1,3,\"0.ua.pool.ntp.org\",\"1.ua.pool.ntp.org\",\"2.ua.pool.ntp.org\"",500)) { //------------------------------------- // задержка подбирается индивидуально, для вашего провайдера ClrWdt(); // сброс сторожевого таймера __delay_ms(1000); ClrWdt(); // сброс сторожевого таймера __delay_ms(1000); ClrWdt(); // сброс сторожевого таймера __delay_ms(1000); ClrWdt(); // сброс сторожевого таймера //------------------------------------- if(AT_COMMAND ((uint8_t *)"AT+CIPSNTPTIME?",20)) // - запрос времени! { ucazat = strstr (input_buf,":"); // ищем первый ":" (13 байт) получаем указатель на начало данных // день недели ucazat++; mas[0] = *ucazat++; mas[1] = *ucazat++; mas[2] = *ucazat++; mas[3] = 0; // преобразование имени месяца в цифру if(!strcmp (mas, "Mon")) mas[0] = 0; else if(!strcmp (mas, "Tue")) mas[0] = 1; else if(!strcmp (mas, "Wed")) mas[0] = 2; else if(!strcmp (mas, "Thu")) mas[0] = 3; else if(!strcmp (mas, "Fri")) mas[0] = 4; else if(!strcmp (mas, "Sat")) mas[0] = 5; else if(!strcmp (mas, "Sun")) mas[0] = 6; // загрузить день недели DS1340.buf[3] = mas[0]; // загрузить // месяц ucazat++; mas[0] = *ucazat++; mas[1] = *ucazat++; mas[2] = *ucazat++; mas[3] = 0; // преобразование имени месяца в цифру if(!strcmp (mas, "Jan")) mas[0]=1; else if(!strcmp (mas, "Feb")) mas[0]=2; else if(!strcmp (mas, "Mar")) mas[0]=3; else if(!strcmp (mas, "Apr")) mas[0]=4; else if(!strcmp (mas, "May")) mas[0]=5; else if(!strcmp (mas, "Jun")) mas[0]=6; else if(!strcmp (mas, "Jul")) mas[0]=7; else if(!strcmp (mas, "Aug")) mas[0]=8; else if(!strcmp (mas, "Sep")) mas[0]=9; else if(!strcmp (mas, "Oct")) mas[0]=10; else if(!strcmp (mas, "Nov")) mas[0]=11; else if(!strcmp (mas, "Dec")) mas[0]=12; DS1340.buf[5] = bin_decbin (mas[0]); // загрузить значение месяца // день - число месяца ucazat++; mas[0] = (uint8_t)((*ucazat++ - 0x30)<<4); // десятки mas[0] += (uint8_t)(*ucazat++ - 0x30); // единицы DS1340.buf[4] = mas[0]; // загрузить день - число месяца // часы ucazat++; mas[0] = (uint8_t)((*ucazat++ - 0x30)<<4); // десятки mas[0] += (uint8_t)(*ucazat++ - 0x30); // единицы DS1340.buf[2] &= 0b11000000; // очистить DS1340.buf[2] |= mas[0]; // записать часы // минуты ucazat++; mas[0] = (uint8_t)((*ucazat++ - 0x30)<<4); // десятки mas[0] += (uint8_t)(*ucazat++ - 0x30); // единицы DS1340.buf[1] = mas[0]; // записать минуты // секунды ucazat++; mas[0] = (uint8_t)((*ucazat++ - 0x30)<<4); // десятки mas[0] += (uint8_t)(*ucazat++ - 0x30); // единицы DS1340.buf[0] &= 0b10000000; // очистить DS1340.buf[0] |= mas[0]; // записать секунды // год ucazat++; ucazat++; ucazat++; mas[0] = (uint8_t)((*ucazat++ - 0x30)<<4); // десятки mas[0] += (uint8_t)(*ucazat++ - 0x30); // единицы DS1340.buf[6] = mas[0]; // записать год } else { errorconnect = 1; // нет связи } } else { errorconnect = 1; // нет связи } //------------------------------------------------------------------------------ if(!errorconnect) { savetime ();// Сохранение настроек календаря return 1; // выполнено } else { return 0; // ошибка } //------------------------------------------------------------------------------ }
В функции используются функции для чтения времени из часов реального времени и работы с UART через модуль DMA.
Это может быть интересно
Audio-bluetooth modules BK8000L (noname)
Views: 659 Еще один вариант, так сказать недоразумения Audio-bluetooth modules BK8000L (noname). Его отличительной маркировкой служат два отверстия в плате и надпись R2. Отличают его от модулей на чипе BK8000L, …LED модуль P10C4V12
Views: 3093 LED панели на обычных регистрах типа 74HC595. Они выпускаются как монохромные так двух и полно цветные, особенность, что они предназначены для текстовой информации и имеют один уровень яркости. Общую яркость …Сумеречное реле
Views: 1446 Реле управления освещением, датчик день-ночь – одним словом фотореле для управления освещением или формирования сигнала для системы умный дом о понижении или повышении освещенности относительно заданного уровня. Реле выполнено по классической схеме, конденсаторный блок питания, от сети переменного тока …Altium Designer my Libraries, Project templates, System settings by Catcatcat V23.09
Views: 303 September 2023 component base update. Release updates V. – 23_09 added new components. Changed the structure of the database. Configuration file name – DXPPreferences1.DXPPrf. Added project CLUBBEST_50_Light. …Проект с использованием MCC часть 07
Views: 970 Модуль PWM – широтно импульсная модуляция (ШИМ). ПИК контроллеры часто на борту имеют модули ШИМ. На их основе строятся многие узлы управления электро приводами. В нашем варианте мы …TDA7294 part 1
Views: 237 TDA7294 має унікальні дані для створення підсилювачів звукової частоти HI-FI класу. Варіант застосування є конфігурація BRIDGE (мостова схема включення), де використовуються два TDA7294, як показано на схематичній діаграмі …NS108-5050-16bit от Newstar
Views: 592 Кто уже использует в своих проектах адресуемые светодиоды хорошо знакомы с такими как WS2812 и им подобные. Эти светодиоды для управления используют однопроводную шину. Из-за этого пропускная способность …PIC18F25K42 – v. A001 – выявленные баги.
Views: 604 Модуль I2C Не работает при использовании в стандартной конфигурации MCC. Требует особой нестандартной конфигурации и управления для нормальной работы. Обойти Обход проблемы возможен библиотека см статью. Модуль ADC2 На …MTouch® Модуль Емкостной Библиотеки для MPLAB®X Code Configurator (MCC)
Views: 1187 Введение MTouch ® Модуль Емкостной Библиотеки для MPLAB ® X Code Configurator (MCC) позволяет быстро и легко генерировать решение кода на Cи для емкостной сенсорной кнопки, датчика приближения и слайдера.Trimax – кодирование и декодирование ИК-команд
Views: 2170 Первое, что надо понять назначение кнопок клавиш пульта, а также, что за кодирование реализовано в ИК- пульте. Для назначения клавиш обратимся к описанию, а для взлома кодирования воспользуемся …