Stap 3: Het toevoegen van een sensor aan de fundamentele schets
Als eenmaal begrepen hoe de basis code werkt, kunnen we toevoegen een sensor en het verzenden van gegevens naar Thingspeak. Wij hebben gekozen om toe te voegen een grond vochtigheid sensor genoemd YL-69. Sluit het zoals aangegeven in de regeling van de Fritzing aangesloten in deze stap en plak het vervolgens in de bodem.
We gaan niet om te zien hoe voeg elke interne sensor gebruikt in dit project, omdat in principe het is gewoon een kwestie van het procédé in deze stap * weergegeven.
Constante en variabelen nodig
Het eerste wat dat we gaan doen is het definiëren van een constante voor de pin gebruikt door de grond vochtigheid sensor. Vervolgens declareren we een string-variabele die nodig zijn voor het opslaan van de gegevens.
#define soilMoisturePIN 0 // soil moisture sensor connected to Analog Pin 0 String soilMoist = ""; // sends soil moisture values
De soilMoisture)
Nu hebben we een nieuwe functie die eigenlijk zet analoge waarden van de grond vochtigheid sensor in een percentage en vervolgens omgezet in tekenreeksen toevoegen. Als u van de vorige stap weten moet, accepteert Thinkspeak alleen tekenreeksen, dus deze conversie strikt vereist is.
String soilMoisture (){ float moisture; char moisture_c[6]; //calculates the percentage of soil moisture moisture = analogRead(soilMoisturePIN); moisture = 100*(1-(moisture)/1023); dtostrf(moisture, 0, 1, moisture_c); //converts floats to strings return (String) moisture_c; }
Hoe vindt deze omzetting plaats? Het is vrij eenvoudig. Verklaar een array van de char 6 elementen en converteer vervolgens praalwagens met behulp van de functie dtostrf.
dtostrf heeft de volgende syntaxis:
dtostrf (float_to_convert, minimum_length_of_the_string, decimal_significant_digits, the_string_array_previously_made);
Natuurlijk, zal uw functies hebben om een tekenreeks te retourneren.
Opmerking: bodemvocht is 0% wanneer de sensor geeft 1023 en 100% 0, geeft jou kunnen afwijken!
Verzenden van gegevens naar Thingspeak
De functie upadateValues is in wezen zoals gezien in de vorige stap. In feite, we alleen de waarde hebt gewijzigd van valuetosend naar moisture_cte sturen.
void upadateValues(String moisture_c){ String cmd = "AT+CIPSTART=\"TCP\",\""; cmd += IP; cmd += "\",80"; esp8266.println(cmd); delay(2000); if(esp8266.find("Error")){ Serial.print("Error1"); return; } cmd = GET + GET1; cmd += moisture_c; cmd += "\r\n"; Serial.print(cmd); esp8266.print("AT+CIPSEND="); esp8266.println(cmd.length()); if(esp8266.find(">")){ esp8266.print(cmd); }else{ esp8266.println("AT+CIPCLOSE"); } }
connectWiFi verandert helemaal niet.
Setup en lus functies
Deze twee functies verschillen alleen een klein beetje van die eerder gezien.
In de setup vinden we een extra lijn die nodig zijn om de grond vochtigheid sensor geïnitialiseerd.
pinMode(soilMoisturePIN, INPUT);
In de lus gewoon bellen wij terug soilMoisture en upadateValues. De eerste functie detecteert en het vochtgehalte, naar de tweede men stuurt het naar ThingSpeak berekent.
void loop(){ soilMoist = soilMoisture(); upadateValues(soilMoist); delay(5000); }
* Opmerking: onze laatste schets bevat een functie met de naam getValue , die vereist is voor het splitsen van de snaren van DHT22. Deze operaties heet Basisvormherkenning. Neem contact op de Deze pagina voor meer info over.