本帖最后由 bugensui 于 2025-9-20 16:00 编辑
一共2个esp设备,1个是esp32开发板的开关按钮(是发送端),另外1个是esp32开发板上的板载led灯(接收端),目前esphome的espnow只能在同1个信道通信(比如:发射端连接的是wifi 1,接收端连接的是wifi 2,那可能无法通信,因为不是一个信道),示例是用esp开发板1连接的开关,切换esp32开发板2上的led灯(蓝色的灯)。
发送端设备yaml代码
里面主要的是替换成接收端mac地址,然后这个字符串std::string data = "kai"可以自定义,你定义为on或者off都可以,到时候接收端判断这个字符即可。
espnow:
auto_add_peer: true
binary_sensor:
- platform: gpio
name: relay_toggle
pin:
number: GPIO12
mode:
input: true
pullup: true
id: gpio_light_id
on_state:
then:
- espnow.send:
address: 68:接收端mac地址:CC
data: !lambda |-
std::string data = "kai" ;
unsigned char* buffer = (unsigned char*)data.c_str();
return std::vector<unsigned char>(buffer, buffer + data.length() + 1);
接收端设备yaml代码
下面代码里,替换掉发送端设备的mac地址,通过判断字符串的方式验证是否切换灯的开和关,esp32kf3_led这个是接收端设备上灯的id
espnow:
auto_add_peer: true
peers:
- "88:发送端设备mac地址:34"
on_receive:
- logger.log:
format: 'Received "%s" from %s: RSSI: %ddBm'
args:
- data
- format_mac_address_pretty(info.src_addr).c_str()
- info.rx_ctrl->rssi
- lambda: |-
const char * command = (const char *)data;
if (strncmp(command, "kai", 3) == 0) {
auto call = id(esp32kf3_led).toggle();
call.perform();
ESP_LOGI("jieguo", "kai");
}
|