Bonjour à tous,
mon projet est de transmettre via ESPNOW la valeur d'un TAG RFID lue sur l'esp32 maitre vers l'esclave pour la traiter. La communication se fait bien, le maitre indique bien le bon UID du tag il l'envoie au maitre qui reçoit bien une information en provenance du maitre mais dans la console il affiche une valeur (deux chiffres) qui ne correspond pas à ce qui a (théoriquement) été envoyé. J'ai effectué des recherches mais sans succès. Quelqu'un a-t-il une idée ?
code maitre (transmetteur)
Code esclave (récepteur)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107 #include <SPI.h> #include <MFRC522.h> #include <esp_now.h> #include <WiFi.h> //on défini nos pin #define SS_PIN 5 #define RST_PIN 22 // definition des pin du RC522 MFRC522 mfrc522(SS_PIN, RST_PIN); // Stockage de l'adresse MAC du récepteur pour usage ultérieur. Remplacer les 'FF' par les valeur notées plus avant. uint8_t MAC_recepteur[] = {0xD8, 0xBC, 0x38, 0xE4, 0x3D, 0x09}; String maValeurEnvoyee; char st[20]; boolean mes_ok; // La fonction de rappel qui nous assurera de la bonne livraison du message void quand_donnees_Envoyees(const uint8_t *mac_addr, esp_now_send_status_t status) { Serial.print("\r\nDernier paquet envoyé:\t"); Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Succès" : "Échec"); } // Une variable qui servira à stocker les réglages concernant le récepteur esp_now_peer_info_t infosRecepteur; void setup() { SPI.begin(); mfrc522.PCD_Init(); // On initialise la comm série à 115200 Bauds Serial.begin(115200); // On démarre le Wifi en mode Station WiFi.mode(WIFI_STA); // Puis on initialise ESP-NOW if (esp_now_init() != ESP_OK) { Serial.println("Erreur d'initialisation ESP-NOW"); return; } // Si ESP-NOW a correctement démarré, il est temps d'enregistrer la fonction de rappel: esp_now_register_send_cb(quand_donnees_Envoyees); // Tout est prêt pour l'appairage avec notre récepteur: memcpy(infosRecepteur.peer_addr, MAC_recepteur, 6); // On définit un canal (0 utilisera automatiquement le même canal que celui utilisé par le wifi) infosRecepteur.channel = 0; // On ne chiffre pas les échanges infosRecepteur.encrypt = false; // Appairage if (esp_now_add_peer(&infosRecepteur) != ESP_OK){ Serial.println("Échec de l'appairage"); return; } } void loop() // le corps du programme { if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } if ( ! mfrc522.PICC_ReadCardSerial()) { return; } Serial.print("UID de tag :"); String content= ""; byte letter; for (byte i = 0; i < mfrc522.uid.size; i++) { Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(mfrc522.uid.uidByte[i], HEX); content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ")); content.concat(String(mfrc522.uid.uidByte[i], HEX)); } Serial.println(); Serial.print("Message : "); content.toUpperCase(); Serial.println(content.substring(1)); delay (3000); // On définit la valeur à envoyer avec la valeur du TAG RFID //modif // maValeurEnvoyee = content.substring(1); maValeurEnvoyee = " 1234"; //fin de modif // On envoie le message esp_err_t resultat = esp_now_send(MAC_recepteur, (uint8_t *) &maValeurEnvoyee, sizeof(maValeurEnvoyee)); if (resultat == ESP_OK) { Serial.println("Envoi OK"); } else { Serial.println("Erreur envoi"); } }
Merci pour votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 #include <esp_now.h> #include <WiFi.h> #define CHANNEL 1 // Initialisation espnow void InitESPNow() { WiFi.disconnect(); if (esp_now_init() == ESP_OK) { Serial.println("ESPNow Init Success"); } else { Serial.println("ESPNow Init Failed"); ESP.restart(); } } // config AP SSID void configDeviceAP() { const char *SSID = "Slave_1"; bool result = WiFi.softAP(SSID, "Slave_1_Password", CHANNEL, 0); if (!result) { Serial.println("AP Config failed."); } else { Serial.println("AP Config Success. Broadcasting with AP: " + String(SSID)); Serial.print("AP CHANNEL "); Serial.println(WiFi.channel()); } } void setup() { Serial.begin(115200); Serial.println("ESPNow/Basic/Slave Example"); //Définition en mode AP WiFi.mode(WIFI_AP); // configuration en mode AP configDeviceAP(); // Impression de l'@MAC en mode AP Serial.print("AP MAC: "); Serial.println(WiFi.softAPmacAddress()); // Re init espnow InitESPNow(); // Enregistrement pour le CB esp_now_register_recv_cb(OnDataRecv); } // CallBack quand des donnée sont reçues du maitre void OnDataRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len) { //void OnDataRecv(const uint8_t *mac_addr, const uint8_t *donnees, int data_len) { char macStr[18]; snprintf(macStr, sizeof(macStr), "%02x:%02x:%02x:%02x:%02x:%02x", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); Serial.print("Last Packet Recv from: "); Serial.println(macStr); Serial.print("Last Packet Recv Data: "); Serial.println(*data); Serial.println(""); } void loop() { }
Cordialement
Partager