省錢黨注意了!用樹莓派打造智能時鐘(續)

引言

前一段時間寫了一篇關於樹莓派自制智能時鐘的文章,後來有熱心網友評論說顯示器費用較高、耗電量較大。為了解決這一問題,這兩天我又研究了一下,用LCD1602做顯示器,通過樹莓派I2C的模塊製作了智能時鐘,希望對大家有所幫助。

一、前期準備

● LCD1602顯示器

省錢黨注意了!用樹莓派打造智能時鐘(續)

LCD1602顯示器如上圖所示,LCD1602中16表示每行可以顯示16個字符,顯示器中一共有2行。LCD1602反面上圓形所標註的地方是亮度調節旋鈕,新拿到的LCD1602可能會因為亮度過高看不到顯示器上的字符,此時調節該旋鈕即可。LCD1602一共有四個引腳,分別是GND、VCC、SDA與SCL。與樹莓派接線時,GND接0V引腳,VCC接5V引腳,SDA與SCL分別接樹莓派上SDA與SCL引腳。

● DHT11溫溼度傳感器

● 樹莓派

● Python3環境

● RPi.GPIO庫

● Adafruit DHT11庫

二、樹莓派實現方法

2.1 打開樹莓派的I2C通信

由於本文所使用的LCD1602背面焊接了I2C接口,因此需要開啟樹莓派的I2C模塊。首先在終端輸入sudo raspi-config命令,隨後點擊“5 Interfacing Options”,選擇“P5 I2C”,再點擊確定即可開啟I2C模塊。

2.2 查找I2C設備地址

將LCD1602與樹莓派連接後,需要查找其地址,也就是I2C通信地址。首先安裝I2C-tools,安裝命令為sudo apt-get install i2c-tools。完成安裝後使用命令sudo i2cdetect -y 1查找I2C通信地址,本文的查找結果如下:

省錢黨注意了!用樹莓派打造智能時鐘(續)

從上圖可以看出,I2C通信地址為0x27。注意,本文使用的樹莓派是3B版,如果樹莓派版本較早,輸入的命令為sudo i2cdetect -y 0。

2.2 代碼實現說明

本文所使用的代碼我會在本文的評論中給出下載鏈接,歡迎大家批評指正。

本文提供的代碼包括兩個文件,一個是I2C_LCD_driver.py文件,一個是smart_lcd_screen.py文件,其中I2C_LCD_driver.py是我從網上下載的python包,這裡面將複雜的二進制為操作封裝成類,方便用戶使用,smart_lcd_screen.py是智能時鐘的實現代碼。由於本文的實現代碼與之前文章中的代碼邏輯類似,這裡不做過多解釋,下面本文簡要說明如何使用I2C_LCD_driver.py文件。

1. 在使用I2C_LCD_driver.py文件控制LCD1602顯示器時,首先要查看I2C_LCD_driver.py文件中ADDRESS是否與I2C通信地址一致,不一致需要修改。隨後需要在python代碼中實例化lcd類,python語句為:mylcd = I2C_LCD_driver.lcd()。隨後即可通過mylcd對象使用其中的方法。

2. 在該文件中lcd_strobe()方法與lcd_write_four_bits()方法均為位處理函數,主要作用被lcd類中的其他方法調用,我們變成很少會用到,這裡不做過多解釋。

3. lcd_write(cmd)函數是給LCD1602顯示器寫入命令函數。

4. lcd_write_char(char)函數是給LCD1602顯示器寫入八位字節。

5. lcd_display_string(string, line, pos)函數是給LCD1602顯示器寫入字符串,string是字符串內容,line記錄字符串顯示的行號,pos記錄了字符串在每一行從第幾位開始顯示。

6. lcd_clear()函數功能是清空顯示屏。

7. backlight(state)函數功能是打開或關閉背光,state=1時是打開背光,state=0時是關閉背光。

8. lcd_load_custom_chars()函數用於自定義字符。


分享到:


相關文章: