hello, the esp now code worked with int type values in the simple structure
typedef struct struct_message {
int id;
char letter[3];
} struct_message;
struct_message espDataA;
strcpy(espDataA.letter, "A");
espDataA.id = BOARD_ID;
but it doesn't work with chars. i just want to send and A but strcpy doesn't work and how many bytes i should put int brackets [32] if i only have "A"?
also should i change something in send and receive code ?
esp_now_send(broadcastAddress, (uint8_t *) &espDataD, sizeof(espDataD));
memcpy(&espData, incomingData, sizeof(espData));
struct_message espDataA;
espDataA.letter [0] = 'A';
espDataA.letter [1] = '\0';
espDataA.id = BOARD_ID;
1 Like
better but stil something is wrong
esp_transmitter:29:1: error: 'espDataD' does not name a type
29 | espDataD.id = BOARD_ID;
| ^~~~~~~~
esp_transmitter:22:1: error: 'espDataA' does not name a type
22 | espDataA.letter [0] = 'A';
| ^~~~~~~~
typedef struct struct_message {
int id;
char letter[3];
} struct_message;
struct_message espDataA;
struct_message espDataB;
struct_message espDataC;
struct_message espDataD;
espDataA.letter [0] = 'A';
espDataB.letter [0] = 'B';
espDataC.letter [0] = 'C';
espDataD.letter [0] = 'D';
espDataA.id = BOARD_ID;
espDataB.id = BOARD_ID;
espDataC.id = BOARD_ID;
espDataD.id = BOARD_ID;
guix
January 13, 2022, 7:54pm
4
Hello
Why not simply char letter; then espDataA.letter = 'A';
1 Like
and if i only have a on letter [] should i define as char letter[1]? your \0 just fill up the empty space ?on receiver reading will that matter ?
will know to write id at id and letter [0] from transmitter at letter [0] on the receiver
memcpy(&myData, incomingData, sizeof(myData));
guix
January 13, 2022, 7:58pm
7
Use exactly the same struct on both sides
struct struct_message {
int id;
char letter;
};
it also has struct_message at the end before the coma and typedef idkn why
typedef struct struct_message {
int id;
char letter;
} struct_message;
Can we have the question in terms that may make some sense, please?
Arduino: 1.8.19 (Windows Store 1.8.57.0) (Windows 10), Board: "NodeMCU 0.9 (ESP-12 Module), 80 MHz, Flash, Disabled (new aborts on oom), Disabled, All SSL ciphers (most compatible), 32KB cache + 32KB IRAM (balanced), Use pgm_read macros for IRAM/PROGMEM, 4MB (FS:2MB OTA:~1019KB), v2 Lower Memory, Disabled, None, Only Sketch, 115200"
esp_transmitter:22:1: error: 'espDataA' does not name a type
22 | espDataA.letter = 'A';
| ^~~~~~~~
esp_transmitter:23:1: error: 'espDataB' does not name a type
23 | espDataB.letter = 'B';
| ^~~~~~~~
esp_transmitter:24:1: error: 'espDataC' does not name a type
24 | espDataC.letter = 'C';
| ^~~~~~~~
esp_transmitter:25:1: error: 'espDataD' does not name a type
25 | espDataD.letter = 'D';
| ^~~~~~~~
esp_transmitter:26:1: error: 'espDataA' does not name a type
26 | espDataA.id = BOARD_ID;
| ^~~~~~~~
esp_transmitter:27:1: error: 'espDataB' does not name a type
27 | espDataB.id = BOARD_ID;
| ^~~~~~~~
esp_transmitter:28:1: error: 'espDataC' does not name a type
28 | espDataC.id = BOARD_ID;
| ^~~~~~~~
esp_transmitter:29:1: error: 'espDataD' does not name a type
29 | espDataD.id = BOARD_ID;
| ^~~~~~~~
exit status 1
'espDataA' does not name a type
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
will know to write id at id and letter [0] from transmitter at letter [0] on the receiver
memcpy(&myData, incomingData, sizeof(myData));
i just saw that i set those values outside the setup or loop and if i move them in setup it compiles
set values to that struct_message
can watchdog trigger if i have to many things to do in the setup ?
it is time you posted the whole code
/*
* TRANSMITTER
*/
//libraries
#include <ESP8266WiFi.h>
#include <espnow.h>
//esp8266 transmitter object
uint8_t broadcastAddress[] = {0xCC, 0x50, 0xE3, 0x3C, 0xA8, 0x4B}; //adress for master receiver
#define BOARD_ID 1
//esp data to send
typedef struct struct_message {
int id;
char letter;
} struct_message;
struct_message espDataA;
struct_message espDataB;
struct_message espDataC;
struct_message espDataD;
//button variables
const int buttonA = 2;
const int buttonB = 3;
const int buttonC = 4;
const int buttonD = 5;
int buttonStateA = HIGH;
int lastButtonStateA = HIGH;
int buttonStateB = HIGH;
int lastButtonStateB = HIGH;
int buttonStateC = HIGH;
int lastButtonStateC = HIGH;
int buttonStateD = HIGH;
int lastButtonStateD = HIGH;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
//esp send data function
void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) {
if (sendStatus == 0) {
Serial.println("Delivery success");
}
else {
Serial.println("Delivery fail");
}
}
void setup() {
//radio temporary
Serial.begin(115200);
//buttons initialization
pinMode(buttonA, INPUT_PULLUP);
pinMode(buttonB, INPUT_PULLUP);
pinMode(buttonC, INPUT_PULLUP);
pinMode(buttonD, INPUT_PULLUP);
//data to send
espDataA.letter = 'A';
espDataB.letter = 'B';
espDataC.letter = 'C';
espDataD.letter = 'D';
espDataA.id = BOARD_ID;
espDataB.id = BOARD_ID;
espDataC.id = BOARD_ID;
espDataD.id = BOARD_ID;
//esp initialization
WiFi.mode(WIFI_STA);
WiFi.disconnect();
if (esp_now_init() != 0) {
Serial.println("Error initializing ESP-NOW");
return;
}
esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
esp_now_register_send_cb(OnDataSent);
esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
ESP.wdtDisable();
}
void loop() {
//reset watchdog
ESP.wdtFeed();
//get buttons values
int readingA = digitalRead(buttonA);
int readingB = digitalRead(buttonB);
int readingC = digitalRead(buttonC);
int readingD = digitalRead(buttonD);
//debounce
if ((readingA != lastButtonStateA) || (readingB != lastButtonStateB) || (readingC != lastButtonStateC) || (readingD != lastButtonStateD)) {
lastDebounceTime = millis();
}
//execute if button pressed
if ((millis() - lastDebounceTime) > debounceDelay) {
if (readingA != buttonStateA) {
buttonStateA = readingA;
if (buttonStateA == LOW) {
esp_now_send(broadcastAddress, (uint8_t *) &espDataA, sizeof(espDataA));
}
} else if (readingB != buttonStateB) {
buttonStateB = readingB;
if (buttonStateB == LOW) {
esp_now_send(broadcastAddress, (uint8_t *) &espDataB, sizeof(espDataB));
}
} else if (readingC != buttonStateC) {
buttonStateC = readingC;
if (buttonStateC == LOW) {
esp_now_send(broadcastAddress, (uint8_t *) &espDataC, sizeof(espDataC));
}
} else if (readingD != buttonStateD) {
buttonStateD = readingD;
if (buttonStateD == LOW) {
esp_now_send(broadcastAddress, (uint8_t *) &espDataD, sizeof(espDataD));
}
}
}
//update button state
lastButtonStateA = readingA;
lastButtonStateB = readingB;
lastButtonStateC = readingC;
lastButtonStateD = readingD;
}
what happens if you change
to
struct struct_message {
int id;
char letter;
};
Still? so what was the problem before if it compiled as well?