/*
 * ESP32 version
 * Este sketch permite la recepción de dos datos mediante la comunicación ESP-NOW
*/

/*
 *****************************************************
 *    LIBRERIAS
 *****************************************************
*/
#include <esp_now.h>
#include <WiFi.h>

/*
 *****************************************************
 *    VARIABLES
 *****************************************************
*/
const int LED_onboard=5; //Led Conetado al GPIO2 (5) ESP12 - NODEMCU GPIO16

//ESTRUCTURA DE LOS DATOS TRANSMITIDOS ESCLAVO (RECEPTOR)
typedef struct mensaje_recibido {
  uint16_t pot = 0;
  uint32_t tiempo = 0;
} mensaje_recibido;

// Create a struct_message called myData
mensaje_recibido myData;

/*
 *****************************************************
 *    INICIO
 *****************************************************
*/
void setup() {
  // Inicialización del puerto serial
  Serial.begin(115200);

  // Colocamos el dispositivo en modo estación
  WiFi.mode(WIFI_STA);
 
// Inicialización del protocolo ESP-NOW
  if (esp_now_init() != ESP_OK) {
      Serial.println("Error initializing ESP-NOW");
      return;
    }

// Declaración del Pin 2 como salida para (led)
  pinMode(LED_onboard, OUTPUT);

  /*
  Una vez que ESPNow haya iniciado con éxito, nos registraremos 
  en recvCB para obtener información del empaquetador recv
  */
  //esp_now_set_self_role(ESP_NOW_ROLE_SLAVE); //Asigna el rol del dispositivo (Esclavo o Maestro)
  //esp_now_register_recv_cb(OnDataRecv);//Registramos los datos recibidos por el transmisor
}
/*
 *****************************************************
 *    REPETICIÓN
 *****************************************************
*/
void loop() {
esp_now_register_recv_cb(esp_now_recv_cb_t(OnDataRecv));//Registramos los datos recibidos por el transmisor
delay(2000);
}

/*
 *****************************************************
 *    FUNCIONES
 *****************************************************
*/

// Callback function that will be executed when data is received
void OnDataRecv(const uint8_t * mac,const uint8_t *incomingData, int len) {
  memcpy(&myData, incomingData, sizeof(myData));
  Serial.print(". Dato potenciometro: "); 
  Serial.print(myData.pot);
  Serial.print(". Dato tiempo: "); 
  Serial.println(myData.tiempo);
  analogWrite(LED_onboard,myData.pot); // Escribo los datos sobre el pin del led
}