Advertisement
CountRogula

Weather Station

Apr 5th, 2021 (edited)
287
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <SoftwareSerial.h>
  2. #include <Wire.h>
  3. #include <Adafruit_Sensor.h>
  4. #include <Adafruit_BME280.h>
  5.  
  6. #define SEALEVELPRESSURE_HPA (1013.25)
  7.  
  8. Adafruit_BME280 bme;
  9.  
  10. SoftwareSerial ESP8266(2, 3); // Rx,  Tx
  11.  
  12. float humidity, temp_f, pressure;
  13. long writingTimer = 30;
  14. long startTime = 0;
  15. long waitTime = 0;
  16. String myAPIkey = "myapikey";
  17.  
  18.  
  19.  
  20. //boolean relay1_st = false;
  21. //boolean relay2_st = false;
  22. unsigned char check_connection = 0;
  23. unsigned char times_check = 0;
  24. //boolean error;
  25.  
  26. void setup()
  27. {
  28.   Serial.begin(9600);
  29.   ESP8266.begin(9600);
  30.  
  31.   if (!bme.begin(0x76)) {
  32.     Serial.println("Could not find a valid BME280 sensor, check wiring!");
  33.     while (1);
  34.   }
  35.   //
  36.   connectToThingSpeak();
  37. }
  38.  
  39. void loop()
  40. {
  41.   waitTime = millis() - startTime;
  42.   if (waitTime > (writingTimer * 1000))
  43.   {
  44.     readSensors();
  45.     writeThingSpeak();
  46.     startTime = millis();
  47.   }
  48. }
  49.  
  50. void connectToThingSpeak(void)
  51. {
  52.  
  53.   startTime = millis();
  54.   ESP8266.println("AT+RST");
  55.   delay(2000);
  56.   Serial.println("Connecting to Wifi");
  57.   while (check_connection == 0)
  58.   {
  59.     Serial.print(".");
  60.     ESP8266.print("AT+CWJAP=\"myssid\",\"mypwd\"\r\n");
  61.     ESP8266.setTimeout(5000);
  62.     if (ESP8266.find("WIFI CONNECTED\r\n") == 1)
  63.     {
  64.       Serial.println("WIFI CONNECTED");
  65.       break;
  66.     }
  67.     times_check++;
  68.     if (times_check > 3)
  69.     {
  70.       times_check = 0;
  71.       Serial.println("Trying to Reconnect..");
  72.     }
  73.   }
  74. }
  75.  
  76. void readSensors(void)
  77. {
  78.   temp_f = bme.readTemperature();
  79.   humidity = bme.readHumidity();
  80.   pressure = bme.readPressure() / 1000.0F;
  81. }
  82.  
  83.  
  84. void writeThingSpeak(void)
  85. {
  86.   startThingSpeakCmd();
  87.   // preparacao da string GET
  88.   String getStr = "GET /update?api_key=";
  89.   getStr += myAPIkey;
  90.   getStr += "&field1=";
  91.   getStr += String(temp_f);
  92.   getStr += "&field2=";
  93.   getStr += String(humidity);
  94.   getStr += "&field3=";
  95.   getStr += String(pressure);
  96.   getStr += "\r\n\r\n";
  97.   GetThingspeakcmd(getStr);
  98. }
  99.  
  100. void startThingSpeakCmd(void)
  101. {
  102.   ESP8266.flush();
  103.   String cmd = "AT+CIPSTART=\"TCP\",\"";
  104.   cmd += "184.106.153.149"; // api.thingspeak.com IP address
  105.   cmd += "\",80";
  106.   ESP8266.println(cmd);
  107.   Serial.print("Start Commands: ");
  108.   Serial.println(cmd);
  109.  
  110.   if (ESP8266.find("Error"))
  111.   {
  112.     Serial.println("AT+CIPSTART error");
  113.     return;
  114.   }
  115. }
  116.  
  117. String GetThingspeakcmd(String getStr)
  118. {
  119.   String cmd = "AT+CIPSEND=";
  120.   cmd += String(getStr.length());
  121.   ESP8266.println(cmd);
  122.   Serial.println(cmd);
  123.  
  124.   if (ESP8266.find(">"))
  125.   {
  126.     ESP8266.print(getStr);
  127.     Serial.println(getStr);
  128.     delay(500);
  129.     String messageBody = "";
  130.     while (ESP8266.available())
  131.     {
  132.       String line = ESP8266.readStringUntil('\n');
  133.       if (line.length() == 1)
  134.       {
  135.         messageBody = ESP8266.readStringUntil('\n');
  136.       }
  137.     }
  138.     Serial.print("MessageBody received: ");
  139.     Serial.println(messageBody);
  140.     return messageBody;
  141.   }
  142.   else
  143.   {
  144.     ESP8266.println("AT+CIPCLOSE");
  145.     Serial.println("AT+CIPCLOSE");
  146.   }
  147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement