Hi all.
8266_22_1_25.ino (2.2 KB)
Mega22_1_25.ino (2.9 KB)
I have a project that I send data (Digital) from a touch screen espnow to an esp8266 and from the esp8266 communicate via serial to the Mega 2560. I do get the data to read as expected on the esp8266 but the data on the Mega is raw data only. I fail to get the data in the ("1", "0" and digital) format. It's probably a small issue but hope somebody can help me out. The touch screen code is too big to print but the data received by the esp8266 is all good.
/ Define the data structure
typedef struct {
int xval;
int yval;
int x;
int y;
float Slider1;
float Slider2;
int Value_SelectC;
int Value_SelectCsharp;
int Value_SelectA;
int Value_SelectB;
int Value_SelectBb;
int Value_SelectD;
int Value_SelectFb;
int Value_SelectE;
int Value_SelectFsharp;
int Value_SelectG;
float Slider_LUP;
float Slider_LL;
float Slider_LR;
float Slider_RR;
float Slider_RL;
int Value_AutoAdjust;
int Value_StringUP;
int Value_StringDOWN;
int Value_String1;
int Value_String2;
int Value_String3;
int Value_String4;
int Value_String5;
int Value_String6;
int Value_String7;
int Value_String8;
int Value_String9;
int Value_String10;
int Value_String11;
int Value_String12;
} struct_message;
// Create a variable for the data structure
struct_message myData1;
void setup() {
Serial.begin(9600); // Debug serial
Serial1.begin(9600); // Communication with ESP8266
Serial.println("Arduino Mega is ready to receive data from ESP8266");
// Initialize motor control pins
pinMode(9, OUTPUT); // Motor direction pin
pinMode(10, OUTPUT); // Motor enable pin
digitalWrite(9, LOW); // Ensure motor is stopped
digitalWrite(10, LOW);
}
void loop() {
// Check if data is available from ESP8266
if (Serial1.available()) {
String receivedData = ""; // Variable to store incoming data
// Read data until a newline or timeout
while (Serial1.available()) {
char incomingChar = Serial1.read();
if (incomingChar == '\n') break; // End of message
receivedData += incomingChar;
}
// Parse received data into the structure
if (receivedData.length() > 0) {
Serial.println("Data received from ESP8266:");
Serial.println(receivedData);
// Parse the structure
sscanf(receivedData.c_str(), "%d,%d,%d",
&myData1.Value_StringUP,
&myData1.Value_StringDOWN,
&myData1.Value_String1);
// Debug parsed values
Serial.print("Value_StringUP: ");
Serial.println(myData1.Value_StringUP);
Serial.print("Value_StringDOWN: ");
Serial.println(myData1.Value_StringDOWN);
Serial.print("Value_String1: ");
Serial.println(myData1.Value_String1);
// Control the motor based on the received data
if (myData1.Value_StringUP == 1 && myData1.Value_String1 == 1) {
digitalWrite(9, HIGH); // Set direction to forward
digitalWrite(10, HIGH); // Enable motor
Serial.println("Motor running forward");
} else if (myData1.Value_StringDOWN == 1 && myData1.Value_String1 == 1) {
digitalWrite(9, LOW); // Set direction to reverse
digitalWrite(10, HIGH); // Enable motor
Serial.println("Motor running reverse");
} else {
digitalWrite(10, LOW); // Stop the motor
Serial.println("Motor stopped");
}
}
}
#include <ESP8266WiFi.h>
#include <espnow.h>
// Define data structure
typedef struct {
int xval;
int yval;
int x;
int y;
float Slider1;
float Slider2;
int Value_SelectC;
int Value_SelectCsharp;
int Value_SelectA;
int Value_SelectB;
int Value_SelectBb;
int Value_SelectD;
int Value_SelectFb;
int Value_SelectE;
int Value_SelectFsharp;
int Value_SelectG;
float Slider_LUP;
float Slider_LL;
float Slider_LR;
float Slider_RR;
float Slider_RL;
int Value_AutoAdjust;
int Value_StringUP;
int Value_StringDOWN;
int Value_String1;
int Value_String2;
int Value_String3;
int Value_String4;
int Value_String5;
int Value_String6;
int Value_String7;
int Value_String8;
int Value_String9;
int Value_String10;
int Value_String11;
int Value_String12;
} struct_message;
struct_message myData1;
void onDataRecv(uint8_t *mac, uint8_t *incomingData, uint8_t len) {
memcpy(&myData1, incomingData, sizeof(myData1));
Serial.println("Data received:");
Serial.print("Value_StringUP: ");
Serial.println(myData1.Value_StringUP);
Serial.print("Value_StringDOWN: ");
Serial.println(myData1.Value_StringDOWN);
Serial.print("Value_String1: ");
Serial.println(myData1.Value_String1);
// Send data to Arduino Mega via Serial1
Serial1.print(myData1.Value_StringUP);
Serial1.print(",");
Serial1.print(myData1.Value_StringDOWN);
Serial1.print(",");
Serial1.println(myData1.Value_String1);
}
void setup() {
Serial.begin(115200); // Debug serial
Serial1.begin(9600); // Communication with Arduino Mega (adjust baud rate as needed)
// Initialize WiFi
WiFi.mode(WIFI_STA);
Serial.println(WiFi.macAddress());
// Initialize ESP-NOW
if (esp_now_init() != 0) {
Serial.println("ESP-NOW initialization failed");
return;
}
// Set ESP-NOW receive callback
esp_now_set_self_role(ESP_NOW_ROLE_SLAVE);
esp_now_register_recv_cb(onDataRecv);
Serial.println("ESP-NOW receiver initialized");
}
void loop() {
// Receiver is event-driven, so no need to handle logic here
}