2018年2月12日 星期一

DIY - ESP8266:ESP-12F DS3231 實時時鐘 RTC 程式(六十八)

DIY - ESP8266:ESP-12F DS3231 實時時鐘 RTC 程式(六十八):

ESP8266 ESP-12F 實時時鐘(RTC / Real-Time Clock)是主要驅動 DS3231 模組和讀取 DS3231 的時間, DS3231 是使用積體電路匯流排(I²C / I2C:Inter-Integrated Circuit)來控制,由於 SSD1306 OLED 顯示屏,也是使用 I2C 匯流排,所以 DS3231 就不需要作初始化,祇要控制 I2C 的讀取地址是 0x68,便可以通過 I2C 匯流排讀寫 DS3231 芯片。

ESP8266 ESP-12F DS3231 實時時鐘
ESP8266 ESP-12F DS3231 實時時鐘 Time 結構體:
struct tm {
   int tm_sec;         /* seconds,  range 0 to 59               */
   int tm_min;        /* minutes, range 0 to 59                */
   int tm_hour;       /* hours, range 0 to 23                    */
   int tm_mday;      /* day of the month, range 1 to 31  */
   int tm_mon;        /* month, range 0 to 11                 */
   int tm_year;        /* The number of years since 1900 */
   int tm_wday;       /* day of the week, range 0 to 6    */
   int tm_yday;        /* day in the year, range 0 to 365  */
   int tm_isdst;        /* daylight saving time                 */
};

ESP8266 ESP-12F 讀取 DS3231 實時時鐘數據程式:
bool ICACHE_FLASH_ATTR ds3231_getTime(struct tm *time) {
           
            int loop;
            uint8 data[7];

            // start register address
            data[0] = DS3231_ADDR_TIME;
            if (!ds3231_send(data, 1)) {
                        return false;
            }

            // read time
            if (!ds3231_recv(data, 7)) {
                        return false;
            }

            // convert to unix time structure
            time->tm_sec = bcdToDec(data[0]);
            time->tm_min = bcdToDec(data[1]);
            if (data[2] & DS3231_12HOUR_FLAG) {
                        // 12h
                        time->tm_hour = bcdToDec(data[2] & DS3231_12HOUR_MASK);
                        // pm?
                        if (data[2] & DS3231_PM_FLAG) time->tm_hour += 12;
            } else {
                        // 24h
                        time->tm_hour = bcdToDec(data[2]);
            }
            time->tm_wday = bcdToDec(data[3]) - 1;
            time->tm_mday = bcdToDec(data[4]);
            time->tm_mon  = bcdToDec(data[5] & DS3231_MONTH_MASK) - 1;
            time->tm_year = bcdToDec(data[6]) + 100;
            time->tm_isdst = 0;
            return true;      
}

ESP8266 ESP-12F DS3231 實時時鐘顯示時間
2018年 2月 12日 天氣報告
氣溫:12.9@ 20:10
相對濕度:百分之 63%
天氣:天色良好

沒有留言:

張貼留言