ESP32使用PCF8563时钟模块进行网络校时
ESP32使用PCF8563時鐘模塊進行網(wǎng)絡(luò)校時
- 關(guān)于PCF8563時鐘模塊的介紹
- 接線
- 下載Arduino的PCF8563庫
- 上代碼
關(guān)于PCF8563時鐘模塊的介紹
????最近在做基于 esp32的點陣時鐘,需要對時鐘模塊進行選擇,現(xiàn)在用的最多的莫過于DS3231,這個模塊的特點是高精度,價格大概8元左右,但用為一個追求極致的創(chuàng)客來說,選擇最具備性價比的元件組合出最好的作品是每一個創(chuàng)客的終極目標,在頭條上一次偶然的機會看到了飛利浦 公司的PCF8563芯片,于是乎在某寶里查了一下價格,驚喜的發(fā)現(xiàn)只有2元,本著實踐出真知的原則,采購了一大堆元件,這其中就包括DS3231和PCF8563,那廢話不多說,兩個東西首先在體積上就不一樣,DS3231明顯大了一圈,因為PCF8563我買的是排針不焊接的版本,所以一直到今天才焊接上開始調(diào)試,讓我們來體驗這款高性比的產(chǎn)品吧。
接線
????關(guān)于esp32的開發(fā)環(huán)境在這里就不再贅述,不懂的同學(xué)請自行百度搜索,我目前是使用arduino ide來進行esp32的程序開發(fā),后續(xù)將轉(zhuǎn)戰(zhàn)vscode平臺用platformio進行開發(fā),貌似編譯速度以及編程體驗度都有大幅提高。那言歸正傳,首先讓大家了解一下PCF8563長什么樣:
PCF8563 是PHILIPS 公司推出的一款工業(yè)級內(nèi)含I2C總線接口功能的具有極低功耗的多功能時鐘/日歷芯片。PCF8563 的多種報警功能、定時器功能、時鐘輸出功能以及中斷輸出功能能完成各種復(fù)雜的定時服務(wù),甚至可為單片機提供看門狗功能。是一款性價比極高的時鐘芯片,它已被廣泛用于電表、水表、氣表、電話、傳真機、便攜式儀器以及電池供電的儀器儀表等產(chǎn)品領(lǐng)域。
我們可以看到PCF8563有6個針腳,其中SDA和SCL以及VSS、GND是必要的。細心的同學(xué)可能通過上圖看到了晶振,對,這個晶振保持這款芯片穩(wěn)定、準確的走時,配合這個價格,真是良心產(chǎn)品。好下面我們將這四個針腳連接esp32的GPIO口,接線如下:
| SDA | D21 |
| SCL | D22 |
| VCC | 3V3 |
| GND | GND |
下載Arduino的PCF8563庫
????這里我們下載I2C_BM8563庫:
上代碼
????下載完成之后我們可以在示例中看到這個時鐘模塊的各種用法,我將示例代碼作了本地化的修改,主要是采用了中國的時區(qū),替換了阿里云的校時服務(wù)器,除此以個將校時封閉成了獨立函數(shù),下面上代碼:
#include "I2C_BM8563.h" #include <WiFi.h>// RTC BM8563 I2C port // I2C pin definition for M5Stick & M5Stick Plus & M5Stack Core2 #define BM8563_I2C_SDA 21 #define BM8563_I2C_SCL 22// I2C pin definition for M5Stack TimerCam // #define BM8563_I2C_SDA 12 // #define BM8563_I2C_SCL 14I2C_BM8563 rtc(I2C_BM8563_DEFAULT_ADDRESS, Wire1);const char* ntpServer = "ntp.aliyun.com";void setup() {// Init SerialSerial.begin(115200);delay(50);Wire1.begin(BM8563_I2C_SDA, BM8563_I2C_SCL);// Init RTCrtc.begin();GetNtpTime(); }void loop() {I2C_BM8563_DateTypeDef dateStruct;I2C_BM8563_TimeTypeDef timeStruct;// Get RTCrtc.getDate(&dateStruct);rtc.getTime(&timeStruct);// Print RTCSerial.printf("%04d/%02d/%02d %02d:%02d:%02d\n",dateStruct.year,dateStruct.month,dateStruct.date,timeStruct.hours,timeStruct.minutes,timeStruct.seconds);// Waitdelay(1000); }void GetNtpTime(){ //獲取網(wǎng)絡(luò)校時// Connect to an access point//WiFi.begin(); // Connect to the access point of the last connectionWiFi.begin("SSID", "PASSWD"); // Or, Connect to the specified access pointSerial.print("Connecting to Wi-Fi ");while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");}Serial.println(" CONNECTED");// Set ntp time to localconfigTime(8 * 3600, 0, ntpServer);// Init I2C// Get local timestruct tm timeInfo;if (getLocalTime(&timeInfo)) {// Set RTC timeI2C_BM8563_TimeTypeDef timeStruct;timeStruct.hours = timeInfo.tm_hour;timeStruct.minutes = timeInfo.tm_min;timeStruct.seconds = timeInfo.tm_sec;rtc.setTime(&timeStruct);// Set RTC DateI2C_BM8563_DateTypeDef dateStruct;dateStruct.weekDay = timeInfo.tm_wday;dateStruct.month = timeInfo.tm_mon + 1;dateStruct.date = timeInfo.tm_mday;dateStruct.year = timeInfo.tm_year + 1900;rtc.setDate(&dateStruct);} }????這段代碼先將esp32連上家里的無線路由器(上面的代碼中的SSID和PASSWD改成自己家的路由器密碼),然后通過阿里云的校時服務(wù)器獲取中國的日期與時間,并且將這個時間設(shè)置到PCF8563時鐘芯片中,這樣以后我們可以在串口監(jiān)視器中看到日期與時間
????如果你下次家里網(wǎng)絡(luò)沒開的話,這個程序也會從PCF8563芯片中獲取日期與時間信息。
飛利浦的這款芯片是目前最穩(wěn)定的、走時最準的、功耗最低的芯片之一,像DS1302之類的時鐘芯片簡直弱爆了,相信同學(xué)們看到這里也會有一種馬上去體驗的沖動了!!!
最后預(yù)告一下,我的點陣時鐘正在進行外殼設(shè)計中了,相信在近期馬上可以給大家展示,請大家期待吧!
總結(jié)
以上是生活随笔為你收集整理的ESP32使用PCF8563时钟模块进行网络校时的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 朴素贝叶斯和贝叶斯估计
- 下一篇: 腾讯地图 添加事件和移除事件