ESP32 BLE Mesh仅连接节点响应开关命令问题求助
以下是可能遗漏的配置和问题原因:
应用密钥未绑定到所有节点的OnOff Server模型
你在nRF App分配应用密钥时,可能只给当前连接的节点完成了密钥绑定操作,其他节点的OnOff Server模型并未关联该密钥。需要逐个进入每个节点的模型列表,确认OnOff Server已绑定正确的应用密钥。命令发送模式错误(用了单播而非组播/广播)
如果发送命令时选择的是单播模式,命令只会发送给当前连接的节点。必须切换到组播或广播模式,才能让同网络内的所有目标节点接收命令。建议创建一个专用组,把所有节点的OnOff Server加入该组,然后向组地址发送命令。节点未加入同一个组地址
即使在App里创建了组,也要确保每个节点的OnOff Server模型都手动加入了这个组地址(比如常用的0xC000)。默认的onoff_server示例可能不会自动加入组,需要在App中逐个节点配置。代码中未注册组地址
检查ESP-IDF的onoff_server示例代码,默认可能没有添加组地址注册逻辑。需要在初始化OnOff Server模型后,调用esp_ble_mesh_model_add_group()将模型加入指定组地址,示例代码如下:esp_ble_mesh_model_add_group(&onoff_server_model, 0xC000);这样节点才能监听对应组的组播命令。
节点不在同一个Mesh网络
配网后要确认三个节点的网络密钥、网络ID完全一致。如果某个节点配网时用了不同的网络参数,会导致它无法接收其他节点转发的命令。可以在nRF App的节点详情中查看网络信息进行核对。中继功能未开启(节点间距较大时)
如果节点之间距离较远,需要确保至少一个节点开启了中继功能。ESP-IDF默认可能开启中继,但可以检查代码中是否调用了esp_ble_mesh_prov_enable_relay(true),或者在nRF App中查看节点的Relay状态是否为开启。没有中继的话,不在APP直连范围内的节点可能收不到命令。
内容的提问来源于stack exchange,提问作者amatsusah

