mircopython 8266 + SSD1306 做时钟 温度显示

材料 8266   加SSD1306  做时钟  还可显示加DHT11显示温度 

图片如下

 

pic

 

代码高搞起来 逛github  找到的 搜一下 [segment]就可以看到 

# time_led.py 数码显示驱动代码  还有个dat.bin 的字模文件 也要存在 否则无法读取字模的

字模文件dat.bin 字模文件dat.bin


from machine import Pin, I2C
from time import sleep

i2c = I2C(scl=Pin(5), sda=Pin(4))
# LCD Control constants
ADDR = 0x3C
# Holds the segments on in each of the four digits
display = []  
# Segments to set to on for each of the 10 digits. 10 represents empty.
digits = b'\xFC\x60\xDA\xF2\x66\xB6\xBE\xE0\xFE\xF6\x00' 
# Position of each of the 8 segments
rects = [[5, 20, 0, 0],
         [21, 25, 0, 3],
         [21, 25, 4, 6],
         [5, 20, 6, 6],
         [0, 4, 4, 6],
         [0, 4, 0, 3],
         [5, 20, 3, 3],
         [27, 32, 6, 6]
         ]
seg_len = [16, 21, 16, 17, 16, 21, 17, 7]
segments = []
with open('dat.bin', 'rb') as f:
    for i in seg_len:
        segments.append(f.read(i))
dispZeros = 1



def command(c):
    i2c.writeto(ADDR, b'\x00' + bytearray(c))


def initialize(showDots=0, showZeros=1):
    global dispZeros, display
    cmd = [
        [0xAE],                    # DISPLAYOFF
        [0xA4],           # DISPLAYALLON_RESUME
        [0xD5, 0xF0],            # SETDISPLAYCLOCKDIV
        [0xA8, 0x3F],                  # SETMULTIPLEX
        [0xD3, 0x00],              # SETDISPLAYOFFSET
        [0 | 0x0],                   # SETSTARTLINE
        [0x8D,  0x14],                    # CHARGEPUMP
        [0x20,  0x00],  # MEMORYMODE horizontal
        [0x21,  0, 127],  # COLUMNADDR
        [0x22,  0, 63],   # PAGEADDR
        [0xa0 | 0x1],  # SEGREMAP
        [0xc8],   # COMSCANDEC
        [0xDA,  0x12],                    # SETCOMPINS
        [0x81,  0xCF],                   # SETCONTRAST
        [0xd9,  0xF1],                  # SETPRECHARGE
        [0xDB,  0x40],                 # SETVCOMDETECT
        [0xA6],                 # NORMALDISPLAY
        [0xd6, 0],  # zoom off

    ]
    for c in cmd:
        command(c)
    clear_oled()
    display = [0, 0, 0, 0]
    dispZeros = showZeros
    disp_number(0)
    if showDots == 1:
        for i in range(0, 3, 2):
            set_rect([61, 66, 2 + i, 2 + i])
            i2c.writeto(ADDR, segments[7])
    command([0xaf])  # SSD1306_DISPLAYON


def set_rect(rect):
    command([0x21, rect[0], rect[1]])
    command([0x22, rect[2], rect[3]])


def clear_oled():
    set_rect([0, 127, 0, 7])
    screen = bytearray(33)
    screen[0] = 0x40
    for i in range(0, 32):
        i2c.writeto(ADDR, screen)


def disp_number(n, decPos=0):
    global dispZeros
    for j in range(0, 4):
        v = (n // 10**j) % 10
        d = 1 if decPos == j and j > 0 else 0
        if v == 0 and dispZeros == 0:
            set_digit(j,  digits[10] | d)
        else:
            set_digit(j, digits[v] | d)



def set_digit(dig, d):
    global digits, display, segments

    c = display[dig]
    if c != d:
        b1, b2 = c & ~ d, ~c & d
        for i in range(0, 8):
            r1, r2 = b1 >> (7 - i) & 1, b2 >> (7 - i) & 1
            if r2 or r1:

                offset = 34 * (3 - dig)
                # avoid too much recursion
                command([0x21, rects[i][0]+offset, rects[i][1]+offset])
                command([0x22, rects[i][2], rects[i][3]])
                if r2:  # d and not c:
                    i2c.writeto(ADDR, segments[i])
                elif r1:  # not d and c:
                    i2c.writeto(ADDR, b'\x40' + bytearray(seg_len[i] - 1))
        display[dig] = d







 

 

#main.py 

from machine import RTC
from time import sleep
import led_time
#LED初始化     
led_time.initialize(1) #初始化OLED 参数1 显示中间的两个点点
while 1:
  sleep(1)
  _time=RTC().datetime() #获取去当前时间
  #oled屏幕时间,分钟前自动加0
  led_time.disp_number(int(str(_time[4])+(str(_time[5]) if _time[5] >9 else '0'+str(_time[5]))))

 

你好!为了制作一个时钟,你将需要以下硬件和软件: 硬件: 1. ESP32 C3 开发板:ESP32 C3 是一款低成本、低功耗的Wi-Fi和蓝牙芯片,非常适合物联网应用。 2. DS3231SN 实时时钟模块:DS3231SN 是一款高精度的实时时钟模块,可以提供准确的时间信息。 3. SSD1306 OLED 显示屏:SSD1306 是一款0.96英寸的OLED显示屏,可以显示时钟和其他信息。 4. 连接线:用于连接 ESP32、DS3231SN 和 SSD1306。 软件: 1. MicroPython:MicroPython 是一种精简版的 Python 解释器,可以在嵌入式系统上运行。 下面是制作时钟的步骤: 1. 连接硬件: - 将 ESP32 C3 与 DS3231SN 和 SSD1306 连接起来。确保连接正确,参考硬件连接图。 - 将 DS3231SN 和 SSD1306 分别连接到 ESP32 的 I2C 接口。 2. 安装 MicroPython: - 在你的计算机上下载并安装 MicroPython。 - 使用 USB 数据线将 ESP32 C3 连接到计算机。 3. 编写 MicroPython 代码: - 打开一个文本编辑器,创建一个新的 MicroPython 脚本。 - 导入必要的库,例如 machine、ssd1306 和 ds3231。 - 初始化 I2C 总线和 DS3231SN 模块。 - 设置 SSD1306 OLED 显示屏的参数。 - 使用 DS3231SN 模块获取当前时间。 - 在 OLED 显示屏上显示时间。 4. 上传代码到 ESP32 C3: - 将编写好的 MicroPython 代码保存为 main.py 文件。 - 使用 MicroPython 工具将 main.py 上传到 ESP32 C3 开发板上。 5. 测试和调试: - 断开 ESP32 C3 与计算机的连接。 - 将 ESP32 C3 与电源连接,启动时钟程序。 - 监视 SSD1306 OLED 显示屏,确保时间正确显示。 这是一个基本的框架,你可以根据自己的需求进行进一步的扩展和美化。希望对你有所帮助!如果你有任何问题,请随时向我提问。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值