今天這個應用比較複雜,大家可以把程序多看幾遍以後再開始實作。
Pico板上內建了溫度感測器,對照接腳圖可以看到 Pin 31-35分別標記 ADC0, ADC1, AGND, ADC2 和 ADC_VREF。Pico 板上的溫度感測器沒有實體的引腳,可以透過ADC4來得到數值。
ADC 的存取方式和一般的 GPIO 不同,原因是 GPIO 僅顯示高電位和低電位兩種狀態,而 ADC 會取得不同的電壓數值。Pico 的 ADC 使用 12 位元來計算數值,表示偵測的值可以從 0 到 4095來表示。
Pico板上的傳感器規格,溫度在攝氏 27 度時會提供 0.706V 的電壓,每升高1度,電壓會降低0.001721 伏特。依據這個公式就可以即時計算來自ADC的電壓所代表的溫度。
需要的材料:
LCD1602液晶顯示器 x1
LCD連接模組 x1
麵包板 x1
排線數條
接線方式:
LCD1602 需要5V電壓供電才能顯示字體,而 Pico 提供的是 3.3V ,雖然LCD可以顯示,但字體及背景亮度不足。所以可以改接 Pin40 的VBUS, VBUS 是 micro-USB 的輸入電壓通常是 5V。
我買的LCD直接和連接模組銲接在一起,在LCD的背面可以看到4個接腳,接著依照以下的表格把Pico和LCD連接在一起。
LCD背面照
Pi Pico是一個微型控制器,所以外接的一些零件都必須再加裝驅動程式。
我們可以到Github這個開源的程式網站下載需要的3個驅動程式。
https://github.com/T-622/RPI-PICO-I2C-LCD
進入網頁後下載以下三個程式到電腦中,點選程式名稱會出現程式碼的網頁,再按右上方下載的圖示即可存到電腦中。請注意不要修改檔名以及變更大小寫,否則後續程式執行會發生錯誤。
lcd_api.py
pico_i2c_lcd.py
pico_i2c_lcd_test.py
接著把Pico接上電腦,在電腦中按兩下任一個程式,應該會用Thonny開啟程式碼,接著不要修改任何內容,點選Thonny的檔案/另存新檔,會出現以下視窗,再點選Pi Pico。
進入對話視窗後先點選右上方選項,建立一個叫lib的新資料夾,把驅動程式存到資料夾中。剩下的兩個程式重複相同的動作,都存到lib的資料夾中。
如果室溫比較低,用手握住Pico板後可以看到顯示的溫度會上升。
LCD的功能很多,可以顯示各種字體或是表情圖案等,大家可以在網路上收集相關程式,做更多的嘗試。
以下為可以複製的程式碼
import machine
from machine import ADC
from machine import I2C
from lcd_api import LcdApi
from pico_i2c_lcd import I2cLcd
I2C_ADDR = 0x27 #LCD1602的I2C位址
I2C_NUM_ROWS = 2 #LCD 2列數
I2C_NUM_COLS = 16 #LCD16 行數
i2c = I2C(0, sda=machine.Pin(0), scl=machine.Pin(1), freq=400000) #設定I2C
lcd = I2cLcd(i2c, I2C_ADDR, I2C_NUM_ROWS, I2C_NUM_COLS)
utime.sleep(2)
to_volts = 3.3 / 65535
temper_sensor = ADC(4) #從ADC(4)取得溫度的電壓值
while True:
lcd.clear()
time = utime.localtime()
# 顯示日期及時間
lcd.putstr("{month:>02d}/{day:>02d} {HH:>02d}:{MM:>02d}:{SS:>02d}".format(
month=time[1], day=time[2], HH=time[3], MM=time[4], SS=time[5]))
temper_volts = temper_sensor.read_u16() * to_volts #取得當時溫度的電壓
celsius_degrees = 27 - (temper_volts - 0.706) / 0.001721 #計算攝氏溫度
lcd.move_to(0,1) #游標跳至第二列第一行
lcd.putstr('TEMP:')
lcd.putstr(str(round(celsius_degrees,3)))
lcd.putstr(' oC') #用小寫o代替溫度的符號
utime.sleep(3) #暫停3秒鐘
留言
張貼留言