近日因為工作上需要, 想用QR Code及 RFID/NFC 記錄時間而制作一個Proof of Concept環境. 我選用平價而abandent了一段時間的Raspberry Pi作為一個平台. 當然大家也知道Raspberry Pi是沒有內置Realtime clock/RTC的, 一般人如果在可以情況下可以跟time server作Synchonization. 而因為我對時間有要求, 所以就選上了極平價的DS1302 module.
先說說這個DS1302, 在淘寶上打上 “Raspberry Pi RTC” 就已經有不下一百幾十個item. 大部份都只是$20內, 在價錢上真的很合理及實用.
而因為我這個PoC除了RTC外, 還是需求RFID reader的, 所以在不知不覺下就走進了一定叫 深圳树莓派1号店 的店, 分別買了 RFID-RC522 及 DS1302, 另外還有少量線材及breadboards.
剛剛才說$20左右一個RTC module是很抵, 誰不知這個DS1302 module 只需 $0.5(不包CR2032電池) 或 $1.8(包CR2032電池).
硬件
好了, 入正題吧! 其實大家只要隨手google “Raspberry Pi DS1302” 也有不少 blogger 教您如何安裝 DS1302 RTC 至 Raspberry Pi 板上, 而個人來說因為要同時安裝 RFID Reader及外置 1602 LCD, 所以決定用自己喜好走線方便跟進及下半部份的GPIO interface programming.
先看看Raspberry Pi GPIO 排線吧
我選用上 pin2 (5V), pin9 (ground), pin11 (GPIO17), pin12 (GPIO18)及 pin13 (GPIO27) 來對應 DS1302 的5條線.
VCC - pin2 GND - pin9 CLK - pin13 DAT - pin12 RST - pin11
軟件
簡單了, 對嗎? 既然Cabling 這部份已經完成, 那我們就跳到 software 部份吧. 在Operating System 上我是通過WiringPi來跟DS1302作communication, 但是不論您用什麼infrastructure作為介面也好, 首先是要開通raspberry 的 I2C interface. 流程如下:
sudo raspi-config
在介面上選 “Interfacing Option” -> “ARM I2C interface”
所以先要install下面這個package來給我的C program需要的 header file. 請download我的RTC program.
apt-get install wiringpi
如果係想修改我的program, 請記得compile/build個binary
gcc mhwclock.c -o mhwclock -lwiringPi -lwiringPiDev
我的program – mhwclock使用如下:
./mhwclock -test <– 測試interface及memory status
root@raspberrypi:~/hwclock1302# ./mhwclock -test DS1302 RAM TEST -- DS1302 RAM TEST: OK root@raspberrypi:~/hwclock1302#
./mhwclock -now <– 顯示DS1302內的時間
root@raspberrypi:~/hwclock1302# ./mhwclock -now current time on RTC: 18/10/2019 - 14:58:46
./mhwclock -load <– Sync DS1302內的時間至RaspbianOS
root@raspberrypi:~/hwclock1302# date -s "2 OCT 2006 18:00:00" Mon 2 Oct 18:00:00 HKT 2006 root@raspberrypi:~/hwclock1302# date Mon 2 Oct 18:00:04 HKT 2006 root@raspberrypi:~/hwclock1302# ./mhwclock -load Refresh Clock from RTC... Fri 18 Oct 15:01:19 HKT 2019 root@raspberrypi:~/hwclock1302# date Fri 18 Oct 15:01:21 HKT 2019
./mhwclock -set <– update DS1302內的時間至RaspbianOS
root@raspberrypi:~/hwclock1302# date -s "2 OCT 2006 18:00:00" Mon 2 Oct 18:00:00 HKT 2006 root@raspberrypi:~/hwclock1302# ./mhwclock -set Setting the RTC from live [6-10-2 18:0:4]... OK root@raspberrypi:~/hwclock1302# date Mon 2 Oct 18:00:11 HKT 2006 root@raspberrypi:~/hwclock1302# ./mhwclock -now current time on RTC: 2/10/2006 - 18:00:17 root@raspberrypi:~/hwclock1302# date -s "18 OCT 2019 15:06:30" Fri 18 Oct 15:06:30 HKT 2019 root@raspberrypi:~/hwclock1302# ./mhwclock -set Setting the RTC from live [19-10-18 15:6:36]... OK