天天看點

物聯網開發筆記(80)- 使用Micropython開發ESP32開發闆之通過IIC接口控制TM1650四位共陰數位管子產品

一、目的

        這一節我們學習如何使用我們的ESP32開發闆來通過IIC接口控制TM1650四位共陰數位管子產品。

物聯網開發筆記(80)- 使用Micropython開發ESP32開發闆之通過IIC接口控制TM1650四位共陰數位管子產品

 二、環境

        ESP32 + Thonny + TM1650四位共陰數位管子產品 + 幾根杜邦線 + Win10

接線方法:

物聯網開發筆記(80)- 使用Micropython開發ESP32開發闆之通過IIC接口控制TM1650四位共陰數位管子產品

 三、驅動

        我根據别人部落格改的,不敢說是全網唯一,但是也是第二,哈哈。。。不好之處,大家多多提意見。你有好的驅動,麻煩請評論區留言,謝謝!

FourDigitDisplay.py

'''
    ESP32 drive for Four Digit LED Display (TM1650)
    http://www.micropython.org.cn
    Auther: 魔都飄雪 2023-2-14
'''

from machine import Pin,I2C
#from machine import Pin,SoftI2C #軟I2C

COMMAND_I2C_ADDRESS = 0x24  # 對應數位管I2C位址[36, 37, 38, 39, 52, 53, 54, 55]的36
DISPLAY_I2C_ADDRESS = 0x34  # 對應數位管I2C位址[36, 37, 38, 39, 52, 53, 54, 55]的52

# 對應單個數位管的0到F顯示。0不亮1亮。例如0x3F二進制為0011 1111,高位dp,地位為a,對應8段數位管則顯示為0
buf = (0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71)  

i2c = I2C(1)
#i2c = SoftI2C(scl=Pin(25), sda=Pin(26)) #軟I2C
class FourDigitDisplay():
    def __init__(self):
        self._intensity = 3
        self.dbuf = [0, 0, 0, 0]
        self.tbuf = bytearray(1)
        self.on()

    def intensity(self, dat = -1):
        if dat < 0 or dat > 8:
            return self._intensity
        if dat == 0:
            self.off()
        else:
            self._intensity = dat
            self.cmd((dat<<4)|0x01)

    def cmd(self, c):
        self.tbuf[0] = c
        i2c.writeto(COMMAND_I2C_ADDRESS, self.tbuf)

    def dat(self, bit, d):
        self.tbuf[0] = d
        i2c.writeto(DISPLAY_I2C_ADDRESS + (bit%4), self.tbuf)

    def on(self):
        self.cmd((self._intensity<<4)|0x01)

    def off(self):
        self._intensity = 0
        self.cmd(0)

    def clear(self):
        self.dat(0, 0)
        self.dat(1, 0)
        self.dat(2, 0)
        self.dat(3, 0)
        self.dbuf = [0, 0, 0, 0]

    def showbit(self, num, bit = 0):
        self.dbuf[bit%4] = buf[num%16]
        self.dat(bit, buf[num%16])

    def shownum(self, num):
        if num < 0:
            self.dat(0, 0x40)   # '-'
            num = -num
        else:
            self.showbit((num // 1000) % 10)
        self.showbit(num % 10, 3)
        self.showbit((num // 10) % 10, 2)
        self.showbit((num // 100) % 10, 1)

    def showhex(self, num):
        if num < 0:
            self.dat(0, 0x40)   # '-'
            num = -num
        else:
            self.showbit((num >> 12) % 16)
        self.showbit(num % 16, 3)
        self.showbit((num >> 4) % 16, 2)
        self.showbit((num >> 8) % 16, 1)

    def showDP(self, bit = 1, show = True):
        if show:
            self.dat(bit, self.dbuf[bit] | 0x80)
        else:
            self.dat(bit, self.dbuf[bit] & 0x7F)
           

四、示例代碼

from machine import Pin,I2C,SoftI2C
from FourDigitDisplay import *
import time

# 軟I2C也是可以的,驅動對應改一下即可
#i2c = SoftI2C(scl=Pin(25), sda=Pin(26), freq=100000)
#print(i2c.scan()) # scan for devices

#硬I2C方法,此處使用I2c 1
i2c = I2C(1, scl=Pin(25), sda=Pin(26), freq=400000) 
#36對應驅動裡的COMMAND_I2C_ADDRESS = 0x24; 52對應驅動裡的DISPLAY_I2C_ADDRESS = 0x34 
print(i2c.scan())  # 列印出[36, 37, 38, 39, 52, 53, 54, 55]   

#顯示整數
fdd = FourDigitDisplay()
fdd.shownum(9999)  # 顯示4個9
time.sleep(2)
#顯示小數
fdd.shownum(1234)  # 顯示4個9
fdd.showDP(0)  # 預設是2位小數;showDP(0)三位小數;showDP(2)一位小數;
time.sleep(2)
#顯示十六進制數
fdd.showhex(60)  # 顯示為3C
time.sleep(2)
#清屏
fdd.clear()
time.sleep(2)

#顯示餘數數
fdd.showbit(18)  # 18%16=2,是以顯示為2
time.sleep(2)

#調節顯示亮度
fdd.intensity(8)  #亮度為1到8
time.sleep(2)
fdd.intensity(0) #關閉顯示,相當于fdd.off()
time.sleep(2)
fdd.on() #打開顯示
time.sleep(2)
fdd.intensity(2)
time.sleep(2)

for i in range(0,10000,1):   
    fdd.shownum(i)
    time.sleep(0.25)
           

五、顯示效果

物聯網開發筆記(80)- 使用Micropython開發ESP32開發闆之通過IIC接口控制TM1650四位共陰數位管子產品

 六、數位管購買

https://item.taobao.com/item.htm?spm=a1z09.2.0.0.51c12e8d16YAs7&id=687984025071&_u=4p01rchb4ae

物聯網開發筆記(80)- 使用Micropython開發ESP32開發闆之通過IIC接口控制TM1650四位共陰數位管子產品

https://item.taobao.com/item.htm?spm=a1z09.2.0.0.51c12e8d16YAs7&id=687984025071&_u=4p01rchb4ae        

物聯網開發筆記(80)- 使用Micropython開發ESP32開發闆之通過IIC接口控制TM1650四位共陰數位管子產品
物聯網開發筆記(80)- 使用Micropython開發ESP32開發闆之通過IIC接口控制TM1650四位共陰數位管子產品
物聯網開發筆記(80)- 使用Micropython開發ESP32開發闆之通過IIC接口控制TM1650四位共陰數位管子產品

七、參考資料

【micropython】microbit micropython使用第三方庫實作四位數位管顯示_GEEK.攻城獅的部落格-CSDN部落格_micropython安裝第三方庫1、microbit檔案系統當我們使用内置庫函數時,隻需要使用import功能将相關的庫加載進來即可。我們在擷取第三方庫或者自行編寫庫檔案時,一般為.PY的源代碼檔案。我們首先需要将檔案寫入到microbit的檔案系統中。在micropython中,可以通過内置os庫來操作檔案。API功能os.listdir()顯示系統中的檔案os.remove(filename)删除檔案os.size(filename)檢視檔案大小os.uname()顯示MicroPython和裝置資訊在RE

物聯網開發筆記(80)- 使用Micropython開發ESP32開發闆之通過IIC接口控制TM1650四位共陰數位管子產品

https://blog.csdn.net/cw_huang/article/details/114061052class I2C – a two-wire serial protocol — MicroPython latest documentation

物聯網開發筆記(80)- 使用Micropython開發ESP32開發闆之通過IIC接口控制TM1650四位共陰數位管子產品

http://docs.micropython.org/en/latest/library/machine.I2C.html