Stap 1: Horden en oplossingen
Hindernis 1
Nu waar om een programma te vinden? een werkend voorbeeld zou mooi recht? In de juiste hoogste hoek is er een knop 'Support' dat zal gaan naar 'Tutorials'.
Onder 'Tutorials' vindt u:
"Met behulp van een Arduino + Ethernet-Shield een ThingSpeak kanaal bijwerken"
Klinkt goed, zodat je dat programma naar uw IDE downloaden, voeg de API-sleutel en vervolgens compileren.
Darn... het niet compileren, u proberen het te repareren (en dat is zeker mogelijk) tot aan een punt dat je geen idee hebt wat nodig is.
Het programma heeft blijkbaar nog steeds iedereen te gebruiken de 022 of 023 IDE verwacht.
Er is een link naar een Github pagina maar dat geeft u een programma om te tjirpen en dat is niet wat je wilt, althans niet voor nu.
Oplossing
Ziek u een beter programma te starten vanaf hier:
https://github.com/ioBridge/ThingSpeak-Arduino-eXa...
Dat programma neemt een lezen vanaf de A0-poort en stuurt die naar 'Veld1' in uw datastream
OK dus je dat proberen, hang je een variabele weerstand zoals een LDR of NTC op poort A0, toevoegen uw API in het programma en voer het.
Dat werkt prima, maar ik wil niet alleen een waarde lezen vanaf een analoge poort, had ik een DHT11 vocht en temperatuur sensor, alsmede een BMP180 druk & temperatuur sensor. Ik dacht dat het moet niet te hard.
Hindernis 2
Ik voegde de nodige bibliotheken aan de Thingspeak, de objecten toegevoegd en lees de sensoren in een variabele.
De sensoren wel praalwagens als resultaat en Thingspeak wil u verzenden van tekenreeksen.
Met de meeste variabelen is het dus vrij makkelijk om ze te zetten in een tekenreeks met de eenvoudige 'string'-functie, maar het is niet zo makkelijk voor praalwagens. Met drijvers hebt u de opdracht van de "dtostrf" (wat ik denk dat staat voor 'dubbel-naar-tekenreeks-functie'
Op zoek naar info op dat functie op internet snel me naar eindeloze discussies over 'hoe dom leidde' het was en mensen vragen vragen waren vaak verteld "Waarom zou je nodig dat Serial.print dat voor u doet" Ja, true, maar ik niet wilt afdrukken, ik heb het nodig omdat Thingspeak wil.
Oplossing
Gebruik van de opdracht van de dtostrf dat u wilt instellen van een bufferruimte waarin de tekenreeks wordt opgeslagen. Het werkt als volgt:
char t_buffer[10]; t=(ReadSensor); String temp=dtostrf(t,0,5,t_buffer);
Dat bufferspace is belangrijk. Ik had het werken met '7' of zelfs '5', maar wanneer ik een tweede sensor waarvoor u deze functie hebt toegevoegd, mijn datastream zou verpletteren en ik heb de vreemdste resultaten. Ik dacht ook dat ik kon gebruiken de zelfde bufferspace afwisselend voor elke sensor, maar dat ook echt werkte, dus nu heb ik een bufferspace voor elke sensor.
Nu ik geen barst in C ben, dus misschien is er een betere manier om dit te doen, als het zo zou ik graag horen, maar dit werkte voor mij.
Hurdle3
Zodra ik had de tekenreeks conversies, kan ik de gegevens toevoegen aan de datastream.
De voorbeeldprogramma Thingspeak blijkt dat voor één veld alleen, maar het wordt duidelijk vrij snel dat je moet toevoegen van de snaren en gooien in de juiste hoeveelheid plussesand ampersands.
Oplossing
Dus voor zeggen 4 verschillende velden wordt het als volgt:
updateThingSpeak ("Veld1 ="+"temp + & Veld2 ="+"vochtige + & Veld3 ="+"pres + & Veld4 =" + temp2);