雖然這完全沒有自己寫到程式碼,但多玩玩也無妨吧!

未來有打算把公司煮溫度開關的機台自己做成智能型,

所以在有限的學習環境下,能認知多少算多少。

主題開始

參考文件

https://sites.google.com/site/zsgititit/home/raspberry-shu-mei-pai/raspberry-shi-yongdht11jian-ce-wen-du-yu-shi-du-xian-shi-zai2x16ying-mu

http://osoyoo.com/zh/2017/07/03/raspbery-pi3-drive-i2c-1602-lcd/

以上教學我稍微把兩個方法整合起來

 

連接Raspberry2x16LCD

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

undefined

修改完成後按Ctrl+X,按Y,並重新啓動pi

step2

加載模組\

sudo nano /etc/modules

開啓文件後加入以下兩行

i2c-bcm2708

i2c-dev

添加完成後,按Ctrl+X,输入Y保存退出

step3

安裝 i2c python librarysmbus

sudo apt-get install -y python-smbus i2c-tools

 

重新啓動pi

 

step4

檢查是否安裝成功

undefined

出現以上圖示就成功啦!!

 

step5

檢查Raspberry的i2c是否有連結到2x16LCD

sudo i2cdetect -y 1

undefined

顯示位址是0x27

 

setp6

下載Python驅動程式
#git   clone   https://github.com/paulbarber/raspi-gpio
#cd  raspi-gpio
#nano  lcd_display.py
將LCD address修改ADDRESS為0x27

undefined

step7

在/home/pi下新增以下py檔

sudo  nano  i2c1602_lcd.py

step8

在文件內貼上或鍵入

  1. import smbus  
  2. import time  
  3.   
  4. # Define some device parameters  
  5. I2C_ADDR  = 0x3F # I2C device address, if any error, change this address to 0x27  
  6. LCD_WIDTH = 16   # Maximum characters per line  
  7.   
  8. # Define some device constants  
  9. LCD_CHR = 1 # Mode - Sending data  
  10. LCD_CMD = 0 # Mode - Sending command  
  11.   
  12. LCD_LINE_1 = 0x80 # LCD RAM address for the 1st line  
  13. LCD_LINE_2 = 0xC0 # LCD RAM address for the 2nd line  
  14. LCD_LINE_3 = 0x94 # LCD RAM address for the 3rd line  
  15. LCD_LINE_4 = 0xD4 # LCD RAM address for the 4th line  
  16.   
  17. LCD_BACKLIGHT  = 0x08  # On  
  18. #LCD_BACKLIGHT = 0x00  # Off  
  19.   
  20. ENABLE = 0b00000100 # Enable bit  
  21.   
  22. # Timing constants  
  23. E_PULSE = 0.0005  
  24. E_DELAY = 0.0005  
  25.   
  26. #Open I2C interface  
  27. #bus = smbus.SMBus(0)  # Rev 1 Pi uses 0  
  28. bus = smbus.SMBus(1# Rev 2 Pi uses 1  
  29.   
  30. def lcd_init():  
  31.   # Initialise display  
  32.   lcd_byte(0x33,LCD_CMD) # 110011 Initialise  
  33.   lcd_byte(0x32,LCD_CMD) # 110010 Initialise  
  34.   lcd_byte(0x06,LCD_CMD) # 000110 Cursor move direction  
  35.   lcd_byte(0x0C,LCD_CMD) # 001100 Display On,Cursor Off, Blink Off   
  36.   lcd_byte(0x28,LCD_CMD) # 101000 Data length, number of lines, font size  
  37.   lcd_byte(0x01,LCD_CMD) # 000001 Clear display  
  38.   time.sleep(E_DELAY)  
  39.   
  40. def lcd_byte(bits, mode):  
  41.   # Send byte to data pins  
  42.   # bits = the data  
  43.   # mode = 1 for data  
  44.   #        0 for command  
  45.   
  46.   bits_high = mode | (bits & 0xF0) | LCD_BACKLIGHT  
  47.   bits_low = mode | ((bits<<4) & 0xF0) | LCD_BACKLIGHT  
  48.   
  49.   # High bits  
  50.   bus.write_byte(I2C_ADDR, bits_high)  
  51.   lcd_toggle_enable(bits_high)  
  52.   
  53.   # Low bits  
  54.   bus.write_byte(I2C_ADDR, bits_low)  
  55.   lcd_toggle_enable(bits_low)  
  56.   
  57. def lcd_toggle_enable(bits):  
  58.   # Toggle enable  
  59.   time.sleep(E_DELAY)  
  60.   bus.write_byte(I2C_ADDR, (bits | ENABLE))  
  61.   time.sleep(E_PULSE)  
  62.   bus.write_byte(I2C_ADDR,(bits & ~ENABLE))  
  63.   time.sleep(E_DELAY)  
  64.   
  65. def lcd_string(message,line):  
  66.   # Send string to display  
  67.   
  68.   message = message.ljust(LCD_WIDTH," ")  
  69.   
  70.   lcd_byte(line, LCD_CMD)  
  71.   
  72.   for i in range(LCD_WIDTH):  
  73.     lcd_byte(ord(message[i]),LCD_CHR)  
  74.   
  75. def main():  
  76.   # Main program block  
  77.   
  78.   # Initialise display  
  79.   lcd_init()  
  80.   
  81.   while True:  
  82.   
  83.     # Send some test  
  84.     lcd_string("Created by         <",LCD_LINE_1) #" "內文字可改更  
  85.     lcd_string("Osoyoo.com        <",LCD_LINE_2)#" "內文字可改更  
  86.   
  87.     time.sleep(3)  
  88.     
  89.     # Send some more text  
  90.     lcd_string("> Tutorial Url:",LCD_LINE_1)#" "內文字可改更  
  91.     lcd_string("> http://osoyoo.com",LCD_LINE_2)#" "內文字可改更  
  92.     time.sleep(3)  
  93.   
  94. if __name__ == '__main__':  
  95.   
  96.   try:  
  97.     main()  
  98.   except KeyboardInterrupt:  
  99.     pass  
  100.   finally:  
  101.     lcd_byte(0x01, LCD_CMD)  

step9

執行程式碼

sudo  python  ./i2c1602_lcd.py

#調整背光,可於LCD後面的可調電位器調節

arrow
arrow
    文章標籤
    lcd2x16 pi3b+&lcd
    全站熱搜
    創作者介紹
    創作者 定凱 的頭像
    定凱

    大的人身,小的心靈…保持赤子之心。

    定凱 發表在 痞客邦 留言(0) 人氣()