MKR FOX 1200 Weermonitor
Componenten en benodigdheden
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Apps en online services
| ||||
| ||||
|
Over dit project
Opmerking:deze tutorial kan verouderd zijn, ga naar hier voor een meer actuele versie.
Dit project laat zien hoe je een MKR FOX 1200 . draait en een aantal I2C-sensoren in een eenvoudig weerstation op batterijen.
We gebruiken:
- de temperatuursensor aan boord (lage precisie, ± 1 °C)
- HTU21D I2C-sensor om vochtigheidsniveau te krijgen
- Bosch BMP280 om de barometrische druk en nauwkeurige temperatuur te krijgen
- TSL2561 lichtsensor om helderheid te krijgen
Hardware-installatie
De hardware-aansluitingen voor dit project zijn vrij eenvoudig:alle sensoren gebruiken I2C-interfaces en werken op 3,3V.
Ze hebben vier draden nodig van de MKR FOX 1200:GND, 3.3V, SDA op Pin 11 en SCL op Pin 12. Dezelfde vier verbindingen kunnen parallel worden gedeeld met de drie sensoren omdat elk van hen een specifiek I2C-adres heeft en dus de relevante bibliotheken en functies zorgen ervoor dat elk van hen wordt onderscheiden.
Het hele project kan worden gevoed door twee AA- of AAA-alkalinebatterijen die in serie zijn geschakeld om 3V te genereren en worden aangesloten op het schroefaansluitklemmenblok op het bord.
Sigfox-berichten
Aangezien het Sigfox-netwerk maximaal 140 berichten per dag kan verzenden, optimaliseren we de metingen en verzenden we gegevens in compact binair formaat.
Het inpakken van gegevens is belangrijk omdat de maximale grootte van een bericht dat u kunt verzenden 12 bytes is. Een float neemt 4 bytes in beslag, dus we zullen onze metingen in een kleinere representatie moeten stoppen.
Het float-formaat is erg breed (u kunt getallen weergeven zo groot als 3.402823e+38 (!) ) en we hebben niet de hele dataruimte nodig; we kunnen dan veilige limieten bepalen (op basis van waar we het station gaan inzetten) en de oorspronkelijke weergave in de backend herstellen.
Configuratie van de Cloud Services
We gebruiken twee cloudservices:
- Sigfox-backend
- Dingenspreken
Registreer uw bord op de Sigfox-backend met behulp van PAC en ID geleverd door FirstConfiguration-voorbeeld (kan worden overgeslagen als u dat al deed voor een vorig project).
Beide moeten worden geconfigureerd om met elkaar te praten en de gegevens in het juiste formaat te interpreteren. Registreer je bij beide en maak een paar kanalen op Thingspeak. De configuratie wordt weergegeven in de onderstaande afbeelding.
Het eerste kanaal dat we configureren, is het kanaal dat de onbewerkte gegevens ontvangt (readChannelID
), terwijl de tweede de opnieuw geschaalde gegevens verzamelt (writeChannelID
).
Het wordt tijd om de schets te uploaden met Arduino Create Editor. Met de standaardschets kunt u alle infrastructuur uitgebreid testen voordat u deze in het veld implementeert.
Vergeet niet aan te geven:
oneshot =false
wanneer u zeker weet dat alle instellingen van de backend-infrastructuur correct zijn. De schets wacht op de seriële poort, dus we zullen hem nu niet starten. Open in plaats daarvan de SigFox-backend en configureer een callback:
Klik op TYPE APPARAAT -> LIJST -> klik met de rechtermuisknop op je bord en klik op Bewerken.
Klik op TERUGBELLEN in het menu aan de linkerkant:
U ziet een venster als dit:
Klik op Nieuw knop rechtsboven in het venster:
Selecteer Aangepast terugbellen:
De relevante configuraties worden hieronder vermeld. Zorg ervoor dat het terugbellen is ingesteld als:
- TYPE:
DATA/UPLINK
- Kanaal:
URL
- Http-methode:
GET
Stel als aangepast laadvermogen in:
status::uint:8 temp1::int:16:little-endian temp2::int:16:little-endian pers::uint:16:little-endian brom::uint:16:little -endian light::uint:16:little-endian lastMsg::uint:8
Dit vertegenwoordigt de structuur die we in de schets hebben ingepakt. We wijzen een variabele toe aan elk veld, zodat we ernaar kunnen verwijzen in de HTTP-callback.
Stel als URL-patroon in:
https://api.thingspeak.com/update?api_key=XXXXXXXXXXXX&field1={customData#temp1}&field2={customData#press}&field3={customData#temp2}&field4={customData#hum}&field5={customData#light}&field6={customData#status}&field7={customData#lastMsg}
Eenmaal geconfigureerd, zouden uw vensters als volgt moeten zijn:
Vergeet niet om de API-sleutel api_key
te wijzigen met degene geleverd door Thingspeak als Write API Key
voor Kanaal1
.
Opslaan en afsluiten. We kunnen nu de seriële poort openen en kijken naar het eerste bericht dat wordt verzonden. Hoera!
Van onbewerkt tot grafisch
De configuratie die we hebben geconfigureerd, leidt onze gegevens naar de Thingspeak-backend, maar ze zijn nog steeds in onbewerkte indeling; om ze opnieuw te converteren, gebruiken we de Thingspeak-analysetool met dit fragment
% TODO - Vervang de [] door kanaal-ID om gegevens te lezen van:readChannelID =[]; % TODO - Voer de Read API Key in tussen de '' hieronder:readAPIKey ='T6UK7XO6A4H2AGT7'; % TODO - Vervang [] door kanaal-ID om gegevens naar te schrijven:writeChannelID =[]; % TODO - Voer de Write API Key in tussen de '' hieronder:writeAPIKey ='XU4TGY261P6B5USN'; %% Gegevens lezen %% gegevens =thingSpeakRead(readChannelID, 'ReadKey', readAPIKey,'OutputFormat','table'); geanalyseerdData =gegevens; %% Analysegegevens %% INT16_t_MAX =32767; UINT16_t_MAX =65536; geanalyseerdData.('Temperatuur1') =gegevens.('Temperatuur1') / INT16_t_MAX * 120; geanalyseerdData.('Temperatuur2') =gegevens.('Temperatuur2') / INT16_t_MAX * 120; geanalyseerdData.('Druk') =data.('Druk') / UINT16_t_MAX * 200000; analysisData.('Light') =data.('Light') / UINT16_t_MAX * 100000; analyzeData.('Vochtigheid') =data.('Vochtigheid') / UINT16_t_MAX * 110; %% Schrijfgegevens %% thingSpeakWrite(writeChannelID, analysisData, 'WriteKey', writeAPIKey); %% Plan actie:Reageer -> elke 10 minuten
Door de kanaal-ID's . te vervangen met onze eigen gegevens kunnen we eindelijk de onbewerkte gegevens terugzetten in werkelijke waarden. Vergeet niet om de analyse-actie elke 10 minuten te plannen met Reageren anders wordt het nooit uitgevoerd!
We hebben eindelijk onze prachtige grafieken.
Code
Weermonitor
Productieproces
- Raspberry Pi-weerstation
- Weermonitor
- Maak Monitor Ambilight met Arduino
- CO2-monitoring met K30-sensor
- Hartslagmeter met IoT
- Arduino + ESP-weerbox
- Hoe lang ben je?
- Capacitieve vingerafdruksensor met een Arduino of ESP8266
- Arduino Cloud Sensor Tower
- DIY-luchtkwaliteitsmonitor met Sharp GP2Y1010AU0F-sensor
- Lokaal weerstation