το πρόγραμμα του Μετεωρολογικού σταθμού

  • Εκτύπωση

//Αντιγράψτε το στο ide και προσαρμόστε το  με τα δικά σας στοιχεία 

//με μπλέ είναι τα σχόλια στις εντολές

 

 

// Απλός μετεωρολογικός σταθμός (για ThingSpeak)

#include "ThingSpeak.h" // Βιβλιοθήκη ThingSpeak
#include <ESP8266WiFi.h> // Βιβλιοθήκη ESP8266 WiFi
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h> //Αισθητήρας Βαρ.Πίεσης, θερμοκρασίας, σχ.υγρασίας
// Βιβλιοθήκη ESP8266 WiFi BME280 κοκκινο 3.3V, μαύρο γείωση grd, πράσινο SCL, μπλε SDA
#include <Wire.h> // βιβλιοθήκη επικοινωνίας με I2C για lcd & BME280

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); //τύπος και διεύθυνση 0χ27

char ssid[] = "χχχχχχχχχχχχχχ"; // όνομα wifi
char pass[] = "χχχχχχχχχ"; // κωδικός wifi
long myChannelNumber = 99999999; // αριθμός καναλιού ThingSpeak
const char* myWriteAPIKey = "χχχχχχχχχχχχχχ"; // API Key για εγγραφή ThingSpeak

WiFiClient client; //τρόπος σύνδεσης με το ασύρματο δίκτυο
Adafruit_BME280 bme;

unsigned long startTime = 0;
float temp(NAN), hum(NAN), pres(NAN), fos(NAN); // ορισμός των μεταβλητών


void setup() {
Serial.begin(9600); //θα εμφανίζουμε και στο σειριακό μονιτορ για έλεγχο
Wire.begin(D2, D1); //εκκίνηση συσκευών I2C

WiFi.mode(WIFI_STA);
ThingSpeak.begin(client); // Αναγνώριση ThingSpeak

lcd.init(); //Αρχικοποίηση οθόνης
lcd.backlight();

if(!bme.begin(0x77)) { // πιθανές διευθύνσεις 0Χ76 ή 0Χ77
Serial.println("Δεν βρίσκω τον BME280 !");
while(1);
}
startTime = millis();
}

void loop() {
if(WiFi.status() != WL_CONNECTED) {
Serial.print("προσπάθεια σύνδεσης σε: ");
Serial.println(ssid);
WiFi.begin(ssid, pass);
while(WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("\n Επιτυχής σύνδεση");
}

if ((millis() - startTime) > 60000L) { //ανα 60 δευτερόλεπτα
temp = bme.readTemperature(); // αναγνωση θερμοκρασίας
pres = bme.readPressure()/100.0F; // ανάγνωση πίεσης
hum = bme.readHumidity(); // ανάγνωση υγρασίας
pres = (int)(100*pres+0.5)/100.0; //στρογγυλοποίηση
hum = (int)(10*hum+0.5)/10.0;

fos = analogRead(A0); //ανάγνωση φωτεινότητας με αναλογικό αισθητήρα φωτός

Serial.print(fos); //εμφάνιση στο σειριακό μονιτορ
Serial.print" ";
Serial.print(temp);
Serial.print("°C");

Serial.print(pres);
Serial.print(" kPa");

Serial.print(hum);
Serial.println("% ");

lcd.clear(); //εμφάνιση σε lcd
lcd.setCursor(0, 0);

lcd.print(temp,0);
lcd.print("oC ");
lcd.print(" P:");
lcd.print(pres, 0);

lcd.setCursor(1, 1);
lcd.print(hum, 0);
lcd.print("% " );
lcd.print(" L:");
lcd.print(fos, 0);

ThingSpeak.setField(1, temp); //εγγραφή θερμοκρασίας στο πεδίο 1 ThingSpeak
ThingSpeak.setField(2, pres); //εγγραφή πίεσης στο πεδίο 2
ThingSpeak.setField(3, hum); //εγγραφή σχετ. υγρασίας στο πεδίο 3
ThingSpeak.setField(4, fos); //εγγραφή φωτεινότητας στο πεδίο 4

int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (x == 200) //ελεγχος επιτυχούς ενημέρωσης ThingSpeak
{
Serial.println("Επιτυχής ενημέρση καναλιού.");
}
else
{
Serial.println("Πρόβλημα κωδ. " + String(x));
}

startTime = millis();
}
}