Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <ESP8266WiFi.h>
- #include <ArduinoJson.h>
- #include "HX711.h"
- #include "DHT.h"
- #include "Gsender.h"
- extern "C" {
- #include "user_interface.h"
- }
- #define DOUT 4 // czujnik DHT pin5, wzmacniacz hx711 dane pin 4, zegarowa pin 14
- #define CLK 14
- #define DHTPIN 5
- #define DHTTYPE DHT22
- DHT dht(DHTPIN,DHTTYPE);
- HX711 scale(DOUT, CLK);
- #define WiFiSSID "nazwawifi" //definiujemy nazwe i hasło wifi
- #define WiFiHaslo "hasło"
- #define adresSerwera "adres" //definiujemy adres i port serwera
- #define portSerwera 80
- void setup() {
- Serial.begin(115200);
- pinMode(2,OUTPUT);
- digitalWrite(2, HIGH);
- scale.set_scale(3210); //Ustawienie kalibracji
- scale.tare(); // zerowanie
- dht.begin();
- wifiConnect(); //funkcja łącząca z wifi
- }
- void loop() {
- float t,h,f;
- f=scale.get_units(); //pobieramy odczyty
- h = dht.readHumidity();
- t = dht.readTemperature();
- //Serial.println(f);
- //Serial.println(h);
- //Serial.println(t);
- wyslijDane(t,h,f); //funkcja wysylajaca dane na serwer
- system_deep_sleep_set_option(0); // ustawienie metody uśpienia
- system_deep_sleep(1000000*30); //uśpienie na końcu po wykonaniu się funkcji wyslijDane
- }
- void wifiConnect()
- {
- Serial.print("Trwa laczenie z siecia");
- WiFi.begin(WiFiSSID, WiFiHaslo);
- while (WiFi.status() != WL_CONNECTED) { //będzie się wykonywać aż nie połączy z wifi
- delay(1000);
- Serial.print(".");
- }
- Serial.println("Nawiazano polaczenie WiFi");
- }
- void wyslijDane(float t,float h,float f)
- {
- WiFiClient client;
- while(!client.connect(adresSerwera, portSerwera)) {
- Serial.println("blad polaczenia");
- wifiConnect();
- }
- String url = "/food/conec.php?temperatura="+String(t)+"&wilgotnosc="+String(h)+"&jedzenie="+String(f)+"&id=30";
- Serial.print("Wysylam dane na serwer: ");
- Serial.println(url);
- client.print(String("GET ") + url + " HTTP/1.1\r\n" + //wysłanie zapytania na serwer
- "Host: " + String(adresSerwera) + "\r\n" +
- "Connection: close\r\n" +
- "Content-Length: 0\r\n" +
- "\r\n");
- delay(3000);
- while(client.available()){
- client.readStringUntil('\n');
- client.readStringUntil('\n');
- client.readStringUntil('\n');
- client.readStringUntil('\n');
- client.readStringUntil('\n');
- client.readStringUntil('\n');
- client.readStringUntil('\n');
- client.readStringUntil('\n');
- client.readStringUntil('\n');
- String acc = client.readStringUntil('\n'); //zapisanie obiektu JSON
- Serial.println(acc);
- //acc to : {"temp_min":"20","temp_max":"30","humidity_min":"30","humidity_max":"65","food_min":"20"}
- char response[1024];
- strncpy(response, acc.c_str(), sizeof(response)); //analiza i przypisywanie wartości z obiektu
- response[sizeof(response) - 1] = 0;
- StaticJsonBuffer<200> jsonBuffer;
- JsonObject& root = jsonBuffer.parseObject(response);
- // Note the '&' above
- if (!root.success()) {
- Serial.println("parseObject() failed");
- return;
- }
- const char* temp_min = root["temp_min"];
- const char* temp_max = root["temp_max"];
- const char* humidity_min = root["humidity_min"];
- const char* humidity_max = root["humidity_max"];
- const char* food_min = root["food_min"];
- int tmax = atoi(temp_max); //konwersja string na int aby można było porównać
- int tmin = atoi(temp_min);
- int hmax = atoi(humidity_max);
- int hmin = atoi(humidity_min);
- int fmin = atoi(food_min);
- if(t>tmax||t<tmin||h>hmax||h<hmin||f<fmin){ //porównywanie i wysyłanie maila
- digitalWrite(2, LOW); // zapalenie diody
- delay(7000);
- digitalWrite(2, HIGH); // zgaszenie diody
- }
- if(t>tmax){
- Gsender *gsender = Gsender::Instance(); // Getting pointer to class instance
- String subject = "Pet Food Level Tracker!";
- if(gsender->Subject(subject)->Send("oski.koscianski@gmail.com", "Twój zwierzak się gotuję! Temperatura wynosi:"+String(t)+"°C przy maksymalnej ustawionej temperaturze "+String(tmax)+"°C.")) {
- Serial.println("Message send.");
- } else {
- Serial.print("Error sending message: ");
- Serial.println(gsender->getError());
- }
- }
- if(t<tmin){
- Gsender *gsender = Gsender::Instance(); // Getting pointer to class instance
- String subject = "Pet Food Level Tracker!";
- if(gsender->Subject(subject)->Send("oski.koscianski@gmail.com", "Twój zwierzak zamarza! Temperatura wynosi:"+String(t)+"°C przy minimalnej ustawionej temperaturze "+String(tmin)+"°C.")) {
- Serial.println("Message send.");
- } else {
- Serial.print("Error sending message: ");
- Serial.println(gsender->getError());
- }
- }
- if(h>hmax){
- Gsender *gsender = Gsender::Instance(); // Getting pointer to class instance
- String subject = "Pet Food Level Tracker!";
- if(gsender->Subject(subject)->Send("oski.koscianski@gmail.com", "Twój zwierzak się rozpływa! Wilgotność wynosi:"+String(h)+"% przy maksymalnej ustawionej wilgotności "+String(hmax)+"%.")) {
- Serial.println("Message send.");
- } else {
- Serial.print("Error sending message: ");
- Serial.println(gsender->getError());
- }
- }
- if(h<hmin){
- Gsender *gsender = Gsender::Instance(); // Getting pointer to class instance
- String subject = "Pet Food Level Tracker!";
- if(gsender->Subject(subject)->Send("oski.koscianski@gmail.com", "Twój zwierzak wysycha na wiór! Wilgotność wynosi: "+String(h)+"% przy minimalnej ustawionej wilgotności "+String(hmin)+"%.")) {
- Serial.println("Message send.");
- } else {
- Serial.print("Error sending message: ");
- Serial.println(gsender->getError());
- }
- }
- if(f<fmin){
- Gsender *gsender = Gsender::Instance(); // Getting pointer to class instance
- String subject = "Pet Food Level Tracker!";
- if(gsender->Subject(subject)->Send("oski.koscianski@gmail.com", "Twój zwierzak umiera z głodu! Obecna ilość jedzenia w miseczce to "+String(f)+"g przy minimalnej ustawionej ilości "+String(fmin)+"g.")) {
- Serial.println("Message send.");
- } else {
- Serial.print("Error sending message: ");
- Serial.println(gsender->getError());
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement