雖然這完全沒有自己寫到程式碼,但多玩玩也無妨吧!
未來有打算把公司煮溫度開關的機台自己做成智能型,
所以在有限的學習環境下,能認知多少算多少。
主題開始
參考文件
http://osoyoo.com/zh/2017/07/03/raspbery-pi3-drive-i2c-1602-lcd/
以上教學我稍微把兩個方法整合起來
連接Raspberry與2x16LCD
2x16LCD / Raspberry Pi
Vcc / 5v(pin 2)
Gnd / 接地(pin 6)
SDA / SDA(pin 3)
SCL / SCL(pin 5)
——————————————
step1
先打開樹莓派的I2C
#sudo nano /boot/config.txt
下圖紅框處把前面前#標記去除,後面改成on
修改完成後按Ctrl+X,按Y,並重新啓動pi
step2
加載模組\
sudo nano /etc/modules
開啓文件後加入以下兩行
i2c-bcm2708
i2c-dev
添加完成後,按Ctrl+X,输入Y保存退出
step3
安裝 i2c python library和smbus
sudo apt-get install -y python-smbus i2c-tools
重新啓動pi
step4
檢查是否安裝成功
出現以上圖示就成功啦!!
step5
檢查Raspberry的i2c是否有連結到2x16LCD
sudo i2cdetect -y 1
顯示位址是0x27
setp6
step7
在/home/pi下新增以下py檔
sudo nano i2c1602_lcd.py
step8
在文件內貼上或鍵入
- import smbus
- import time
- # Define some device parameters
- I2C_ADDR = 0x3F # I2C device address, if any error, change this address to 0x27
- LCD_WIDTH = 16 # Maximum characters per line
- # Define some device constants
- LCD_CHR = 1 # Mode - Sending data
- LCD_CMD = 0 # Mode - Sending command
- LCD_LINE_1 = 0x80 # LCD RAM address for the 1st line
- LCD_LINE_2 = 0xC0 # LCD RAM address for the 2nd line
- LCD_LINE_3 = 0x94 # LCD RAM address for the 3rd line
- LCD_LINE_4 = 0xD4 # LCD RAM address for the 4th line
- LCD_BACKLIGHT = 0x08 # On
- #LCD_BACKLIGHT = 0x00 # Off
- ENABLE = 0b00000100 # Enable bit
- # Timing constants
- E_PULSE = 0.0005
- E_DELAY = 0.0005
- #Open I2C interface
- #bus = smbus.SMBus(0) # Rev 1 Pi uses 0
- bus = smbus.SMBus(1) # Rev 2 Pi uses 1
- def lcd_init():
- # Initialise display
- lcd_byte(0x33,LCD_CMD) # 110011 Initialise
- lcd_byte(0x32,LCD_CMD) # 110010 Initialise
- lcd_byte(0x06,LCD_CMD) # 000110 Cursor move direction
- lcd_byte(0x0C,LCD_CMD) # 001100 Display On,Cursor Off, Blink Off
- lcd_byte(0x28,LCD_CMD) # 101000 Data length, number of lines, font size
- lcd_byte(0x01,LCD_CMD) # 000001 Clear display
- time.sleep(E_DELAY)
- def lcd_byte(bits, mode):
- # Send byte to data pins
- # bits = the data
- # mode = 1 for data
- # 0 for command
- bits_high = mode | (bits & 0xF0) | LCD_BACKLIGHT
- bits_low = mode | ((bits<<4) & 0xF0) | LCD_BACKLIGHT
- # High bits
- bus.write_byte(I2C_ADDR, bits_high)
- lcd_toggle_enable(bits_high)
- # Low bits
- bus.write_byte(I2C_ADDR, bits_low)
- lcd_toggle_enable(bits_low)
- def lcd_toggle_enable(bits):
- # Toggle enable
- time.sleep(E_DELAY)
- bus.write_byte(I2C_ADDR, (bits | ENABLE))
- time.sleep(E_PULSE)
- bus.write_byte(I2C_ADDR,(bits & ~ENABLE))
- time.sleep(E_DELAY)
- def lcd_string(message,line):
- # Send string to display
- message = message.ljust(LCD_WIDTH," ")
- lcd_byte(line, LCD_CMD)
- for i in range(LCD_WIDTH):
- lcd_byte(ord(message[i]),LCD_CHR)
- def main():
- # Main program block
- # Initialise display
- lcd_init()
- while True:
- # Send some test
- lcd_string("Created by <",LCD_LINE_1) #" "內文字可改更
- lcd_string("Osoyoo.com <",LCD_LINE_2)#" "內文字可改更
- time.sleep(3)
- # Send some more text
- lcd_string("> Tutorial Url:",LCD_LINE_1)#" "內文字可改更
- lcd_string("> http://osoyoo.com",LCD_LINE_2)#" "內文字可改更
- time.sleep(3)
- if __name__ == '__main__':
- try:
- main()
- except KeyboardInterrupt:
- pass
- finally:
- lcd_byte(0x01, LCD_CMD)
step9
執行程式碼
sudo python ./i2c1602_lcd.py
#調整背光,可於LCD後面的可調電位器調節