Views: 6229
Эта функция доступна уже в версии 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: 851 Еще один вариант, так сказать недоразумения Audio-bluetooth modules BK8000L (noname). Его отличительной маркировкой служат два отверстия в плате и надпись R2. Отличают его от модулей на чипе BK8000L, …
MPLAB® Harmony – или как это просто! Часть 1.Views: 3853 Часть первая – Установка Гармонии. Музыкальная тема к статье, слушаем: В начале запуска нового проекта и выбора микроконтроллера стоит задача правильно его сконфигурировать, прежде чем перейти к реализации …
Development board based on MCU PIC18F47Q84Views: 2774 PIC18F47Q84 Microcontroller Family with CAN Flexible Data Status: In Production.
LED драйвер TM1639Views: 2473 TМ1639 позволяет работать на матрицу 8*8 или 8 семисегметных индикаторов. Может работать как на индикаторы с общим катодом, но и есть возможность подключать общим анодом. Для управления драйвером …
CCP модуль для декодирования ИК-кодов пультов ДУViews: 1150 Множество изготовителей для своих пультов дистанционного управления на ИК лучах используют принцип широтно-импульсной модуляции. В таких кодах бит единицы представляется импульсом большой длительности, а ноль импульсом короткой длительности. …
ch-4000 – универсальная печатная платаViews: 1138 На смену устаревшей плате ch-3000, пришла новая ch-4000. Плату уже можно приобрести в магазине Ворон. Схема. Плата позволяет создавать таймеры, часы реального времени, регуляторы температуры, регуляторы влажности, вольтметры, …
Проект с использованием MCC часть 14Views: 1061 С выводом данных на дисплей мы справились (но могу сразу сказать библиотеку графики к этой статьи пришлось доработать, поэтому в этом проекте она обновлена). У нас на текущем …
LED модуль P10 (1R) V706AViews: 7968 Это еще одно чудо от китайского брата. Это монохромные матрицы, называются они P10 (1R) V706A, ну типа R-красные, но не верьте паяют светики и зеленые и синие, в общем …
Контроллер управления светодиодным освещением с дистанционным управлениемViews: 2071 Все активнее светодиоды входят в нашу жизнь. Всё эффективнее становится светодиодное освещение. Всё ниже опускаются цены. Всё больше появляется возможностей получения сочных цветов, простоты в управлении. Всё чаще …
Customs codes for exportViews: 378 Митні коди (HS Code) для надсилання посилок за кордон. Для відправки товару за кордон на сьогодні необхідно зазначати митні коди. Часто визначення коду займає багато часу. Для …