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

上图为Grove接口的OLED 0.9 寸 (驱动芯片为SSD1315)
在根据官方的教程安装完Arduino环境后,这边一共有两个库是官方的BSP。

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

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

我们使用上述的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卡案例

效果如下所示

我要赚赏金
