2018年2月13日 星期二

DIY - ESP8266:ESP-12F DS3231 實時時鐘同步 SNTP 網路時鐘程式(六十九)

DIY - ESP8266:ESP-12F DS3231 實時時鐘同步 SNTP 網路時鐘程式(六十九):

其實 DS3231 是一枚非常準確的實時時鐘(RTC / Real-Time Clock)芯片,它的精確度在 0°C 到 40°C 為 ±2ppm,在 -40°C 至 85°C 精確度為 ±3.5ppm,年誤差約 1分鐘,但 NTP / SNTP (網路時間協定 / 簡單網路時間協定)的時鐘就更加準確了,所以如果能夠用 NTP/SNTP 的時鐘來調校 / 同步(Synchronization)DS3231 實時時鐘,那麼 DS3231 實時時鐘便會變的更準確!

ESP8266 ESP-12F DS3231 實時時鐘同步網路時鐘
ESP-12F DS3231 實時時鐘同步網路時鐘程式結合了 DS3231 和 SNTP 程式,祇要先讀取 DS3231 的時間,然後對比 SNTP 的的時間,如果有誤差,便調校 DS3231 實時時鐘便可以。

ESP8266 ESP-12F DS3231 實時時鐘同步網路時鐘(未同步)
ESP8266 ESP-12F DS3231 實時時鐘同步網路時鐘(同步)
ESP8266 ESP-12F DS3231 實時時鐘程式:
// Check DS3231 and NTP are same or not
   if (timestamp != ds3231_timestamp){
       ds3231_setTime(t);
      ds3231_syn = 1;
}
 

ESP8266 ESP-12F DS3231 實時時鐘設定時間程式:
bool ICACHE_FLASH_ATTR ds3231_setTime(struct tm *time) {
           
uint8 data[8];

os_sprintf(dsp_buffer, "Set Time1=%02d:%02d:%02d %04d/%02d/%02d (%d)\r\n",
                time->tm_hour,
                time->tm_min,
                time->tm_sec,
                time->tm_year,
                time->tm_mon,
                time->tm_mday,
                time->tm_wday);
                ets_uart_printf(dsp_buffer);

            // start register
            data[0] = DS3231_ADDR_TIME;

            // time/date data
            data[1] = decToBcd(time->tm_sec);
            data[2] = decToBcd(time->tm_min);
            data[3] = decToBcd(time->tm_hour);
            data[4] = decToBcd(time->tm_wday + 1);
            data[5] = decToBcd(time->tm_mday);
            data[6] = decToBcd(time->tm_mon + 1);
            data[7] = decToBcd(time->tm_year - 100);
            return ds3231_send(data, 8);

}
 

ESP8266 ESP-12F DS3231 實時時鐘同步網路時鐘
2018年 2月 13日 天氣報告
氣溫:14.4@ 21:00
相對濕度:百分之 60%
天氣:天色大致良好

沒有留言:

張貼留言