Advertisement
1CM69

ESP-Now Slave(Gateway)

Sep 6th, 2019
307
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.69 KB | None | 0 0
  1. #include <ESP8266WiFi.h>
  2. #include "ThingSpeak.h"
  3. #include "AdafruitIO_WiFi.h"
  4. extern "C" {
  5.   #include <espnow.h>
  6. }
  7.  
  8. const char* ssid = "YOUR_SSID";
  9. const char* password = "YOUR_WIFI_PASSWORD";
  10.  
  11. WiFiClient client;
  12.  
  13. //Thingspeak Details
  14. unsigned long myChannelNumber =  CHANNEL_NUMBER;
  15. const char * myWriteAPIKey = "WRITE_API_KEY";
  16.  
  17. //Adafruit Details
  18. #define AIO_USERNAME    "USERNAME"
  19. #define AIO_KEY         "KEY"
  20. const char* xssid = "";
  21. const char* xpassword = "";
  22.  
  23. AdafruitIO_WiFi io(AIO_USERNAME, AIO_KEY, xssid, xpassword);
  24.  
  25. AdafruitIO_Feed *Btemp = io.feed("bathroom");
  26. AdafruitIO_Feed *Ctemp = io.feed("cloakroom");
  27. AdafruitIO_Feed *FRtemp = io.feed("front-room");
  28. AdafruitIO_Feed *Htemp = io.feed("hall");
  29. AdafruitIO_Feed *Ktemp = io.feed("kitchen");
  30. AdafruitIO_Feed *Ltemp = io.feed("landing");
  31. AdafruitIO_Feed *B1temp = io.feed("bedroom-1");
  32. AdafruitIO_Feed *B2temp = io.feed("bedroom-2");
  33.  
  34. // keep in sync with ESP_NOW sensor struct
  35. struct SensorData {
  36.     String id; //Sensor Name
  37.     int fieldT; // ThingSpeak Field Temperature
  38.     int fieldH; // ThingSpeak Field Humidity
  39.     float temp; // Temperature Variable
  40.     int hum; // Humidity Variable
  41. } sD;
  42.  
  43. volatile boolean haveReading = false;
  44.  
  45. int heartBeat;
  46.  
  47. void setup() {
  48.   Serial.begin(115200);
  49.   Serial.println();
  50.   Serial.println();
  51.   Serial.println("ESP_Now Controller");
  52.   Serial.println();
  53.  
  54.   WiFi.mode(WIFI_AP);
  55.   Serial.print("This node AP mac: "); Serial.println(WiFi.softAPmacAddress());
  56.   Serial.print("This node STA mac: "); Serial.println(WiFi.macAddress());
  57.  
  58.   initEspNow();  
  59.   Serial.println("Setup done");
  60. }
  61.  
  62. void loop() {
  63.  
  64.   if (millis()-heartBeat > 30000) {
  65.     Serial.println("Waiting for ESP-NOW messages...");
  66.     heartBeat = millis();
  67.   }
  68.  
  69.   if (haveReading) {
  70.     haveReading = false;
  71.     ThingSpeak.begin(client);
  72.     wifiConnect();
  73.     sendToThingSpeak();
  74.     sendToAdafruit();
  75.     delay(200);
  76.     ESP.restart(); // <----- Reboots to re-enable ESP-NOW
  77.   }
  78. }
  79.  
  80. void sendToThingSpeak() {
  81.   ThingSpeak.writeField(myChannelNumber, sD.fieldT, String(sD.temp), myWriteAPIKey);
  82. }
  83.  
  84. void sendToAdafruit() {
  85.   io.run();
  86.   if (sD.id == "B") {
  87.     Btemp->save(String(sD.temp));
  88.   }
  89.   else if (sD.id == "C") {
  90.     Ctemp->save(String(sD.temp));
  91.   }
  92.   else if (sD.id == "FR") {
  93.     FRtemp->save(String(sD.temp));
  94.   }
  95.   else if (sD.id == "H") {
  96.     Htemp->save(String(sD.temp));
  97.   }
  98.   else if (sD.id == "K") {
  99.     Ktemp->save(String(sD.temp));
  100.   }
  101.   else if (sD.id == "L") {
  102.     Ltemp->save(String(sD.temp));
  103.   }
  104.   else if (sD.id == "B1") {
  105.     B1temp->save(String(sD.temp));
  106.   }
  107.   else if (sD.id == "B2") {
  108.     B2temp->save(String(sD.temp));
  109.   }
  110. }
  111.  
  112. void initEspNow() {
  113.   if (esp_now_init()!=0) {
  114.     Serial.println("*** ESP_Now init failed");
  115.     ESP.restart();
  116.   }
  117.  
  118.   esp_now_set_self_role(ESP_NOW_ROLE_COMBO);
  119.  
  120.   esp_now_register_recv_cb([](uint8_t *mac, uint8_t *data, uint8_t len) {
  121.  
  122.     char macString[50] = {0};
  123.     sprintf(macString, "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
  124.    
  125.     memcpy(&sD, data, sizeof(sD));
  126.  
  127.     Serial.print("Message received from device: "); Serial.print(macString); Serial.print(" in location: "); Serial.print(sD.id);
  128.    
  129.     Serial.printf(" Temp = %0.2f", sD.temp); Serial.print("\u2103");
  130.    
  131.     Serial.println();
  132.  
  133.     haveReading = true;
  134.   });
  135.  
  136. }
  137.  
  138. void wifiConnect() {
  139.   WiFi.mode(WIFI_STA);
  140.   Serial.println();
  141.   Serial.print("Connecting to "); Serial.print(ssid);
  142.   WiFi.begin(ssid, password);
  143.   while (WiFi.status() != WL_CONNECTED) {
  144.      delay(250);
  145.      Serial.print(".");
  146.   }  
  147.   Serial.print("\nWiFi connected, IP address: "); Serial.println(WiFi.localIP());
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement