esp8266 to m5stack wifi communication
-
Hi, Im looking for a way to port my "espnow esp8266 to esp8266" project to m5stack
I'm using arduino core
I need to send a sensor value from esp8266 to m5stuck as faster as possiblethis is my sender code: (sorry I can't find how to insert code)
// EspnowController.ino
// a minimal program derived from
// https://github.com/HarringayMakerSpace/ESP-Now// This is the program that sends the data. (The Controller)
//=============
#include <ESP8266WiFi.h>
extern "C" {
#include <espnow.h>
}// this is the MAC Address of the slave which receives the data
uint8_t remoteMac[] = {0x36, 0x33, 0x33, 0x33, 0x33, 0x33}; //se cambia il MAC ADDRESS ricordarsi di cambiare anche il serial print per poter clonare il modulo#define WIFI_CHANNEL 4 // se cambia il canale ricordarsi di cambiare anche il serial print per poter clonare il modulo
// must match the slave struct
struct attribute((packed)) DataStruct {
char text[32];
unsigned long time;
};DataStruct myData;
unsigned long lastSentMillis;
unsigned long sendIntervalMillis = 10;
unsigned long sentMicros;
unsigned long ackMicros;unsigned long lastBlinkMillis;
unsigned long fastBlinkMillis = 200;
unsigned long slowBlinkMillis = 700;
unsigned long blinkIntervalMillis = slowBlinkMillis;byte ledPin = 14;
/////////////////////////////////////////////////////////
#include <NewPingESP8266.h>
#define TRIGGER_PIN D5 // 14 Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN D6 // 12 Arduino pin tied to echo pin on the ultrasonic sensor.
//#define MAX_DISTANCE 350 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.//NewPingESP8266 sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPingESP8266 setup of pins and maximum distance.
NewPingESP8266 sonar(TRIGGER_PIN, ECHO_PIN); // NewPingESP8266 setup of pins and maximum distance.
long echoTime;
//////////////////////////////////////////////////////////==============
void setup() {
Serial.begin(115200); Serial.println();
Serial.println("Starting EspnowController.ino");WiFi.mode(WIFI_STA); // Station mode for esp-now controller
WiFi.disconnect();Serial.printf("This mac: %s, ", WiFi.macAddress().c_str());
Serial.printf("slave mac: %02x%02x%02x%02x%02x%02x", remoteMac[0], remoteMac[1], remoteMac[2], remoteMac[3], remoteMac[4], remoteMac[5]);Serial.printf(", channel: %i\n", WIFI_CHANNEL);
if (esp_now_init() != 0) {
Serial.println("*** ESP_Now init failed");
while (true) {};
}
esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
esp_now_add_peer(remoteMac, ESP_NOW_ROLE_SLAVE, WIFI_CHANNEL, NULL, 0);esp_now_register_send_cb(sendCallBackFunction);
strcpy(myData.text, "WIFI CH 4");
//strcpy(myData.text, "CRISTO !!!");
Serial.print("WIFI_CHANNEL "); Serial.println(myData.text);pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);Serial.println("Setup finished");
}
//==============
void loop() {
echoTime = (sonar.ping_median(10));
sendData();
blinkLed();
}//==============
void sendData() {
if (millis() - lastSentMillis >= sendIntervalMillis) {
lastSentMillis += sendIntervalMillis;
//myData.time = millis();
myData.time = echoTime;
uint8_t bs[sizeof(myData)];
memcpy(bs, &myData, sizeof(myData));
sentMicros = micros();
esp_now_send(NULL, bs, sizeof(myData)); // NULL means send to all peers
Serial.println("sent data");
}
}//==============
void sendCallBackFunction(uint8_t* mac, uint8_t sendStatus) {
ackMicros = micros();
Serial.print("Trip micros "); Serial.println(ackMicros - sentMicros);
Serial.printf("Send status = %i", sendStatus);
Serial.println();
Serial.println();Serial.println("MAC ADD 0x36, 0x33, 0x33, 0x33, 0x33, 0x33"); //RICORDARSI DI CAMBIARLO SE CAMBIA NEL SETUP
Serial.println("WIFI CHANNEL 4"); //RICORDARSI DI CAMBIARLO SE CAMBIA NEL SETUP
Serial.println();
Serial.println();
if (sendStatus == 0) {
blinkIntervalMillis = fastBlinkMillis;
}
else {
blinkIntervalMillis = slowBlinkMillis;
}
}//================
void blinkLed() {
if (millis() - lastBlinkMillis >= blinkIntervalMillis) {
lastBlinkMillis += blinkIntervalMillis;
digitalWrite(ledPin, ! digitalRead(ledPin));
}
}and this is my rx code:
// a minimal program derived from
// https://github.com/HarringayMakerSpace/ESP-Now// This is the program that receives the data. (The Slave)
//=============
#include <ESP8266WiFi.h>
extern "C" {
#include <espnow.h>
#include <user_interface.h>
}// it seems that the mac address needs to be set before setup() is called
// and the inclusion of user_interface.h facilitates that
// presumably there is a hidden call to the function initVariant()/* Set a private Mac Address
http://serverfault.com/questions/40712/what-range-of-mac-addresses-can-i-safely-use-for-my-virtual-machines
Note: by setting a specific MAC you can replace this slave ESP8266 device with a new one
and the new slave will still pick up the data from controllers which use that MAC
*/
uint8_t mac[] = {0x36, 0x33, 0x33, 0x33, 0x33, 0x33};//==============
void initVariant() {
WiFi.mode(WIFI_AP);
wifi_set_macaddr(SOFTAP_IF, &mac[0]);
}//==============
#define WIFI_CHANNEL 4
// must match the controller struct
struct attribute((packed)) DataStruct {
char text[32];
unsigned int time;
};DataStruct myData;
//============
void setup() {
Serial.begin(115200); Serial.println();
Serial.println("Starting EspnowSlave.ino");Serial.print("This node AP mac: "); Serial.println(WiFi.softAPmacAddress());
Serial.print("This node STA mac: "); Serial.println(WiFi.macAddress());if (esp_now_init() != 0) {
Serial.println("*** ESP_Now init failed");
while (true) {};
}esp_now_set_self_role(ESP_NOW_ROLE_SLAVE);
esp_now_register_recv_cb(receiveCallBackFunction);
Serial.println("End of setup - waiting for messages");
}//============
void loop() {
}
//============
void receiveCallBackFunction(uint8_t *senderMac, uint8_t *incomingData, uint8_t len) {
memcpy(&myData, incomingData, sizeof(myData));
int cm = myData.time / 29 / 2;
int inc = myData.time / 74 / 2;
Serial.print("NewMsg ");
Serial.print("MacAddr ");
for (byte n = 0; n < 6; n++) {
Serial.print (senderMac[n], HEX);
}
Serial.print(" MsgLen ");
Serial.print(len);
Serial.print(" Text ");
Serial.print(myData.text);
Serial.print(" Time ");
Serial.print(myData.time);
Serial.print(" CM = ");
Serial.print(cm);
Serial.print(" IN = ");
Serial.print(inc);
Serial.println();
}
every tips apreciated ...tanks a lot
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login