Node1 3
/*
NODE 1 ESP32-C6 — Light Chase Game (LEFT node)
MAC: B4:3A:45:89:E9:F4
- D6 = GPIO16 = TOP LED
- D2 = GPIO2 = BOTTOM LED
- GPIO 0 = Hall sensor (LOW when magnet present)
No speaker — speaker is on master only.
*/
#include <esp_now.h>
#include <WiFi.h>
#define LED_TOP 16
#define LED_BOTTOM 2
#define HALL_PIN 1
#define NODE_ID 1
// Master: 58:E6:C5:1A:7F:28
uint8_t masterMac[] = {0x58, 0xE6, 0xC5, 0x1A, 0x7F, 0x28};
typedef struct {
int nodeID;
char type[8];
int value;
} OutgoingMsg;
typedef struct {
char cmd[16];
} IncomingCmd;
bool lastHallState = false;
void sendHall(int val) {
OutgoingMsg msg;
msg.nodeID = NODE_ID;
strncpy(msg.type, "HALL", sizeof(msg.type));
msg.value = val;
esp_now_send(masterMac, (uint8_t*)&msg, sizeof(msg));
}
void onReceive(const esp_now_recv_info_t *info, const uint8_t *data, int len) {
IncomingCmd cmd;
memcpy(&cmd, data, sizeof(cmd));
if (strcmp(cmd.cmd, "LED_TOP_ON") == 0) digitalWrite(LED_TOP, HIGH);
else if (strcmp(cmd.cmd, "LED_TOP_OFF") == 0) digitalWrite(LED_TOP, LOW);
else if (strcmp(cmd.cmd, "LED_BOT_ON") == 0) digitalWrite(LED_BOTTOM, HIGH);
else if (strcmp(cmd.cmd, "LED_BOT_OFF") == 0) digitalWrite(LED_BOTTOM, LOW);
}
void setup() {
pinMode(LED_TOP, OUTPUT);
pinMode(LED_BOTTOM, OUTPUT);
pinMode(HALL_PIN, INPUT_PULLUP);
digitalWrite(LED_TOP, LOW);
digitalWrite(LED_BOTTOM, LOW);
WiFi.mode(WIFI_STA);
esp_now_init();
esp_now_register_recv_cb(onReceive);
esp_now_peer_info_t peer = {};
memcpy(peer.peer_addr, masterMac, 6);
peer.channel = 0;
peer.encrypt = false;
esp_now_add_peer(&peer);
OutgoingMsg msg;
msg.nodeID = NODE_ID;
strncpy(msg.type, "STATUS", sizeof(msg.type));
msg.value = 1;
esp_now_send(masterMac, (uint8_t*)&msg, sizeof(msg));
}
void loop() {
bool hallNow = (digitalRead(HALL_PIN) == LOW);
if (hallNow != lastHallState) {
lastHallState = hallNow;
sendHall(hallNow ? 1 : 0);
}
delay(20);
}