ESP_NOW char values

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;

:wink:

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;

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));

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

"Called" what?

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 compiles on verify

Still? so what was the problem before if it compiled as well?