
Эта функция доступна уже в версии 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
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.
Это может быть интересно
Стробоскоп для автомобиля
Одним из популярных решений светового тюнинга автомобиля, мотоцикла или скутера стал эффект – “полицейский стробоскоп“. На база платы ch-c0050 реализовано несколько проектов. В этой статье приводятся две версии программы. Рекомендации …ESP32-первое знакомство
Музыкальная тема к статье, слушаем: Настало время познакомиться c ESP32 и для меня, для этого я приобрел в ГАММЕ отладочную плату с модулем ESP-WROOM-32 (ESP32-DevKitC). Первая задача, как он подключается, …OLED RET012864E/REX012864J
RET012864E/REX012864J ОЛЕД индикатор производитель Raystar-Optronics приобретался в http://www.microchip.ua/ к сожалению никакой информации на сайте поставщика нет. Поэтому решил работу с этой версией индикатора на драйвере SSD1305 предоставить на своем сайте. Так как есть ошибки …APA102 – светодиоды со встроенным драйвером и SPI интерфейсом
APA102 В 2014 году фирма Shenzhen Led Color Optoelectronic Co., Ltd http://www.szledcolor.com/ начала производство светодиодов на драйвере APA102. Это серия так называемых светодиодов со встроенным драйвером. Основной особенностью этих светодиодов, что …MCC PIC24 – модуль OUTPUT COMPARE – режиме ШИМ
Во многих системах управления, для формирования управляющих сигналов требуется модуль ШИМ, он позволяет не только формировать импульсы заданной длительности, но и с применением обычного RC фильтра строить простые ЦАП. MCC …CAN – Controller Area Network
Controller Area Network (CAN) первоначально был создан немецким поставщиком автомобильных систем Робертом Бош в середины 1980-х для автомобильной промышленности как метод для обеспечения возможности надежной последовательной связи. Целью было сделать автомобили более надежными, безопасными и …Светодиоды со встроенным драйвером WS2812B
Производитель http://www.world-semi.com Краткое описание продукции фирмы Каталог продукции” catcatcat_ws_19 catcatcat_ws_15 catcatcat_ws_11 catcatcat_ws_07 catcatcat_ws_03 catcatcat_ws_18 catcatcat_ws_14 catcatcat_ws_10 catcatcat_ws_06 catcatcat_ws_02 catcatcat_ws_05 catcatcat_ws_09 catcatcat_ws_13 catcatcat_ws_17 catcatcat_ws_16 catcatcat_ws_12 catcatcat_ws_08 catcatcat_ws_04 catcatcat_ws_01 This jQuery slider was …Цифровой тахометр для автомобиля CH-С3300
Тахометр Ch-С3300 предназначен для индикации и контроля оборотов, времени работы и максимальных оборотов развиваемых двигателем во время поездки. Датчиком может использоваться как обычный контактный прерыватель или выход датчика холла автомобиля …USB K-L-line адаптер
USB K-L-line адаптер предназначен для связи персонального компьютера с диагностической шиной автомобиля – интерфейс ISO-9141. Этот проект предназначен для сборки недорого устройства с использованием специально для этой цели разработанной печатной …PIC18 – модуль DMA
Введение Модуль прямого доступа к памяти (DMA) предназначен для обслуживания передачи данных непосредственно между различными областями памяти без вмешательства процессора. Исключив при этом необходимость в интенсивной обработки прерываний процессором, …