Skip to content

Instantly share code, notes, and snippets.

@hekras
Created September 18, 2022 10:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hekras/42b50562555bfd1ce174775e5d65602d to your computer and use it in GitHub Desktop.
Save hekras/42b50562555bfd1ce174775e5d65602d to your computer and use it in GitHub Desktop.
#include <ESP8266WiFi.h>
#include <espnow.h>
// Structure example to receive data
// Must match the sender structure
typedef struct struct_message {
int a0;
int a1;
int a2;
int a3;
int a4;
int a5;
int a6;
int a7;
} struct_message;
// Create a struct_message called myData
struct_message myData;
uint8_t Pwm1 = 5; //Nodemcu PWM pin
uint8_t Pwm2 = 4; //Nodemcu PWM pin
int a0 = 15; //Gpio-15 of nodemcu esp8266
int a1 = 13; //Gpio-13 of nodemcu esp8266
int a2 = 12; //Gpio-12 of nodemcu esp8266
int a3 = 14; //Gpio-14 of nodemcu esp8266
// Callback function that will be executed when data is received
void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len) {
memcpy(&myData, incomingData, sizeof(myData));
Serial.print(myData.a0);
Serial.print(myData.a1);
Serial.print(myData.a2);
Serial.print(myData.a3);
Serial.print("-");
Serial.print(myData.a4);
Serial.print(myData.a5);
Serial.print(myData.a6);
Serial.print(myData.a7);
Serial.println();
if (!myData.a0) {
digitalWrite(a0, HIGH); //Start first motor
digitalWrite(a1, LOW);
digitalWrite(a2, LOW); //Start second motor
digitalWrite(a3, HIGH);
}
if (!myData.a3) {
digitalWrite(a0, LOW); //Start first motor
digitalWrite(a1, HIGH);
digitalWrite(a2, HIGH); //Start second motor
digitalWrite(a3, LOW);
}
if (!myData.a1) {
digitalWrite(a0, HIGH); //Start first motor
digitalWrite(a1, LOW);
digitalWrite(a2, HIGH); //Start second motor
digitalWrite(a3, LOW);
}
if (!myData.a2) {
digitalWrite(a0, LOW); //Start first motor
digitalWrite(a1, HIGH);
digitalWrite(a2, LOW); //Start second motor
digitalWrite(a3, HIGH);
}
if ((myData.a0)&&(myData.a1)&&(myData.a2)&&(myData.a3)) {
digitalWrite(a0, LOW); //Start first motor
digitalWrite(a1, LOW);
digitalWrite(a2, LOW); //Start second motor
digitalWrite(a3, LOW);
}
if (!myData.a7) {
analogWrite(Pwm1, 100);
analogWrite(Pwm2, 100);
}
if (!myData.a6) {
analogWrite(Pwm1, 150);
analogWrite(Pwm2, 150);
}
if (!myData.a5) {
analogWrite(Pwm1, 200);
analogWrite(Pwm2, 200);
}
if (!myData.a4) {
analogWrite(Pwm1, 250);
analogWrite(Pwm2, 250);
}
}
void setup() {
// Initialize Serial Monitor
Serial.begin(115200);
pinMode(a0, OUTPUT);
pinMode(a1, OUTPUT);
pinMode(a2, OUTPUT);
pinMode(a3, OUTPUT);
delay(2000);
// Set device as a Wi-Fi Station
WiFi.mode(WIFI_STA);
WiFi.disconnect();
Serial.println(WiFi.macAddress());
// Init ESP-NOW
if (esp_now_init() != 0) {
Serial.println("Error initializing ESP-NOW");
return;
}
// Once ESPNow is successfully Init, we will register for recv CB to
// get recv packer info
esp_now_set_self_role(ESP_NOW_ROLE_SLAVE);
esp_now_register_recv_cb(OnDataRecv);
Serial.println("");
Serial.println("Running");
}
void loop() {
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment