Views: 6271
Эта функция доступна уже в версии 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.
Это может быть интересно
Самый простой индикатор уровня звукового сигналаViews: 6723 Демонстрационный проект создания индикаторов уровня с использованием WS2812B. Изучив этот проект вы сможете самостоятельно изготавливать и конструировать свои индикаторы уровня звукового сигнала. Дополнительно читайте статью Бегущие огни на …
Проект с использованием MCC часть 13Views: 1259 Так как используя MCC мы можем его использовать со своими библиотеками, поэтому настало время и свое создать. Для начала откроем наш заголовочный файл в нем очень много букв: По …
MTouch® Модуль Емкостной Библиотеки для MPLAB®X Code Configurator (MCC)Views: 1441 Введение MTouch ® Модуль Емкостной Библиотеки для MPLAB ® X Code Configurator (MCC) позволяет быстро и легко генерировать решение кода на Cи для емкостной сенсорной кнопки, датчика приближения и слайдера.
Altium Designer my Libraries, Project templates, System settings by Catcatcat V24.0 PROViews: 554 Назвемо цей варіант поновлення для професіоналів і не тільки. Що нового? 1. Повністю змінено структуру параметрів бази даних компонента. Це дозволило повноцінної роботи Актив ВОМ. Ви відразу отримуєте …
Модуль CAN в микроконтроллерах PIC18Views: 5998 Введение CAN последовательный интерфейс связи, который эффективно поддерживает распределенное управление в реальном масштабе времени с высокой помехозащищенностью. Протокол связи полностью определен Robert Bosch GmbH, в спецификации требований …
TDA7294 part 1Views: 506 TDA7294 має унікальні дані для створення підсилювачів звукової частоти HI-FI класу. Варіант застосування є конфігурація BRIDGE (мостова схема включення), де використовуються два TDA7294, як показано на схематичній діаграмі …
PIC32MZ – Core Timer (библиотека)Views: 588 Переработанные файлы от Microchip, библиотека для работы с Core Timer.
Мультизоновый индикатор-терморегулятор ch-c3010Views: 1390 Часто возникает необходимость получить информацию по температуре с множества точек контроля. Вам необходимо знать температуру в комнате, в коридоре, температуру на улице, а в погребе (или на балконе) …
JDY-62A Audio bluetooth moduleViews: 1924 Простой модуль для простого аудио блютуса. Встроенные подсказки на английском языке. Модуль включён, режим муте – после подачи питания. Контроль разряда батареи предупреждение что батарея разряжена и необходима …
Акриловый корпус для платы ch-4000Views: 872 Плата ch-4000 подходит для монтажа в корпуса на дин рейку, но для домашней автоматики необходимо что-то другое, поэтому был разработан корпус из акрила который позволит создавать настольные и настенные устройства. Корпус …