Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <ESP8266WiFi.h>
- #include "ThingSpeak.h"
- #include "AdafruitIO_WiFi.h"
- extern "C" {
- #include <espnow.h>
- }
- const char* ssid = "YOUR_SSID";
- const char* password = "YOUR_WIFI_PASSWORD";
- WiFiClient client;
- //Thingspeak Details
- unsigned long myChannelNumber = CHANNEL_NUMBER;
- const char * myWriteAPIKey = "WRITE_API_KEY";
- //Adafruit Details
- #define AIO_USERNAME "USERNAME"
- #define AIO_KEY "KEY"
- const char* xssid = "";
- const char* xpassword = "";
- AdafruitIO_WiFi io(AIO_USERNAME, AIO_KEY, xssid, xpassword);
- AdafruitIO_Feed *Btemp = io.feed("bathroom");
- AdafruitIO_Feed *Ctemp = io.feed("cloakroom");
- AdafruitIO_Feed *FRtemp = io.feed("front-room");
- AdafruitIO_Feed *Htemp = io.feed("hall");
- AdafruitIO_Feed *Ktemp = io.feed("kitchen");
- AdafruitIO_Feed *Ltemp = io.feed("landing");
- AdafruitIO_Feed *B1temp = io.feed("bedroom-1");
- AdafruitIO_Feed *B2temp = io.feed("bedroom-2");
- // keep in sync with ESP_NOW sensor struct
- struct SensorData {
- String id; //Sensor Name
- int fieldT; // ThingSpeak Field Temperature
- int fieldH; // ThingSpeak Field Humidity
- float temp; // Temperature Variable
- int hum; // Humidity Variable
- } sD;
- volatile boolean haveReading = false;
- int heartBeat;
- void setup() {
- Serial.begin(115200);
- Serial.println();
- Serial.println();
- Serial.println("ESP_Now Controller");
- Serial.println();
- WiFi.mode(WIFI_AP);
- Serial.print("This node AP mac: "); Serial.println(WiFi.softAPmacAddress());
- Serial.print("This node STA mac: "); Serial.println(WiFi.macAddress());
- initEspNow();
- Serial.println("Setup done");
- }
- void loop() {
- if (millis()-heartBeat > 30000) {
- Serial.println("Waiting for ESP-NOW messages...");
- heartBeat = millis();
- }
- if (haveReading) {
- haveReading = false;
- ThingSpeak.begin(client);
- wifiConnect();
- sendToThingSpeak();
- sendToAdafruit();
- delay(200);
- ESP.restart(); // <----- Reboots to re-enable ESP-NOW
- }
- }
- void sendToThingSpeak() {
- ThingSpeak.writeField(myChannelNumber, sD.fieldT, String(sD.temp), myWriteAPIKey);
- }
- void sendToAdafruit() {
- io.run();
- if (sD.id == "B") {
- Btemp->save(String(sD.temp));
- }
- else if (sD.id == "C") {
- Ctemp->save(String(sD.temp));
- }
- else if (sD.id == "FR") {
- FRtemp->save(String(sD.temp));
- }
- else if (sD.id == "H") {
- Htemp->save(String(sD.temp));
- }
- else if (sD.id == "K") {
- Ktemp->save(String(sD.temp));
- }
- else if (sD.id == "L") {
- Ltemp->save(String(sD.temp));
- }
- else if (sD.id == "B1") {
- B1temp->save(String(sD.temp));
- }
- else if (sD.id == "B2") {
- B2temp->save(String(sD.temp));
- }
- }
- void initEspNow() {
- if (esp_now_init()!=0) {
- Serial.println("*** ESP_Now init failed");
- ESP.restart();
- }
- esp_now_set_self_role(ESP_NOW_ROLE_COMBO);
- esp_now_register_recv_cb([](uint8_t *mac, uint8_t *data, uint8_t len) {
- char macString[50] = {0};
- sprintf(macString, "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
- memcpy(&sD, data, sizeof(sD));
- Serial.print("Message received from device: "); Serial.print(macString); Serial.print(" in location: "); Serial.print(sD.id);
- Serial.printf(" Temp = %0.2f", sD.temp); Serial.print("\u2103");
- Serial.println();
- haveReading = true;
- });
- }
- void wifiConnect() {
- WiFi.mode(WIFI_STA);
- Serial.println();
- Serial.print("Connecting to "); Serial.print(ssid);
- WiFi.begin(ssid, password);
- while (WiFi.status() != WL_CONNECTED) {
- delay(250);
- Serial.print(".");
- }
- Serial.print("\nWiFi connected, IP address: "); Serial.println(WiFi.localIP());
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement