#include #include // MAC address of the car unit uint8_t carAddr[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; typedef struct { int speed; // -255 (reverse) to 255 (forward) int direction; // -100 (left) to 100 (right) } CommandPacket; typedef struct { int currentSpeed; int batteryVoltage; // e.g., millivolts int temperature; // Celsius } TelemetryPacket; TelemetryPacket telemetry; void onTelemetryRecv(const uint8_t * mac, const uint8_t *incomingData, int len) { memcpy(&telemetry, incomingData, sizeof(telemetry)); Serial.print("Car Speed: "); Serial.println(telemetry.currentSpeed); Serial.print("Batt Voltage: "); Serial.println(telemetry.batteryVoltage); Serial.print("Temperature: "); Serial.println(telemetry.temperature); } void setup() { Serial.begin(115200); WiFi.mode(WIFI_STA); if (esp_now_init() != ESP_OK) { Serial.println("ESP-NOW init failed!"); return; } esp_now_peer_info_t peerInfo; memcpy(peerInfo.peer_addr, carAddr, 6); peerInfo.channel = 0; peerInfo.encrypt = false; esp_now_add_peer(&peerInfo); esp_now_register_recv_cb(onTelemetryRecv); } void loop() { CommandPacket cmd; // Example: Read joystick/button to determine speed/direction cmd.speed = analogRead(34) - 2048; // Map your analog input to desired speed cmd.direction = analogRead(35) - 2048; // Map to direction: left/right esp_now_send(carAddr, (uint8_t*)&cmd, sizeof(cmd)); delay(100); // Adjust send rate as needed }