你好,我是吴老师。
这份是给你自己读的——不用等我讲,你一段一段往下看,看到让你停下来的地方,就照着做一遍。看不懂的整段复制给 AI,加一句"请一次只解释一个概念,讲完问我一个小问题"。
读完之后,你应该能:说清 ESP-NOW 是什么协议、靠什么工作、一台能跟几台说话;说出它的工作距离、包大小和适不适合;让两块板"现场扫描"自动配对;解释单播与广播;把 ESP-NOW 与 WiFi、蓝牙的相同点和不同点讲清楚。
用时:60–90 分钟。准备:2 块板 + 数据线 + Skill 已接入的 WorkBuddy。不用手机、不用电脑、不连路由器。
一、ESP-NOW:到底是个什么协议?
先把它的"户口本"讲清楚。WiFi、蓝牙、ESP-NOW 都靠无线电波说话,但"怎么说"的规矩不一样。
- WiFi(17–19 课):要连路由器,说话按 TCP/IP、HTTP 规矩——能上互联网,也能发大数据。
- 蓝牙 BLE(20 课):不用路由器,但要按"文件夹"(服务/特征值)规矩,还得先听见对方。
- ESP-NOW(本课):同一块 WiFi 芯片,不开路由器、不连网络,像两台对讲机直接对讲。
ESP-NOW 是什么:它是 ESP32 芯片自带的一种直连无线协议,用的是和 WiFi 一样的无线电射频(802.11),但不建立完整的 WiFi 连接、也不去连互联网。它把要发的话打包成一个个小数据包,靠对方的 MAC 地址直接送过去——发就发,收就收,没有"你好,我是谁"的握手,也没有"你同不同意"的连接过程。所以它快、简单、不需要路由器。
它是怎么工作的(原理三步):
- 认人:每块 ESP32 芯片都有一个唯一的 MAC 地址(相当于身份证号)。
- 打包:把要送的话分成一个个小包。⚠️ 每包最多约 250 字节(约 250 个英文字母的大小)。
- 直投:
esp_now_send(目标MAC, 数据)直接把小包砸向那个 MAC 地址,对方注册的回调函数立刻收到。
一台能跟几台说? 两种喊法:
- 一对一(单播):指定一个 MAC,只说给那台——像悄悄话。
- 一对多(广播):目标填全 F 的 MAC(
FF:FF:FF:FF:FF:FF),射程内所有 ESP-NOW 板都收到——像大喇叭。 - 单个 ESP-NOW 节点最多能和多个接收者配对(可注册多台对标的 MAC,做成一对多),但这几台都必须在同一个 WiFi 信道上。
它有多远、适合干嘛?
- 工作距离:属于近距离直连,和 WiFi 一个量级——开阔地约几十米,隔墙、站一排人、拉远都会掉包收不到。它不是用来广域联网的。
- 用途:适合板子之间、近距离、要低延迟、不需要互联网的"即时喊话"——比如无线答题器、门铃呼叫、传感器上报、双板对讲。
- 不适合:不能上互联网;传输的是广播(课堂版未加密,谁在同信道都可能收到),私密数据要用 MAC 白名单 + 加密配对(见 Skill 的
Example_47_espnow_walkie_talkie说明)。
一句话先记下:ESP-NOW 是"不找路由器、不经互联网、靠 MAC 地址直投"的板对板近距无线——快、简单,但短、不分大包,默认还是广播(不加密)。
悬念:两块板谁都不连 WiFi,A 按一下键,B 立刻收到一句话。
二、两块板"找朋友"(现场扫描配对)
请使用课程的 esp32s3-touchboard-hardware-dev Skill,
给两块板都烧录 assets/codes/demo01_espnow_find_friend。
两块板同时长按 BOOT 键 2 秒——屏幕进入"找朋友中"。告诉我发生了什么。
5 秒窗口里它们互相广播"我在这",窗口结束,各自动记下对方的 MAC 地址(存在小仓库 NVS,断电不失忆)。
| 我观察到的现象 | 勾选 |
|---|---|
| 两块板都进入"找朋友中" | |
| 5 秒内都显示"找到伙伴" | |
| 屏幕上出现对方短 MAC | |
| 我们谁都没抄过 MAC 地址 |
它们怎么认识的? 配对窗口里每块板都广播"我在这";对方听到后从无线电包里读出喊话者 MAC,记下来。现场扫描 + 自动记忆——没人抄地址,也不需要路由器。
拓展知识:MAC 地址是什么?会不会撞车?
前面一直说"靠 MAC 地址认人",那 MAC 究竟是什么?
- MAC 地址 = 一块网络设备出厂时就印死在芯片里的身份证号,像一串
AA:BB:CC:DD:EE:FF这样的十六进制数字,每个设备的 MAC 都不同。它和"IP 地址"不一样:IP 是"住址"(在外面租的、会变),MAC 是"身份证号"(天生的、不变)。 - 用来干嘛:在局域网里,数据包要靠 MAC 才知道"送到哪块板子手上"——就像寄信,光有姓名不够,还得有门牌号。
- 会不会一样/撞车? 理论上每个设备的 MAC 都唯一,厂家分号时保证不重复,所以你几乎不会碰到两块板 MAC 相同("撞车"的概率极低)。但有两点要注意:
- 广播时"谁都收到":广播发的目标 MAC 是
FF:FF:FF:FF:FF:FF,这不是某块板的真实 MAC,而是"发给所有人"的特殊地址——所以广播时你看到的不是"谁谁谁",而是像A4:...那样的喊话者真实 MAC。 - MAC 能被报出来:MAC 是公开可见的(别人能"读到"你的 MAC),所以它不是保密口令。私密通信要靠加密配对,而不是靠"藏住 MAC"。
- 广播时"谁都收到":广播发的目标 MAC 是
一句话:MAC 是每块板天生的、唯一的身份证号;广播用的
FF:FF:FF:FF:FF:FF是"喊给大家听"的特殊地址,不是某块板的真 ID。
三、配对之后:点对点喊话
短按 BOOT。A 显示"我呼叫了伙伴",B 立刻显示"伙伴在喊我!我回:收到啦"并自动回一句,A 计数 +1。
| 我观察到的现象 | 勾选 |
|---|---|
| A 按 BOOT,B 几乎同时收到 | |
| B 自动回"收到啦",A 也收到 | |
| 呼叫/回话次数都在涨 | |
| 全程没有 WiFi、路由器、电脑 |
话直接 A→B、B→A,不经过路由器 = 点对点(一对一)。
⚠️ 比喻有边界:"像对讲机"指点到点直连;但传的是数字小包(每次最多约 250 字节),且有距离限制(同 WiFi 量级,开阔地几十米)。
四、两种喊法:单播 vs 广播
demo01 是悄悄话(单播)——只发给记住的那个伙伴。
广播不挑对象:向射程内所有 ESP-NOW 板喊话,谁收到算谁的,不用配对。
请给一块板改烧录 assets/codes/demo02_espnow_shout 当"喊话员",
其余板(demo01 的板也会收广播)当听众。喊话员按 BOOT。
听众屏幕跳出:你好呀 / 来自 A4…(喊话员 MAC)。
| 单播(demo01) | 广播(demo02) |
|---|---|
| 只发给指定 MAC | 发给范围内所有人 |
| 先配对 | 不用配对 |
| 悄悄话 | 大喇叭 |
两个代码名:
esp_now_send(目标MAC, 数据):把数据发出去;目标填全 F 的 MAC(FF:FF:FF:FF:FF:FF)= 广播。esp_now_register_recv_cb(...):登记"收到就叫我"——有人发数据过来,自动跳到回调处理。
ESP-NOW 没有"连接"也没有"文件夹":发就发,收就收。
五、改一个条件:拉远
先预测,再实验:A、B 从并排 → 走廊拉远 / 中间隔墙 / 站一排人,再呼叫。
| 我改了什么 | 我预测 | 实际看到 |
|---|---|---|
| 越拉越远、隔墙 | ||
| 中间站一排人 |
某距离上 B 不再回"收到啦"。ESP-NOW 是近距离直连——这也预告了第 22 课的问题:要传多远,决定用哪种无线。
六、三种无线放一起看
它们相同在哪?
- 都靠无线电波——不用线,靠空气传。
- 都要认地址——WiFi 认 IP、BLE 认设备名、ESP-NOW 认 MAC 地址,都得先"知道对方是谁"。
- 都会被干扰、有距离限制——隔墙、站人、拉远都会变弱。
它们不同在哪?
| 无线 | 要中间人吗 | 规矩 | 认谁 | 距离 | 一份数据多大 | 适合 |
|---|---|---|---|---|---|---|
| WiFi(17–19 课) | 要路由器 | TCP/IP + HTTP | IP 地址 | 远(几十米~盖楼) | 大(数据包可大) | 上互联网、大数据 |
| BLE(20 课) | 不要 | 服务/特征值 | 设备名/MAC | 近(几米~十米) | 小(省电) | 连手机电脑、省电、小数据 |
| ESP-NOW(本课) | 不要 | 几乎没有(直接发) | MAC 地址 | 近(开阔地几十米) | 小(单包最大约 250 字节) | 板与板、近距离、低延迟、即时 |
一对一 vs 一对多
| 喊法 | 给谁 | 要配对吗 | 例子 |
|---|---|---|---|
单播(esp_now_send 指定 MAC) | 只看那一个 | 要(先记下对方 MAC) | 双板悄悄话、传感器点对点上报 |
广播(目标填 FF:FF:FF:FF:FF:FF) | 射程内所有板 | 不用 | 全班同步播报、题号广播 |
补充:想让"一块板喊话、多块板都收",用广播;想让"两块板专门对讲、别人收不到",用单播。广播公开、单播才认伙伴。
一句记牢:WiFi 找路由器、BLE 找文件夹、ESP-NOW 谁都不找——看你需要多远、多大、多省电、要不要上互联网。
七、故障排查:双板没通怎么办
| 现象 | 观察还是推测? | 下一步 |
|---|---|---|
| 配对窗口结束没找到伙伴 | 观察 | 推测没同时进窗口 → 两块板同时长按、都在"找朋友中"再松手 |
| 配对成功但呼叫没回应 | 观察 | 放近到 1 米内;都显示"已配对"吗? |
| 收不到任何广播 | 观察 | 信道不同 → 全部固定信道 1(ESPNOW_CHANNEL) |
| "收到别人的话" | 观察 | 隔壁也在广播 → 广播公开,单播才认伙伴 |
看屏幕状态(待配对/找朋友中/已配对)最直接;"没收到回话"是观察,"没配对好"是推测。
八、过关检查
不看 AI,自己说:
- ESP-NOW 是一种什么协议?它用哪块射频、要不要建立完整的 WiFi 连接?
- ESP-NOW 靠什么"认人"?和 WiFi 认的 IP 有什么区别?
- ESP-NOW 一台能跟几台说?"一对一"和"一对多"分别是哪种喊法?用哪个 MAC?
- 它传一份数据最大约多少字节?工作距离大概多远?隔墙、站人会怎样?
- 两块板没抄 MAC 怎么认识的?(现场扫描 + 自动记忆存 NVS)
esp_now_send(FF:FF:FF:FF:FF:FF, ...)vsesp_now_send(朋友的MAC, ...)是什么喊法?- 广播不用配对,是不是"更厉害"?
FF:FF:FF:FF:FF:FF是哪块板的 MAC 吗?各适合什么场景? - MAC 地址是什么?会不会两块板一样?它算保密口令吗?私密通信靠什么?
- 拿远为什么收不到?说明 ESP-NOW 适合远距离还是近距离?
- 双板对讲/传感器上报/全班同步播报/手机连板——分别选 ESP-NOW、BLE 还是 WiFi?
九、还能玩什么
| 方向 | 想法 | 继续想 |
|---|---|---|
| 无线答题器 | 老师板广播题号,学生板抢答 | 怎么判断谁先?广播还是单播? |
| 门铃呼叫器 | 门口板按 BOOT,屋里板响铃+亮灯 | 隔墙收得到吗? |
| 十板同步播报 | 一块板广播,十块板同时显示 | 想轮流说怎么编号? |
| 双板对讲机 | 参考板载 Example_43 语音对讲 | 语音比文字难在哪?数据大几倍? |
下一课预告:通信选型实战——给你场景,你来选该走哪条路。
