// Week 11 — ESP-NOW sender (Board 1, XIAO ESP32-C3) // Button D0 — debounced press sends message to Board 2 #include #include const int buttonPin = D0; const unsigned long DEBOUNCE_MS = 50; // 接收端MAC地址 uint8_t receiverMac[] = {0x64, 0xE8, 0x33, 0x85, 0xA7, 0x00}; typedef struct { uint8_t pressCount; } Message; Message outgoing; esp_now_peer_info_t peerInfo; int buttonState = LOW; int lastReading = LOW; unsigned long lastDebounceTime = 0; int pressCount = 0; void OnDataSent(const uint8_t *mac, esp_now_send_status_t status) { Serial.print(F("Send status: ")); if (status == ESP_NOW_SEND_SUCCESS) { Serial.println(F("✅ OK")); } else { Serial.println(F("❌ FAIL")); } } void setup() { Serial.begin(115200); pinMode(buttonPin, INPUT); Serial.println(F("=== ESP-NOW Sender ===")); Serial.print(F("Sender MAC: ")); Serial.println(WiFi.macAddress()); // 只设置WiFi模式,不设置信道 WiFi.mode(WIFI_STA); // 延迟一下让WiFi初始化 delay(100); if (esp_now_init() != ESP_OK) { Serial.println(F("❌ ESP-NOW init failed")); return; } esp_now_register_send_cb(OnDataSent); // 配置peer - 不指定信道 memcpy(peerInfo.peer_addr, receiverMac, 6); peerInfo.channel = 0; // 0表示自动 peerInfo.encrypt = false; peerInfo.ifidx = WIFI_IF_STA; if (esp_now_add_peer(&peerInfo) != ESP_OK) { Serial.println(F("❌ Failed to add peer")); return; } Serial.println(F("✅ ESP-NOW sender ready")); Serial.print(F("Target MAC: ")); for (int i = 0; i < 6; i++) { Serial.printf("%02X", receiverMac[i]); if (i < 5) Serial.print(":"); } Serial.println(); } void loop() { int reading = digitalRead(buttonPin); if (reading != lastReading) { lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > DEBOUNCE_MS) { if (reading != buttonState) { buttonState = reading; if (buttonState == HIGH) { pressCount++; outgoing.pressCount = (uint8_t)pressCount; esp_err_t result = esp_now_send(receiverMac, (uint8_t *)&outgoing, sizeof(outgoing)); if (result == ESP_OK) { Serial.print(F("📤 Sent press #")); Serial.println(pressCount); } else { Serial.print(F("❌ Send error code: ")); Serial.println(result); } } } } lastReading = reading; }