Bonjour,
Après pas mal de vidéos et de tests, je n'arrive pas à réaliser un test simple ![]()
Je tente de faire communiquer 2 ESP32 avec un joystick.
Lorsque je fais le code sur un ESP32 seul pour renvoyer le résultat du joystick sur le moniteur, cela fonctionne correctement avec le code suivant :
//ref. https://101010.fun/iot/esp32-joystick.html
//ref. https://wak-tech.com/archives/742
#define Right_VRX_PIN 12
#define Right_VRY_PIN 13
#define Left_VRX_PIN 25
#define Left_VRY_PIN 26
int left_x_val;
int left_y_val;
int right_x_val;
int right_y_val;
void setup() {
Serial.begin(115200);
pinMode(Left_VRX_PIN, INPUT);
pinMode(Left_VRY_PIN, INPUT);
pinMode(Right_VRX_PIN, INPUT);
pinMode(Right_VRX_PIN, INPUT);
}
void loop() {
left_x_val = analogRead(Left_VRX_PIN) >> 4;//value 0-255 (">> 4" convert maximum value from 4095 to 255 )
left_y_val = analogRead(Left_VRY_PIN) >> 4;//value 0-255
right_x_val = analogRead(Right_VRX_PIN) >> 4;//value 0-255
right_y_val = analogRead(Right_VRY_PIN) >> 4;//value 0-255
Serial.printf("left_x: %d, left_y: %d, right_x: %d, right_y: %d\n", left_x_val, left_y_val, right_x_val, right_y_val);
delay(100);
}
J'obtiens bien les valeurs de mon Joystick quand je le bouge.
J'essaye ensuite d'adapter mon code pour l'ESP32 qui va servir de transmetteur (Tx) :
#include <esp_now.h>
#include <WiFi.h>
#define VRx 12
#define VRy 13
const byte SW = 14;
// ESP-NOW -- REPLACE WITH YOUR RECEIVER MAC Address
uint8_t broadcastAddress[] = {0xAA,0xBB,0xCC,0xDD,0xEE,0xFF};
// ESP-NOW -- Structure example to send data -- Must match the receiver structure
typedef struct struct_message { // For ESP-NOW
int vX;
int vY;
int SW_state;
} struct_message;
// ESP-NOW -- Create a struct_message called senderData
struct_message senderData;
// ESP-NOW --
esp_now_peer_info_t peerInfo;
// ESP-NOW -- callback when data is sent
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
//Serial.print("\r\nLast Packet Send Status:\t");
//Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Delivery Success" : "Delivery Fail");
}
void setup() {
// Init Serial Monitor
Serial.begin(115200);
// Init PIN Joystick
pinMode(VRx, INPUT);
pinMode(VRy, INPUT);
pinMode(SW, INPUT_PULLUP);
// ESP-NOW -- Set device as a Wi-Fi Station
WiFi.mode(WIFI_STA); // For ESP-NOW
// ESP-NOW -- Init ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
// ESP-NOW -- Once ESPNow is successfully Init, we will register for Send CB to get the status of Trasnmitted packet
esp_now_register_send_cb(OnDataSent);
// ESP-NOW -- Register peer
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
// ESP-NOW -- Add peer
if (esp_now_add_peer(&peerInfo) != ESP_OK) {
Serial.println("Failed to add peer");
return;
}
}
void loop() {
// Set values to send
senderData.vX = analogRead(VRx);
senderData.vY = analogRead(VRy);
senderData.SW_state = digitalRead(SW);
// ESP-NOW -- Send message
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &senderData, sizeof(senderData));
/*
if (result == ESP_OK) {
Serial.println("Sent with success");
}
else {
Serial.println("Error sending the data");
}
*/
Serial.print("X: "); Serial.print(senderData.vX);
Serial.print(" | Y: "); Serial.print(senderData.vY);
Serial.print(" | Bouton: "); Serial.println(senderData.SW_state);
delay(100);
}
(Note : j'ai changé mon adresse MAC dans ce code)
Avec ce dernier code, j'arrive à obtenir le résultat du bouton poussoir du Joystick mais aucune informations concernant les mouvement X et Y du Joystick, les valeurs restent à 0
J'obtiens ca :
X: 0 | Y: 0 | Bouton: 1
Sauriez-vous me dire ce que j'ai loupé ?
Merci par avance pour votre aide.



