Raspberry Pi Pico筆記(7):TM1637四位數七段LED顯示日期時間及DS18B20的溫度

上一篇使用一個七段顯示器接 Pi Pico 的引腳,設定不同 GPIO 的高低電位,讓七段顯示器顯示出數字。本篇要使用具有 I2C 的 TM1637 模組,這個模組連接僅需四個引腳,讓控制 4 個七段顯示器變的簡單許多。以下就來看一下如何使用 MicroPython 實作顯示 DS18B20 偵測得到的溫度及顯示日期時間。

[材料]

  • 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)GNDGND
Pin 36(3V3)VCCVDD
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 記憶體中。

[參考資料]

Post a Comment

較新的 較舊