// Week 11 — ESP-NOW receiver (Board 2, XIAO ESP32-C3) #include #include const int ledPin = D1; const int ledPin2 = D2; const unsigned long LED_ON_MS = 500; typedef struct { uint8_t pressCount; } Message; void pulseLeds(bool led1On, bool led2On) { digitalWrite(ledPin, led1On ? HIGH : LOW); digitalWrite(ledPin2, led2On ? HIGH : LOW); delay(LED_ON_MS); digitalWrite(ledPin, LOW); digitalWrite(ledPin2, LOW); } void OnDataRecv(const uint8_t *mac, const uint8_t *data, int len) { Message incoming; memcpy(&incoming, data, sizeof(incoming)); int phase = incoming.pressCount % 3; Serial.print(F("Received press #")); Serial.println(incoming.pressCount); if (phase == 1) { pulseLeds(true, false); } else if (phase == 2) { pulseLeds(false, true); } else { pulseLeds(true, true); } } void setup() { Serial.begin(115200); pinMode(ledPin, OUTPUT); pinMode(ledPin2, OUTPUT); digitalWrite(ledPin, LOW); digitalWrite(ledPin2, LOW); Serial.println(F("=== ESP-NOW Receiver ===")); Serial.print(F("Receiver MAC: ")); Serial.println(WiFi.macAddress()); WiFi.mode(WIFI_STA); delay(100); if (esp_now_init() != ESP_OK) { Serial.println(F("ESP-NOW init failed")); return; } esp_now_register_recv_cb(OnDataRecv); Serial.println(F("Ready to receive ESP-NOW messages")); } void loop() { delay(10); }