上一篇使用一個七段顯示器接 Pi Pico 的引腳,設定不同 GPIO 的高低電位,讓七段顯示器顯示出數字。本篇要使用具有 I2C 的 TM1637 模組,這個模組連接僅需四個引腳,讓控制 4 個七段顯示器變的簡單許多。以下就來看一下如何使用 MicroPython 實作顯示 DS18B20 偵測得到的溫度及顯示日期時間。
在實作的過程中,我將 tm1347.py 跟上述程式存在電腦中的相同目錄內,執行程式時,一直會出現「ImportError: no module named 'tm1637'」,找了很多方法試著要解決,但是都無法成功。唯獨將上述的程式跟 tm1347.py 存到 Pi Pico的記憶體時,這個問題就解決了,到目前仍不知原因在哪裡?如有知道的朋友也可以留言給我,告訴我是錯誤在哪裡?
要將 tm1637.py 或其他函式庫程式複製到 Pi Pico 時,我的作法是在 Thonny 開啟一個新檔,將函式庫程式檔案開啟後,複製貼上到 Thonny 開啟的空白檔案中,再存檔到 Pi Pico 記憶體中。
[材料]
- Raspberry Pi Pico x1
- TM1637 四位數七段 LED 顯示器 x1
- DS18B20 溫度感測器 x1
- 電阻 4.7K x1
- 排線 n 條
[接線圖]
將 CLK 和 DIO 引腳連接到 Pico 上可支援 I2C SCL/SDA 的任意兩個 GPIO 引腳,並且可將 GND 引腳連接到 Pico 的 8 個 GND 引腳中的任何一個。Pi Pico接腳 | TM1637 4位數7段LED顯示器 | DS18B20 |
---|---|---|
Pin 38(GND) | GND | GND |
Pin 36(3V3) | VCC | VDD |
Pin 31(GPIO26)SDA | CLK | - |
Pin 32(GPIO27)SCL | DIO | - |
Pin 34(GPIO28) | - | DQ |
[程式]
Github:mcauser/micropython-tm1637 的函式功能很多,我僅用到顯示字串、帶冒號的日期時間以及溫度函式,如果有興趣的朋友可以看一下 Github 上的範例程式,例如可以設定顯示亮度、讓顯示文字捲動等功能,有機會再來使用一下其他函式功能。程式中呼叫 convert_temp()函式的功能,可以啟動溫度讀數,依照規格至少要等待 750ms 才能讀取該值。程式所需的函式,包括:import sys import utime import onewire import ds18x20 import tm1637 from machine import Pin from utime import sleep Display = tm1637.TM1637(clk=Pin(26), dio=Pin(27)) #設定tm1637 Pin ds_pin = machine.Pin(28) ds_sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin)) #設定DS18B20 Pin roms = ds_sensor.scan() # 掃描總線上的設備 while(True): # 取得日期及時間 time = utime.localtime() year = str("{:<4d}".format(time[0])) month = str("{:2d}".format(time[1])) day = str("{:2d}".format(time[2])) hour = int("{:2d}".format(time[3])) minute = int("{:2d}".format(time[4])) second = int("{:2d}".format(time[5])) ss = time[5] ds_sensor.convert_temp() #啟動溫度讀取 if (ss > 25 and ss ≤ 30) or (ss > 55 and ss ≤ 60): #每分鐘兩段時間顯示月日10秒鐘 Display.show(month+day) elif (ss > 35 and ss ≤ 40) or (ss > 5 and ss ≤ 10): #每分鐘兩段時間顯示時分10秒鐘 Display.numbers(hour,minute) #顯示時:分,這個函式會顯示冒號: elif (ss > 45 and ss ≤ 48) or (ss > 15 and ss ≤ 18): #每分鐘兩段時間顯示溫度6秒鐘 for rom in roms: Display.temperature(int(ds_sensor.read_temp(rom))) else: Display.numbers(minute,second) #顯示分:秒,這個函式會顯示冒號:
[實作結果]
[後記]在實作的過程中,我將 tm1347.py 跟上述程式存在電腦中的相同目錄內,執行程式時,一直會出現「ImportError: no module named 'tm1637'」,找了很多方法試著要解決,但是都無法成功。唯獨將上述的程式跟 tm1347.py 存到 Pi Pico的記憶體時,這個問題就解決了,到目前仍不知原因在哪裡?如有知道的朋友也可以留言給我,告訴我是錯誤在哪裡?
要將 tm1637.py 或其他函式庫程式複製到 Pi Pico 時,我的作法是在 Thonny 開啟一個新檔,將函式庫程式檔案開啟後,複製貼上到 Thonny 開啟的空白檔案中,再存檔到 Pi Pico 記憶體中。
張貼留言