Update projects/espnow/rc car/transmitter/transmitter.ino

This commit is contained in:
Ghassan Yusuf 2025-10-07 13:02:54 +03:00
parent 2232a64af5
commit 3655026e36

View File

@ -1,51 +1,45 @@
#include <WiFi.h> #include <WiFi.h>
#include <esp_now.h> #include <esp_now.h>
// MAC address of the car unit // MAC address of car ESP32 (replace with real address)
uint8_t carAddr[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; uint8_t carAddr[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
typedef struct { typedef struct {
int speed; // -255 (reverse) to 255 (forward) int speed; // -255 to 255
int direction; // -100 (left) to 100 (right) int turn; // -255 to 255
} CommandPacket; } CommandPacket;
typedef struct { typedef struct {
int currentSpeed; int leftSpeed;
int batteryVoltage; // e.g., millivolts int rightSpeed;
int temperature; // Celsius int battery;
} TelemetryPacket; } TelemetryPacket;
TelemetryPacket telemetry; TelemetryPacket telemetry;
void onTelemetryRecv(const uint8_t * mac, const uint8_t *incomingData, int len) { void onTelemetry(const uint8_t * mac, const uint8_t *incomingData, int len) {
memcpy(&telemetry, incomingData, sizeof(telemetry)); memcpy(&telemetry, incomingData, sizeof(telemetry));
Serial.print("Car Speed: "); Serial.println(telemetry.currentSpeed); Serial.print("Left: "); Serial.println(telemetry.leftSpeed);
Serial.print("Batt Voltage: "); Serial.println(telemetry.batteryVoltage); Serial.print("Right: "); Serial.println(telemetry.rightSpeed);
Serial.print("Temperature: "); Serial.println(telemetry.temperature); Serial.print("Battery: "); Serial.println(telemetry.battery);
} }
void setup() { void setup() {
Serial.begin(115200); Serial.begin(115200);
WiFi.mode(WIFI_STA); WiFi.mode(WIFI_STA);
if (esp_now_init() != ESP_OK) { esp_now_init();
Serial.println("ESP-NOW init failed!");
return;
}
esp_now_peer_info_t peerInfo; esp_now_peer_info_t peerInfo;
memcpy(peerInfo.peer_addr, carAddr, 6); memcpy(peerInfo.peer_addr, carAddr, 6);
peerInfo.channel = 0; peerInfo.channel = 0;
peerInfo.encrypt = false; peerInfo.encrypt = false;
esp_now_add_peer(&peerInfo); esp_now_add_peer(&peerInfo);
esp_now_register_recv_cb(onTelemetry);
esp_now_register_recv_cb(onTelemetryRecv);
} }
void loop() { void loop() {
CommandPacket cmd; CommandPacket cmd;
// Example: Read joystick/button to determine speed/direction cmd.speed = map(analogRead(34), 0, 4095, -255, 255); // Y axis for speed
cmd.speed = analogRead(34) - 2048; // Map your analog input to desired speed cmd.turn = map(analogRead(35), 0, 4095, -255, 255); // X axis for turning/spinning
cmd.direction = analogRead(35) - 2048; // Map to direction: left/right
esp_now_send(carAddr, (uint8_t*)&cmd, sizeof(cmd)); esp_now_send(carAddr, (uint8_t*)&cmd, sizeof(cmd));
delay(100); // Adjust send rate as needed delay(100); // Command rate
} }