Submit

14 / 20

板对板通信

将电位器读数直接发送到另一块 ESP32。

运行此实验 →
ESP32 教学电路插图,显示模组、引脚和本课实验元件

实验目标

让两端信道一致后发送读数,再故意设成不同信道。

工作原理

将电位器读数直接发送到另一块 ESP32。 接收端收不到这条消息;两端必须使用相同的 Wi-Fi 信道。 此处为配套教学模型,硬件示例基于经典 ESP32 与 Arduino-ESP32 3.x;网络、声波、负载和机械运动均为简化演示。

动手试一试

  1. 打开此实验
  2. 让两端信道一致后发送读数,再故意设成不同信道。

接线

  • 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 信道。

参考资料

Arduino-ESP32 ↗ · GPIO 参考 ↗

MAKE A THOUGHTFUL CHOICE

Your shortlist, side by side.

Pricing models are indicative. Check each official website for current plans and limits.