你好呀,我是吴老师。
还记得第 13 课说过的那句话吗?
板子放不了音乐文件。
今天要给它补一句:
但板子可以从网上"听"音乐。
这块小小的板子,连上网之后能听全国各地的广播电台 —— 而且还能自己找到你所在城市的台。
读完之后,你应该能:说出"找台"和"放台"是两件事;让板子放出电台;说出为什么播放不占住程序;知道退出前必须做哪一件事。
用时:约 45 分钟。准备:板子、数据线、能上网的 WiFi、一个能出声的环境。
一、先分清:找台,和放台
这是这节课最重要的一条,一开始就说:
"找到电台"和"放出声音"是两件不同的事。
一个是"查号台",一个是"打电话"。
💡 为什么要分开?因为地址可能来自任何地方 —— 可以是从网上搜的,也可以是你自己敲进去的。 "放"这件事不关心地址是怎么来的,它只管放。
⭐ 这就是"分工"的好处:以后你想加一个"收藏夹", 只需要把地址存起来 —— 放台那半边一行都不用改。
二、先找台
"找台"这件事,一句话就能办完。它会替你做三件事:
| 它做的 | 就是 |
|---|---|
| ① 定位 | 按你的网络出口,判断你在哪个城市 |
| ② 翻译 | 把 'Hangzhou' 翻成 '杭州' |
| ③ 搜台 | 找出当地的电台 |
做完之后,它交给你一叠"地址"。 每一条里有三样东西:
| 一条地址里有 | 是什么 |
|---|---|
| 台名 | 给人看的,像「杭州 FM91.8」 |
| 地址 | 给"放台"用的 —— 这才是关键 |
| 频率 | 像 918 表示 91.8 MHz |
⭐ 注意"地址"这一样 —— 它不是一个名字,是一个能直接拿去用的东西。 为什么非要单独拎出来?下一节就知道了。
三、再放台
有了地址,放台也就一行的事。
⚠️ 但不是立刻出声。 它要先去网上拉一段数据回来(这叫"缓冲"), 大概 1~2 秒之后才有声音。
所以刚点完那一下"没反应",是正常的 —— 不是坏了。
⭐ 播放不占住程序
这一点和你前面学过的东西完全不一样:
| 播放的时候,程序能干嘛 | |
|---|---|
| 放一个音(第 13 课) | 被占住 —— 音放完才往下走 |
| 录一段音(第 12 课) | 被占住 —— 录完才往下走 |
| 放电台 | ✅ 不占住 —— 立刻返回,能一边播一边画界面 |
⭐ 所以电台应用能一边放歌、一边在屏幕上画进度条。
怎么做到的?后台有两个看不见的"帮手"在干活(C 层开了后台任务)。 你只管画你的,它们管拉数据、解码、喂喇叭。
四、它现在什么状态?
因为放台是"慢慢来的",你得一直问它到哪一步了:
radio.state()
返回一个数字,对应几种状态:
| 状态 | 意思 |
|---|---|
radio.IDLE | 没在放 |
radio.CONNECT | 正在连 |
radio.BUFFER | 正在缓冲(快出声了) |
radio.PLAY | 真的在响了 |
radio.PAUSE | 暂停中 |
radio.ERROR | 出错了 |
💡
BUFFER和PLAY要分清:缓冲中还没声音。 看见BUFFER就以为"坏了",是新手最常见的误会。
想要一句人看得懂的话? 它还能把状态数字翻成中文,直接画在屏幕上。
五、⚠️⚠️ 退出前必须做的一件事:把它停掉
退出应用之前,一定要让它停下来。
为什么? 因为那两个后台"帮手"还在跑,而且它们把喇叭的采样率改掉了。
| 不停掉的后果 | 你会看到什么 |
|---|---|
| 后台任务还在跑 | 喇叭的采样率没还回 16000 |
| 之后用第 12 课录音 | 录出来的是变速的声音 |
⚠️ 这个毛病最容易被误诊 —— 你可能会以为是"录音坏了"或者"识别不准", 其实是上一个应用没收拾干净。
⭐ 记住这条规矩:你借用了系统的东西,就要还回去。
六、动手做
任务一:先装上那台现成的收音机
板上已经有一台做好的收音机了 —— 不用你从零做。
打开 aiesp32.ai-scratch.cn/apps/install, 在示例应用里找到**「网络收音机」**,装到板子上(和你第 3 课学的一样)。
装好之后屏幕上就是这样 —— 不用你操作,它自己就开始放第一个台了:

💡 盯住屏幕右上角那个小字:「连接中」→「缓冲中」→「正在播放」。 这三个词是有先后的 —— 它得先把网上的声音攒一点下来,才能开始放。 看见「正在播放」的时候,声音也就出来了。
装上之后,请你亲手试这四件事:
| 试什么 | 看什么 |
|---|---|
| 点一个台,盯着屏幕 | 从「缓冲中」变成「正在播放」,花了多久? |
| 点暂停,等两秒,再点播放 | 恢复得快吗?(比第一次快得多) |
| 拉一下音量条 | 声音跟着变吗? |
| 退出应用,打开第 13 课的钢琴 | 钢琴的声音正常吗? |
⭐ 最后一条是重点,别跳过。
钢琴没问题,说明这台收音机走的时候把东西还回去了(它调了
radio.stop())。 没还的话,之后录音、钢琴都会出怪毛病 —— 而且你多半会以为是"钢琴坏了",根本想不到是上一个应用留下的。
任务二:用「优化」改造它
现在它是你的了。长按它的图标,选「优化」, 然后告诉 AI 你想改成什么样 —— AI 会在现有代码基础上改,改坏了还能一键退回上一版。
挑一个来改:
请帮我把这台收音机改成 _____________ :
1. _____________
2. 其余功能都别动,只改我说的这些
3. 改完告诉我你动了哪几行
几个方向,挑一个:
| 想改成 | 可以这么说 |
|---|---|
| 换个样子 | "配色改成暖色,像一台老式木壳收音机" |
| 加个收藏 | "我常听的台能存下来,下次打开还在" |
| 加个报时 | "整点的时候,把当前时间念一句出来" |
| 改多台切换 | "加两个按钮,能直接切上一个台 / 下一个台" |
⚠️ 最后一句"其余功能都别动"不要删。 不加这句,AI 有时会顺手把别的地方也改了。
改完请检查:
- 你要的那处改对了吗?
- 播放、暂停、音量这些原来的功能,还好用吗?
- 不行就长按 →「退回上一版」,回到能用的状态再来一次。
七、只改一个条件
挑一个来改,先说出你的预测,再动手:
| 我改的条件 | 我预测会怎样 | 实际怎样 |
|---|---|---|
| 换个别的城市的电台地址 | ||
退出前不调 radio.stop() | ||
播放中调用第 12 课的 audio.record() | ||
手动把地址里的 http:// 改成 https:// |
💡 最后一条会直接失败。原因在这一课不讲, 你只要知道:自己手写地址的时候,必须是
http://开头。
八、自检小测
九、还想玩点什么
| 想做什么 | 可以这样描述给 AI |
|---|---|
| 一键听家乡 | 把家乡城市的电台存下来,一个按钮直接放 |
| 电台收藏夹 | 把喜欢的台存进文件,下次打开还在 |
| 会报时的收音机 | 整点的时候插一句"现在几点" |
| 音量旋钮 | 屏幕上画个滑块,拖着调音量 |
| 自动换台 | 这个台连不上,自动试下一个 |
⭐ 到这一课,「连上网」这一章就讲完了。
回头看看你走过的路:
课 板子学会了什么 13 连上网 —— 打开了通往外面的门 14 和另一块板直接说话 —— 不用路由器也行 15 听全世界的电台 —— 用上了这扇门 再往下,板子要去学一件更厉害的事:听懂你说的话。