14 / 20
板对板通信
将电位器读数直接发送到另一块 ESP32。
运行此实验 →实验目标
让两端信道一致后发送读数,再故意设成不同信道。
工作原理
将电位器读数直接发送到另一块 ESP32。 接收端收不到这条消息;两端必须使用相同的 Wi-Fi 信道。 此处为配套教学模型,硬件示例基于经典 ESP32 与 Arduino-ESP32 3.x;网络、声波、负载和机械运动均为简化演示。
动手试一试
- 打开此实验
- 让两端信道一致后发送读数,再故意设成不同信道。
接线
- 2.4 GHz — 两块 ESP32,相同信道与正确对端 MAC
- GPIO 34 — 发送端电位器
示例代码
#include <WiFi.h>
#include <esp_now.h>
#include <esp_wifi.h>
// Replace with the other board MAC. Upload to both boards on the same channel.
uint8_t peerAddress[] = {0x24,0x6F,0x28,0x00,0x00,0x01};
void receive(const esp_now_recv_info_t*, const uint8_t *data, int len) {
if (len != sizeof(uint16_t)) return;
uint16_t value; memcpy(&value, data, sizeof(value));
Serial.printf("Received: %u\n", value);
}
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
esp_wifi_set_channel(1, WIFI_SECOND_CHAN_NONE);
if (esp_now_init() != ESP_OK) return;
esp_now_register_recv_cb(receive);
esp_now_peer_info_t peer = {};
memcpy(peer.peer_addr, peerAddress, 6); peer.channel = 1;
peer.encrypt = false;
esp_now_add_peer(&peer);
}
void loop() {
uint16_t reading = analogRead(34);
esp_now_send(peerAddress, (uint8_t*)&reading, sizeof(reading));
delay(200);
}检查理解
信道不一致时会怎样?
查看答案
接收端收不到这条消息;两端必须使用相同的 Wi-Fi 信道。