690|1

7

帖子

2

TA的资源

一粒金砂(中级)

楼主
 

【得捷电子Follow me第2期】任务1:控制屏幕显示温度写入sd卡 [复制链接]

  本帖最后由 ltand 于 2023-11-15 14:05 编辑

用于读取 MCP9808 温度传感器和光敏传感器的数据,显示在屏幕上,并将温度数据写入 SD 卡中的temp.txt文件

 

使用的硬件要求:

esp32-s3带屏幕

光敏传感器

MCP9808温度传感器

SD卡

 

官方文档接线方式:

 

 

 

 

 

 

但是有个问题温度传感器和读取sd卡线插法检查多次, 但是读取sd卡库反馈no sdcard异常有点奇怪

 

下面是步骤说明:

1. 导入必要的库:代码中导入了一系列必要的库,包括与硬件通信的 busio、显示和图像处理的 displayio、温度传感器 MCP9808 的库 adafruit_mcp9808,以及用于读取 SD 卡的库 sdcardio 和 storage。

import board
import busio
import displayio

# 显示库
import adafruit_imageload
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font

import time
import analogio

# 温度传感器外置库
import adafruit_mcp9808

# SD卡外置库
import sdcardio
import storage

 

2. 初始化硬件:通过 busio 初始化 I2C 总线,连接 MCP9808 温度传感器。同时,使用 sdcardio 初始化 SD 卡,并将其挂载到文件系统上。

    # MCP9808温度传感器
    i2c = busio.I2C(board.SCL, board.SDA)
    mcp = adafruit_mcp9808.MCP9808(i2c)

    # SD卡
    spi = board.SPI()
    cs = board.D13
    sdcard = sdcardio.SDCard(spi, cs)
    vfs = storage.VfsFat(sdcard)
    storage.mount(vfs, "/sd")

 

3. 创建显示对象和图像组:通过 displayio 创建显示对象和图像组,加载背景图片,并将其添加到显示组中。

    display = board.DISPLAY
    group = displayio.Group()

    # 加载图片
    image, palette = adafruit_imageload.load("/image/bg.png")
    palette.make_transparent(0)
    grid = displayio.TileGrid(image, pixel_shader=palette)
    group.append(grid)

    # 显示当前图像组
    display.show(group)

 

4. 加载字体和初始化文本标签:使用 bitmap_font 加载字体,然后创建文本标签并设置其位置和颜色。

    # 加载字体并定义字体颜色
    font = bitmap_font.load_font("/font/SIMLI_16.pcf")
    # 白色
    color = 0xFFFFFF

    # 初始化文本标签
    text_label = label.Label(font, text="海内存知己,天涯若比邻", color=color)
    text_label.x = 0
    text_label.y = 60
    group.append(text_label)

 

5. 初始化光敏传感器:使用 analogio 初始化 A0 引脚作为光敏传感器,创建一个用于显示光敏传感器值的文本标签。

    # 初始化光敏传感器
    abc = analogio.AnalogIn(board.A0)
    abc_label = label.Label(font, text=f"abc:  {abc.value}", color=color)
    abc_label.x = 20
    abc_label.y = 100
    group.append(abc_label)

 

6. 初始化温度标签:使用 analogio 初始化 A3 引脚作为温度标签,并创建一个用于显示温度的文本标签。

    # 温度标签
    temp_label = analogio.AnalogIn(board.A3)
    temp_label = label.Label(font, text="", color=color)
    temp_label.x = 40
    temp_label.y = 100
    group.append(temp_label)

 

7. 显示修改后的图像组:通过 display.show(group) 将修改后的图像组显示在屏幕上。

    # 显示修改后的图像组
    display.show(group)

 

8. 不断读取 MCP9808 温度传感器的数据,将摄氏度和华氏度显示在屏幕上,并将温度数据追加到数组中。

9. 写入温度数据和光敏传感器值到 SD 卡:使用 open 函数以写入模式打开 /sd/temp.txt 文件,将整个温度数据数组以每行一个值的方式写入文件。同时,将光敏传感器的值更新到显示文本标签。

    temperature_data = []  # 用于存储温度数据的数组

    while True:
        # 等待一段时间,避免刷新过快导致占用过多资源
        tempC = mcp.temperature
        tempF = tempC * 9 / 5 + 32   # 转换成  F
        temp_label.text = str(tempC)
        print("Temperature: {} C {} F".format(tempC, tempF))
        display.show(group)

        temperature_data.append(tempF)  # 将温度数据添加到数组中

        with open("/sd/temp.txt", "w") as f:
            # 将整个数组写入文件,每个温度值占一行
            f.write("\n".join(map(str, temperature_data)))

        time.sleep(2)

 

最后持续地读取温度和光敏传感器的数据,并将数据显示在屏幕上,同时将温度数据写入 SD 卡文件, 借鉴官方例子,使用什么库获取到传感器的值,并将他们显示在屏幕上

 

下边是代码展示:

import board
import busio
import displayio

# 显示库
import adafruit_imageload
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font

import time
import analogio

# 温度传感器外置库
import adafruit_mcp9808

# SD卡外置库
import sdcardio
import storage

def run():
    # MCP9808温度传感器
    i2c = busio.I2C(board.SCL, board.SDA)
    mcp = adafruit_mcp9808.MCP9808(i2c)

    # SD卡
    spi = board.SPI()
    cs = board.D13
    sdcard = sdcardio.SDCard(spi, cs)
    vfs = storage.VfsFat(sdcard)
    storage.mount(vfs, "/sd")

    display = board.DISPLAY
    group = displayio.Group()

    # 加载图片
    image, palette = adafruit_imageload.load("/image/bg.png")
    palette.make_transparent(0)
    grid = displayio.TileGrid(image, pixel_shader=palette)
    group.append(grid)

    # 显示当前图像组
    display.show(group)

    # 加载字体并定义字体颜色
    font = bitmap_font.load_font("/font/SIMLI_16.pcf")
    # 白色
    color = 0xFFFFFF

    # 初始化文本标签
    text_label = label.Label(font, text="海内存知己,天涯若比邻", color=color)
    text_label.x = 0
    text_label.y = 60
    group.append(text_label)

    # 初始化光敏传感器
    abc = analogio.AnalogIn(board.A0)
    abc_label = label.Label(font, text=f"abc:  {abc.value}", color=color)
    abc_label.x = 20
    abc_label.y = 100
    group.append(abc_label)

    # 温度标签
    temp_label = analogio.AnalogIn(board.A3)
    temp_label = label.Label(font, text="", color=color)
    temp_label.x = 40
    temp_label.y = 100
    group.append(temp_label)

    # 显示修改后的图像组
    display.show(group)

    temperature_data = []  # 用于存储温度数据的数组

    while True:
        # 等待一段时间,避免刷新过快导致占用过多资源
        tempC = mcp.temperature
        tempF = tempC * 9 / 5 + 32   # 转换成  F
        temp_label.text = str(tempC)
        print("Temperature: {} C {} F".format(tempC, tempF))
        display.show(group)

        temperature_data.append(tempF)  # 将温度数据添加到数组中

        with open("/sd/temp.txt", "w") as f:
            # 将整个数组写入文件,每个温度值占一行
            f.write("\n".join(map(str, temperature_data)))

        time.sleep(2)


 

最新回复

但是有个问题温度传感器和读取sd卡线插法检查多次, 但是读取sd卡库反馈no sdcard异常有点奇怪。 杜绑线质量要好,而且不能这么长。   详情 回复 发表于 2023-11-15 15:12
点赞 关注
 
 

回复
举报

6960

帖子

11

TA的资源

版主

沙发
 

但是有个问题温度传感器和读取sd卡线插法检查多次, 但是读取sd卡库反馈no sdcard异常有点奇怪。

杜绑线质量要好,而且不能这么长。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表