ESP8266 MP3制作——从sd卡读取数据并显示出来

本文讲述了作者在使用SSD1306 OLED屏幕时遇到的显示问题,数据读取后显示乱码,通过发现换行符差异解决方法,包括修改文件格式和调整代码来适应不同系统换行符。

读取数据并显示

概述

这一部分本来并不难,想直接做不用记录,但是早上还是做了快半个小时,还是写一下出现的一些问题吧。从sd卡中读取数据已经在上一篇文章中有提及,这里就不多赘述,主要是说一下SSD1306 OLED屏幕的一个函数,display.drawXbm()

开始操作

之前已经把OLED显示做好了,现在再把读出来的数据作为参数传进去就行了,所以先来了解一下这个函数的参数(并非来自官网)

drawXbm(34,14,width,height,testCode)
  1. 第一个参数和第二个参数分别对应起点的x和y坐标,参考系是默认是左上角开始,而我的0.96寸的OLED屏幕是128*64个像素点的,所以根据这些数据的计算就可以准确得出自己想要绘画的位置了。
  2. 第三个参数就是宽和高,起点,宽,高,这几个量合起来就可以确定绘画范围
  3. 最后是绘画的内容,我觉得应该是前四个参数合起来就可以确定元素个数,所以这个内容数组没有要求填写数组大小,我试了一下,用偏大的内存空间也是可以正常显示的
  4. 所以在使用的时候可以创建一个足够大的数组,每次使用之前用memset或者for循环清空数组(置为0),然后就把读到的数据放进去,要显示下一个图像就把这个清空读下一个即可。

遇到的问题

我把数据读出来,是十进制的数据,结果OLED屏幕显示乱码,我用这串十进制数直接写进PROGMEM,结果显示正常,然后再把我得到的height和width数据输出,结果width居然有一百多
原数据:

24
24

读取代码:

if(myFile.available())
{
   
   
  char c1 = myFile.read();
  char c2 = myFile.read();
  char c3 = myFile
### 如何在 ESP32-S3 上使用 Arduino 框架SD ESP32-S3 是一款功能强大的微控制器,支持多种外设接口,其中包括 SPI 接口用于连接外部设备如 SD 模块。通过 Arduino 开发环境可以轻松实现对 SD 的操作。 #### 配置硬件连接 为了使 ESP32-S3 能够正常访问 SD ,需按照以下方式完成硬件接线: | **ESP32-S3 Pin** | **SD Card Module Pin** | |-------------------|-------------------------| | GPIO35 (MOSI) | MOSI | | GPIO37 (SCK) | SCLK | | GPIO34 (MISO) | MISO | | GPIO10 (CS) | CS | | GND | GND | | 3V3 或 5V | VCC | 注意:某些 SD 模块可能需要 5V 的电源输入,而另一些则兼容 3.3V 输入,请根据具体模块规格调整供电电压[^1]。 #### 安装必要的库文件 要操作 SD ,在 Arduino IDE 中需要安装 `SD` 库以及其依赖项 `SPI` 库。如果尚未安装这些库,则可以通过 Arduino IDE 的库管理器来添加它们。 - 打开 Arduino IDE 进入菜单路径:“工具 -> 管理库...” - 在搜索框中分别查找安装 “SD” 和 “SPI”。 #### 编写代码示例 下面是一个简单的程序示例,展示如何初始化 SD 与之交互以读取数据。 ```cpp #include <SPI.h> #include <SD.h> const int chipSelect = 10; // 设置片选引脚为GPIO10 void setup() { Serial.begin(115200); while (!Serial) { ; } // 等待串口监视器打开 if (!SD.begin(chipSelect)) { Serial.println("Card failed, or not present"); return; } Serial.println("card initialized."); } void loop() { File dataFile = SD.open("/test.txt"); // 尝试打开名为 test.txt 的文件 if (dataFile) { Serial.println("file opened"); while (dataFile.available()) { Serial.write(dataFile.read()); // 逐字节打印文件内容到串口 } dataFile.close(); } else { Serial.println("error opening file"); } delay(5000); // 延迟五秒再重复尝试 } ``` 上述代码实现了基本的功能——即检测是否存在有效 SD 尝试从中取指定名称的文本文件 `/test.txt` 内容至串行端口中显示出来[^2]。 #### 注意事项 当运行此项目时可能会遇到一些常见问题: - 如果无法识别存储,请确认物理连线无误; - 文件系统格式应采用 FAT16/FAT32/ExFAT 格式的分区才能被正确解析; - 对于大容量片建议测试前先对其进行低级格式化处理。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值