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 實時時鐘 |
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%
天氣:天色良好
沒有留言:
張貼留言