自学读本:跟着读、照着做,卡住就问 AI
你好,我是吴老师。
这份是给你自己读的——不用等我讲,你一段一段往下看,看到让你停下来的地方,就照着做一遍。看不懂的整段复制给 AI,加一句"请一次只解释一个概念,讲完问我一个小问题"。
读完之后,你应该能:说清内存和 SD 卡断电后为什么不一样;解释文件、扩展名、格式化是干嘛的;写出"打开→读写→关闭"三步并说清为什么
close()不能省。用时:60–90 分钟。准备:板子、MicroSD 卡(已格式化为 FAT32)、数据线、已经接入板卡 Skill 的 WorkBuddy。
一、一个会"失忆"的板子
第 6 课的弹球如果加个"最高分":你玩到 120 分,一按 RESET 重启——最高分归零。
因为分数存在**内存(RAM)**里。内存靠电"活着",断电全没。这就像电脑文档没保存就断电,白写了。
可你的手机照片、U 盘文件、板子上的 MicroSD 卡——断电后为什么还在?
这就是今天的问题。
目标一句话:让板子把自己的"经历"记下来,重启之后它还记得。
二、实验:重启也不清零的计数器
请使用课程的 esp32s3-touchboard-hardware-dev Skill,做"持久计数器":
每次开机,把 SD 卡里 count.txt 的数字读出来 +1 再写回去,
屏幕显示"这是第 N 次开机",串口也打印。
SD 卡用 SD_MMC,先 setPins(38,40,39,41,48,47) 再 begin。
如果 count.txt 不存在,就从 1 开始。帮我新建程序并烧录。
按几次 RESET 试试:
| 操作 | 屏幕显示 |
|---|---|
| 第一次开机 | 第 1 次 |
| 按 RESET | 第 2 次 |
| 再按 | 第 3 次 |
板子记住了。 它把数字放在了断电也不丢的地方——MicroSD 卡。
三、内存靠"电"活着,闪存靠"锁"记住
内存(RAM):一个个小格子靠电流维持状态。像一张用发光颜料写的黑板——有光照着(供电)字就在,灯一灭字就消失。
闪存(Flash,SD 卡/U 盘/手机存储):电写进去后电荷被"锁"住,断电也跑不掉。像刻在石板上的字——不用电也一直在。
| RAM | 闪存(SD 卡) | |
|---|---|---|
| 存东西靠 | 电流维持 | 电荷被锁 |
| 断电 | 全丢 | 还在 |
| 像什么 | 发光黑板 | 刻石板 |
| 用途 | 临时算数(草稿纸) | 长期保存(保险箱) |
⚠️ 比喻有边界:闪存不是真"永远"——它有写次数寿命(几十万次起),写太频繁会磨损;写入也不是瞬间的,要先擦后写,所以比内存慢。
一句话:RAM 是草稿纸,SD 卡是保险箱。
四、文件:打包 + 命名
SD 卡怎么分得清照片、音乐、文字?靠文件。
- 文件名 + 扩展名:
count.txt、1.jpg、note.wav。扩展名是标签,告诉别人这是文字、图片还是声音 - 目录(文件夹)+ 路径:
/photos/1.jpg= "photos 目录里的 1.jpg" - 格式化:新卡第一次用,把空柜子装好抽屉架、做一份"目录本"(哪个抽屉在哪、装了什么)
程序读写 = 打开(找抽屉)→ 读/写(拿/放)→ 关闭(合上并记目录本)。
第 10 课(或稍后)你会读照片;今天学"写"。
五、写文件:那行不能省的 close()
计数器 +1 的核心:
打开 count.txt 用于写入
往里写当前数字
关闭文件 ← 千万别省!
板子写文件时,先把数据放在自己的临时缓冲,攒够了才真的往 SD 卡写。close() 就是在说:"把攒的货真的放进保险箱,更新目录本。"
不 close 就断电 → 缓冲里的数据丢了——你写了,但没存上。
💡 写完文件,一定 close()。 这是工程习惯第一课。
六、只改一处:删掉 count.txt 会怎样
把 SD 卡里的 count.txt 删掉,再重启板子:
| 我改了什么 | 我预测 | 实际 |
|---|---|---|
| 删掉 count.txt 重启 |
程序遇不到文件,会按写好的"从 1 开始"处理 → 第 1 次。
再试试:把 count.txt 里的数字手动改成 100 再重启——程序"读文件"而不是"从零记忆",一切以文件里存的内容为准。
七、为什么板子要自己插一张卡
板子身上也有一小块 Flash,能存数据。但:
- 小,存不了多少
- 拿不出来——存在里面的数据不能插电脑看
SD 卡可以随时拔出来插电脑:把 count.txt 打开,亲眼看到那串数字。数据能带出来,数据才是你的。
八、下一课预告
本课存的是数字。第 12 课录的声音在内存里也是一串数字(一秒 16000 个)。把这串数字写进文件,声音就能存下来——下一课做"声音留言机",把录音存成 SD 卡里的 wav。
九、故障排查
| 现象 | 先检查 |
|---|---|
| 读不到卡(mount failed) | 卡插紧了吗?格式化了吗(FAT)?setPins 在 begin 前吗? |
| 写了重启就没了 | 忘 close() 了吗? |
| 能读不能写 | 卡套写保护锁拨开没有? |
| 打不开文件 | 目录存在吗?路径对吗? |
十、过关检查
- RAM 和 SD 卡断电后有什么区别?为什么?
- 格式化干什么?扩展名干嘛的?
- 写文件三步?
close()为什么不能省? - 计数器重启接着涨,"记住"的是什么?存在哪?
- 删掉 count.txt 重启会怎样?为什么?
- 为什么数据要能带出来?
十一、还能玩什么
- 开机日记:每次开机往 diary.txt 追加一行
- 弹球最高分:撞墙最高分存 SD,重启不丢
- 音量记录:每分钟把音量记一行
- 我的档案卡:自我介绍.txt 开机读出来显示
下一课见——把声音也锁进保险箱。