Skicka sensordata (DHT11 & BMP180) till ThingSpeak med en Arduino, via kabel eller WiFi (ESP8266) (1 / 5 steg)
Steg 1: Hinder och lösningar
Hurdle 1
Nu var man kan hitta ett program? ett fungerande exempel skulle vara trevlig rätt? I övre högra hörnet finns en knapp "Stöd" som kommer att gå till "Tutorials".
Under "Tutorials" hittar du:
"Använda en Arduino + Ethernet Shield att uppdatera en ThingSpeak kanal"
Låter bra, så du ladda ner programmet till din IDE, lägga till API-nyckel och sedan sammanställa det.
Darn... det inte sammanställa, du försöker fixa det (och det är säkert möjligt) tills du kommer till en punkt du har ingen aning vad som krävs.
Tydligen programmet fortfarande förväntar sig alla att använda 022 eller 023 IDE.
Det finns en länk till en Github sida men som kommer att ge u ett program att tweet och det är inte vad du vill, åtminstone inte för tillfället.
Lösning
Du sjuk hitta ett bättre program att starta från här:
https://github.com/ioBridge/ThingSpeak-Arduino-exa...
Programmet tar en läsning från A0 hamnen och skickar det till "Fält1" i din datastream
OK så du prova det, du hänga ett variabelt motstånd som en LDR eller NTC på port A0, lägga till din API i programmet och kör den.
Som fungerar bra, men jag ville bara läsa ett värde från en Analog port, jag hade en DHT11 fukt & temperatur sensor och även ett BMP180 tryck & temperatur sensor. Jag tänkte att det inte borde vara så svårt.
Hindret 2
Jag la de nödvändiga biblioteken till Thingspeak, lagt till objekt och läsa sensorerna i en variabel.
Sensorerna har emellertid flottar som resultat och Thingspeak vill att du ska skicka strängar.
Med de flesta variabler är det ganska lätt att förvandla dem till en sträng med funktionen enkel "sträng", men det är inte så lätt för flöten. Med flöten måste du använda kommandot "dtostrf" (som jag antar står för "dubbel-till-sträng-funktion"
Försöker hitta information om att funktionen på internet snabbt ledde mig till ändlösa diskussioner om "hur dum" var det och folk frågar frågor var ofta höra "Varför skulle du behöva att Serial.print gör att du" Ja, sant, men jag vill inte skriva ut, jag behöver det eftersom Thingspeak vill ha den.
Lösning
Om du använder kommandot dtostrf måste du ställa in ett buffertutrymme där strängen kommer att lagras. Det fungerar så här:
char t_buffer [10].
t=(ReadSensor);
Sträng temp=dtostrf(t,0,5,t_buffer);
Att bufferspace är viktigt. Jag hade den som arbetar med "7" eller ens "5", men när jag adderat en andra sensor som behöver denna funktion, min datastream skulle krascha och eller jag fick mest underliga resultat. Jag tänkte också att jag kunde använda den samma bufferspace omväxlande för varje sensor, men som också verkligen fungerade, så nu har jag en bufferspace för varje sensor.
Nu är jag ingen spricka i C, så kanske finns det ett bättre sätt att göra detta, om så jag skulle älska att höra det, men detta fungerade för mig.
Hurdle3
När jag hade string omvandlingar, kunde jag lägga till data i datastream.
Thingspeak exempelprogrammet visar att för ett fält endast, men det blir klart ganska fort att du måste lägga till strängar och kasta i rätt mängd plussesand et-tecken.
Lösning
Så för säg 4 olika fält blir det såhär:
updateThingSpeak ("Fält1 ="+ temp +"& Fält2 ="+ fuktigt +"& field3 ="+ pres +"& field4 =" + temp2);