这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【M5STACKTAB5W/OBATTERY】【二】在Arduino环境下,进行

共1条 1/1 1 跳转至

【M5STACKTAB5W/OBATTERY】【二】在Arduino环境下,进行SD卡读取,并且显示目录内容

工程师
2026-01-21 01:38:19     打赏

简介

经过我的一两周内的体验后,我个人觉得M5的WEB UI 的编程方式太死板了。 于是我花了点时间把系统又刷回了Arduino。 其主要原因是这个板子上面的模块对非M5官方出的传感器支持的不是很好。 尽管都是Grove的接口,但是并没有针对比如说Seeed的芯片驱动。这就导致了原本两个都是Oled,但是不同芯片的根本无法使用图形化编程。如果在在线的IDE中编辑的话。驱动起来又十分麻烦。于是决定直接换成了Arduino的环境。 对个人而言我并不是很喜欢这个图形化环境,虽然它起步使用着比较简单,但是全部组合在一起的话就比较复杂。像复杂的业务的话又要使用它生成的代码。拷贝到在线的IDE中再加上自己的逻辑。十分麻烦。


2020a03939aee39579ffd8c7afb6c8f2.jpg

上图为Grove接口的OLED 0.9 寸 (驱动芯片为SSD1315)


在根据官方的教程安装完Arduino环境后,这边一共有两个库是官方的BSP。

image.png


第一个库是M5UNIFIED 主要是负责板载外设的驱动。 驱动的支持列表如下所示。

image.png

所以在使用相关的功能的时候不需要额外的写驱动。第二个库就是M5GFX,主要是负责UI相关的。

image.png


我们使用上述的BSP函数来尝试读取SD卡的文件内容,并且将其打印显示在屏幕上。 代码如下所示

#include <Arduino.h>
#include <SPI.h>
#include <SD.h>
#include <M5Unified.h>
#include <M5GFX.h>

#define SD_SPI_CS_PIN   42
#define SD_SPI_SCK_PIN  43
#define SD_SPI_MOSI_PIN 44
#define SD_SPI_MISO_PIN 39

void listDir(fs::FS &fs, const char * dirname) {
    File root = fs.open(dirname);
    if (!root) {
        M5.Display.println("Failed to open dir");
        return;
    }
    if (!root.isDirectory()) {
        M5.Display.println("Not a directory");
        return;
    }

    File file = root.openNextFile();
    while (file) {
        if (file.isDirectory()) {
            M5.Display.printf("[DIR ] %s\n", file.name());
        } else {
            M5.Display.printf("[FILE] %s (%d KB)\n",
                              file.name(),
                              file.size() / 1024);
        }
        file = root.openNextFile();
    }
}

void setup() {
    M5.begin();

    M5.Display.setRotation(1);
    M5.Display.clear(TFT_BLACK);
    M5.Display.setTextColor(TFT_WHITE);
    M5.Display.setFont(&fonts::FreeMonoBold12pt7b);
    M5.Display.setTextSize(1);

    /* 初始化 SPI + SD */
    SPI.begin(
        SD_SPI_SCK_PIN,
        SD_SPI_MISO_PIN,
        SD_SPI_MOSI_PIN,
        SD_SPI_CS_PIN
    );

    M5.Display.println("Initializing SD...");
    if (!SD.begin(SD_SPI_CS_PIN, SPI, 25000000)) {
        M5.Display.println("SD Card FAILED");
        while (1);
    }

    M5.Display.println("SD Card OK\n");
    M5.Display.println("SD File List:");
    M5.Display.println("--------------------");

    /* 列出根目录文件 */
    listDir(SD, "/");
}

void loop() {
    
}

上述的代码是参考了 快速上手 中的SD卡案例

image.png


效果如下所示

de46cb963ca6ae54f242b94c977b274d.jpg




关键词: M5STACKTAB5W     SD     屏幕显示    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]