網頁最後修改時間:2021/02/27
Raspberry Pi Pico(下面簡稱 Pico)主晶片 RP2040 裡有 5 個 ADC 通道,其中通道 4 是與晶片內部的溫度感測器連接,所以可以在不接任何外部裝置的情況下讀出溫度值,雖然它會受到晶片執行負荷量的影響,讀值會有所偏移,但用於本篇的例子已經足夠!
本篇將會說明:怎麼撰寫 Pico 的 MicroPython 程式驅動(賣場的)整合型 LCD,用來顯示讀取 Pico ADC[4] 後的溫度值。
*********************************************************************************
若須購買 Pico,可參考:Raspberry Pi Pico RP2040 開發板分類賣場
- {5V}整合型{4/8BIT,IIC,4SPI}1602英文字型藍底白字LCD螢幕(附排針與可變電阻)-可用於微控制器
- {3V3} 整合型{4/8BIT,IIC,4SPI}1602英文字型藍底白字LCD螢幕(附排針)-適用於樹莓派,微控制器
- 驅動 128x64 繁體中文 LCD 點、線和面 #MicroPython #ST7920 #ESP8266
*********************************************************************************
【參考接線圖】
整合型 LCD 的接線,以 3V3 版本與 Pico 的接法最簡潔,沒有外接調節螢幕亮度的可變電阻,和電壓準位轉換模組;但 5V 版本的就需要。
{3V3} 整合型 LCD 與 Pico 的接線圖 |
因為手邊現有存貨的關係,所以在本文使用的是 5V 版本的整合型 LCD 的接線方式,同時也能看到怎麼使用電壓準位模組在 3V3 和 5V 系統之間接線的方式。
{5V} 整合型 LCD 與 Pico 的接線圖 |
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
撰寫程式前,Pico 要已經燒錄了 MicroPython;若還沒有且不知怎麼做,看這一篇的說明。
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
【掃描 I2C 裝置】
照著上面接好線後,首先必須要檢查一下是不是能正確通訊?下面這個程式碼可以幫助您來做檢查。
import machine i2c = machine.I2C(0, scl=machine.Pin(1), sda=machine.Pin(0)) print('Scan i2c bus...') devices = i2c.scan() if len(devices) == 0: print("No i2c device !") else: print('i2c devices found:',len(devices)) for device in devices: print("Decimal address: ",device," | Hexa address: ",hex(device))
將上面程式碼輸入到 Thonny 中後儲存為檔名 i2c_scan.py ,然後執行它。
執行之後的結果應該如下面所示,也可以看到整合型 LCD 的 I2C 地址:0x3C
i2c_scan.py 執行輸出 |
【整合型 LCD 的 MicroPython 驅動程式】
下面這個程式,可以直接在電腦端的 Thonny 執行,不需要先上傳到 Pico,執行後會在 LCD 的第一行印出 Hello World! 的字元。但是,如果想要自訂字元輸出,那麼就要先把這個程式(i2c_jlxlcd.py)先上傳到 Pico 的 / 目錄中,要用的時候再 import 進來就可以。
程式碼下載
** 關於程式碼裡所傳送的 16進位值,只要對照整合型 LCD 商品所附的範例程式碼,就會知道 MicroPython 裡所用的這些值的意思,所以如果之前有購買此商品的用戶,那麼就不需要再贅述;其他的,請使用手邊的 LCD 來完成下面的範例程式。
如下圖所示,Pico 配有兩個 I2C 通道,但接腳搭配有多種配對組合可用,程式裡面選擇的是 <GP0> 和 <GP1> 這兩隻接腳,它所代表的是 I2C 通道 0。
Raspberry Pi Pico 接腳配置圖 |
MicroPython 整合型 LCD 驅動程式裡,現在只有三個函式可用,分別是:
- lcd_init():LCD 初始化;
- lcd_clear():清除 LCD 螢幕上所有的東西;
- lcd_display(line, column, dp):將 dp 字串顯示在第 line 列、第 column 行;
- lcd_begin():印出 I2C 地址與相關資訊,和 LCD 初始化和清除螢幕,使用 LCD 時至少要執行這一行一次;
單獨執行整合型 LCD 驅動程式的輸出,如下圖所示。
i2c_jlxlcd.py 執行輸出 |
【MicroPython 取得和轉換 Pico 內部溫度感測器的值】
Pico 有 5 個 ADC 通道,扣掉一個(ADC[4])給溫度感測器用、一個(ADC[3])給 Pico 硬體偵測電壓用,只剩三個給外部裝置連接用,如下圖所示。
圖片來源 / Picture Source:RP2040 資料手冊 / RP2040 Datasheet |
不管是讀取哪一個 ADC 通道,MicroPython 的程式碼都一樣,只不過因為需要讀取的是 Pico 內部溫度感測器的值,因此讀取後必須再經過公式才能轉換成溫度值,然後再由整合型 LCD 做顯示,下面就是完整的程式碼。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
from machine import ADC from utime import sleep from i2c_jlxlcd import * sensor_temperature = ADC(4) conversion_factor = 3.3 / (65535) lcd_begin() while True: reading = sensor_temperature.read_u16() * conversion_factor temperature = 25 - (reading - 0.706) / 0.001721 output_string = 'Temp: ' + str(temperature) lcd_clear() sleep_ms(10) lcd_display(0, 0, output_string) sleep(2) |
在 Thonny 執行程式後,每隔兩秒程式會讀取一次 Pico 溫度值,該溫度值會直接顯示在整合型 LCD 上;方便佈線起見,麵包板上的螢幕顯示是上下相反的,如下圖所示。
您可以試著把手指輕觸 Pico 上面的 RP2040 晶片,看看溫度值的變化。
i2c_jlxlcd.py 執行結果 |
【結論】
使用 MicroPython 來熟悉 Pico 的運作是一個不錯的方式,近期賣場也會推出一個 Pico 的 MicroPython 入門學習套件,裡面的電子零件,除了可用來學習樹莓派官方出的 "Get Started with MicroPython on Raspberry Pi Pico" 這份文件中的程式碼和電路之外,多餘的也可以自己再發揮創意,有興趣的記得關注喔!
.
.
<<部落格相關文章>>
-
Raspberry Pi Pico-MicroPython, CircuitPython 開發環境建置
-
Raspberry Pi Pico-C/C++ 開發環境建置(命令列和 Visual Studio
Code)
-
Raspberry Pi Pico - 使用 MicroPython 驅動整合型 LCD 顯示 Pico
內部溫度感測器值
- 如何安裝 FUXIZ OS 在 Raspberry Pi Pico?
.
.
沒有留言:
張貼留言
留言屬名為"Unknown"或"不明"的用戶,大多這樣的留言都會直接被刪除掉,不會得到任何回覆!
發問問題,請描述清楚你(妳)的問題,別人回答前不會想去 "猜" 問題是什麼?
不知道怎麼發問,請看 [公告] 部落格提問須知 - 如何問問題 !