WIFI växt övervakningssystem baserade på Arduino MEGA och ESP8266 (3 / 4 steg)
Steg 3: Lägga till en sensor till grundläggande skiss
När förstås hur den grundläggande koden fungerar, kan vi lägga till en sensor och gör det skicka data till Thingspeak. Vi valde att lägga till en jord fukt sensor som kallas YL-69. Anslut det som visas i Fritzing systemet bifogas i detta steg och sedan klistra in den i marken.
Vi kommer inte att se hur du lägger till varje enskild sensor som används i detta projekt eftersom i princip är det bara att upprepa förloppet visas i detta steg *.
Konstant och variabler krävs
Det första vi ska göra är att definiera en konstant för stift används av markens fukt sensor. Sedan förklara vi en strängvariabel som behövs för att lagra data.
#define soilMoisturePIN 0 / / jord fukt sensor ansluten till analoga Pin 0
String soilMoist = ""; skickar i jorden fukt värden
Den soilMoisture)
Nu måste vi lägga till en ny funktion som i grunden omvandlar analoga värden av markens fukt sensor i procent och konverterar dem sedan till strängar. Som ni borde veta från föregående steg, accepterar Thinkspeak endast strängar, så att denna omvandling är absolut nödvändigt.
Sträng soilMoisture () {
float fuktighet;
char moisture_c [6].
beräknas andelen markfuktighet
fukt = analogRead(soilMoisturePIN);
fukt = 100*(1-(moisture)/1023);
dtostrf (fukt, 0, 1, moisture_c); konverterar flöten till strängar
återgå moisture_c (sträng);
}
Hur denna konvertering ske? Det är ganska enkelt. Deklarera en 6 element char array och sedan konvertera flyter genom att använda funktionen dtostrf.
dtostrf har följande syntax:
dtostrf (float_to_convert, minimum_length_of_the_string, decimal_significant_digits, the_string_array_previously_made);
Naturligtvis måste din funktioner returnera en sträng.
Obs: markfuktighet är 0% när sensorn anger 1023 och 100% anger 0, yours kan vara olika!
Skicka data till Thingspeak
Funktionen upadateValues är i huvudsak som en sett i föregående steg. I själva verket ändrade vi endast värdet att skicka från valuetosend till moisture_c.
void upadateValues(String moisture_c) {
Sträng cmd = "AT + CIPSTART = \"TCP\", \" ";
CMD + = IP;
CMD + = "\",80";
esp8266.println(CMD);
Delay(2000);
IF(esp8266.find("Error")) {
Serial.Print("Error1");
hemkomst.
}
CMD = GET + GET1;
CMD += moisture_c;
CMD + = "\r\n";
Serial.Print(CMD);
esp8266.Print("at+CIPSEND=");
esp8266.println(cmd.length());
om (esp8266.find(">")) {
esp8266.Print(CMD);
} annat {
esp8266.println("at+CIPCLOSE");
}
}
connectWiFi ändras inte alls.
Setup och Loop funktioner
Dessa två funktioner skiljer sig bara lite från de sett innan.
In i installationsprogrammet hittar vi en extra rad behövs för att initiera markens fukt sensor.
pinMode (soilMoisturePIN, ingång);
Till de loop kallar vi helt enkelt tillbaka soilMoisture och upadateValues. Den första funktionen upptäcker och beräknar vattenhalt, den andra en skickar den till ThingSpeak.
void loop() {
soilMoist = soilMoisture();
upadateValues(soilMoist);
Delay(5000);
}
* Obs: vår sista skiss innehåller en funktion som heter getValue som krävs för att dela upp strängar från DHT22. Denna verksamhet kallas tokenisera. Kolla denna sida för mer information om.