Inhoudsopgave:

Bouw een interne IoT-luchtkwaliteitssensor Geen cloud vereist - Ajarnpa
Bouw een interne IoT-luchtkwaliteitssensor Geen cloud vereist - Ajarnpa

Video: Bouw een interne IoT-luchtkwaliteitssensor Geen cloud vereist - Ajarnpa

Video: Bouw een interne IoT-luchtkwaliteitssensor Geen cloud vereist - Ajarnpa
Video: Master GPIO with Raspberry Pi Pico & MicroPython - Part 2 2024, Juni-
Anonim
Bouw een interne IoT-luchtkwaliteitssensor Geen cloud vereist
Bouw een interne IoT-luchtkwaliteitssensor Geen cloud vereist
Bouw een interne IoT-luchtkwaliteitssensor Geen cloud vereist
Bouw een interne IoT-luchtkwaliteitssensor Geen cloud vereist
Bouw een interne IoT-luchtkwaliteitssensor Geen cloud vereist
Bouw een interne IoT-luchtkwaliteitssensor Geen cloud vereist
Bouw een interne IoT-luchtkwaliteitssensor Geen cloud vereist
Bouw een interne IoT-luchtkwaliteitssensor Geen cloud vereist

De kwaliteit van de binnen- of buitenlucht is afhankelijk van vele bronnen van vervuiling en ook van het weer.

Dit apparaat legt enkele veelvoorkomende en enkele van de meest interessante parameters vast door gebruik te maken van 2 sensorchips.

  • Temperatuur
  • Vochtigheid
  • Druk
  • Organisch gas
  • Micro-deeltjes

De sensoren die hier worden gebruikt zijn de BME680 voor het verkrijgen van temperatuur, vochtigheid, druk en organische gaswaarden en de PMS5003 om de dichtheid van de microdeeltjes te krijgen.

Door de HomeDing-bibliotheek te gebruiken, is het eenvoudig om een apparaat te bouwen dat alleen met uw thuisnetwerk is verbonden en dat door elke browser op het netwerk kan worden bereikt en beheerd. Het wordt geleverd met een selectie van elementen waarmee u de meest voorkomende sensorchips, apparaten en andere services kunt gebruiken.

Het biedt ook een complete oplossing voor het hosten van een webside in het apparaat in plaats van een cloudgebaseerde oplossing te gebruiken om de sensorgegevens weer te geven en met het apparaat te communiceren.

Benodigdheden

Het enige dat u nodig hebt om dit project te bouwen, is een op ESP8266 gebaseerd bord zoals het nodemcu-bord en een set sensoren om de luchtkwaliteit te meten. De HomeDing-bibliotheek die in dit project wordt gebruikt, ondersteunt enkele van de gebruikelijke sensorchips voor temperatuur, vochtigheid, druk en kwaliteit. Hier wordt de BMP680-chip gebruikt.

  • Een USB-stekker en een micro-usb-kabel voor voeding.
  • 1 nodemcu bord met de ESP8266 CPU.
  • 1 BME680 sensor breakout board.
  • 1 PM2.5 lasersensor voor luchtdeeltjes type PMS5003

Het is gemakkelijk om de BME680-sensor te verwisselen met een DHT22-sensor, omdat deze ook door de bibliotheek en vele andere wordt ondersteund.

Stap 1: Bereid de Arduino-omgeving voor op ESP8266

Bereid Arduino-omgeving voor op ESP8266
Bereid Arduino-omgeving voor op ESP8266
  1. Installeer de nieuwste versie van Arduino IDE (momenteel versie 1.8.2).
  2. Gebruik Board Manager om de esp8266-ondersteuning te installeren. Een gedetailleerde instructie vindt u hier:https://arduino-esp8266.readthedocs.io/en/latest/i…
  3. Stel de bordopties in voor een NodeMCU 1.0 met 1 MByte SPIFFS-bestandssysteem zoals weergegeven in de schermafbeelding

Stap 2: Vereiste bibliotheken opnemen

Vereiste bibliotheken opnemen
Vereiste bibliotheken opnemen

De HomeDing-bibliotheek is afhankelijk van enkele veelvoorkomende extra bibliotheken om sensoren en displays te laten werken.

Wanneer u de HomeDing-bibliotheek installeert, ziet u een pop-up met deze vereiste bibliotheken die automatisch kunnen worden geïnstalleerd en weergegeven in de afbeelding en het is eenvoudig om ze allemaal te installeren.

Soms (om onbekende redenen) mislukt de installatie van de bibliotheken, zodat alle vereiste bibliotheken handmatig moeten worden geïnstalleerd.

Meer details over de vereiste bibliotheken zijn te vinden op de documentatiewebsite op

Dit is de lijst met momenteel vereiste bibliotheken:

  • Adafruit NeoPixel
  • LiquidCrystal_PCF8574.h
  • ESP8266 en ESP32 Oled-stuurprogramma voor SSD1306-display
  • RotaryEncoder
  • DHT-sensorbibliotheek voor ESPx
  • OneWire

De PMS5003 luchtdeeltjeslasersensor communiceert via een serieel lijnsignaal van 9600 baud. Dit signaal wordt opgevangen met behulp van de SoftwareSerial-bibliotheek die bij de installatie van de ESP8266-tools wordt geleverd. Zorg ervoor dat u geen oudere versie als bibliotheek hebt geïnstalleerd.

Stap 3: Pas de standaardvoorbeeldschets aan

Pas de standaardvoorbeeldschets aan
Pas de standaardvoorbeeldschets aan

Het standaardvoorbeeld bevat al enkele van de meest voorkomende sensoren als elementen, dus er is slechts enige configuratie vereist.

Dit geldt voor de BME680-sensor die wordt ondersteund door het BME680-element.

De PMS5003-sensor komt minder vaak voor en moet worden geactiveerd door het PMS-element in de firmware op te nemen. Dit wordt gedaan door #define HOMEDING_INCLUDE_PMS te definiëren in het elementregistergedeelte van de schets

#define HOMEDING_INCLUDE_BME680#define HOMEDING_INCLUDE_PMS

Om het nieuwe apparaat eenvoudig aan het netwerk toe te voegen, kunt u de SSID en wachtwoordzin van uw wifi thuis toevoegen in het bestand secrets.h naast het standaard.ino-schetsbestand. Maar je kunt ook de ingebouwde WiFi Manager gebruiken om het apparaat zonder deze hard-coded configuratie aan het netwerk toe te voegen.

Nu is alles met betrekking tot de implementatie van de schets gedaan en kan de firmware worden gecompileerd en geüpload.

Stap 4: Upload de webgebruikersinterface

Het standaardvoorbeeld wordt geleverd met een gegevensmap die alle bestanden voor de web-UI bevat.

Voordat u deze bestanden uploadt, wilt u misschien het env.json- en config.json-bestand toevoegen dat u bij dit artikel kunt vinden, omdat dit de zaken gemakkelijker maakt.

De inhoud van deze bestanden is wat het IoT-apparaat speciaal maakt en zich gedraagt als een luchtkwaliteitssensor. In dit verhaal wordt het uitgebreid uitgelegd.

Gebruik het ESP8266-hulpprogramma voor het uploaden van bestanden en upload alle bestanden. Het heeft een herstart nodig om de configuratie te activeren.

Stap 5: Voeg de BME680-sensor toe

Voeg de BME680-sensor toe
Voeg de BME680-sensor toe
Voeg de BME680-sensor toe
Voeg de BME680-sensor toe
Voeg de BME680-sensor toe
Voeg de BME680-sensor toe

De BME680-sensor communiceert met het bord via de I2C-bus.

Aangezien dit mogelijk wordt gedeeld met andere extensies zoals andere sensoren of displays, wordt dit op apparaatniveau in env.json geconfigureerd samen met de netwerknaam van het apparaat. Hier is een uitgepakt voorbeeld van apparaat- en I2C-instellingen:

"apparaat": {

"0": { "name": "airding", "description": "Luchtkwaliteitssensor", … "i2c-scl": "D2", "i2c-sda": "D1" } }

Op het breadboard zie je de aansluitkabels naar de sensor: 3.3V=rood, GND=zwart, SCL=geel, SDA=blauw

De configuratie voor BME680 kan worden gebruikt in config.json:

"bme680": {

"bd": { "adres": "0x77", "readtime": "10s" } }

We zullen de acties later toevoegen.

Om de setup te testen, gebruikt u gewoon een browser en opent u https://airding/board.htm en u ziet de werkelijke waarden van de sensor weergegeven en deze worden ongeveer elke 10 seconden bijgewerkt:

Stap 6: Voeg de PMS5003-sensor toe

Voeg de PMS5003-sensor toe
Voeg de PMS5003-sensor toe

Ik had geen sensor met een breadboard-vriendelijke connector, dus ik moest een van de connectoren op de kabel afsnijden en mijn soldeerbout gebruiken om deze rechtstreeks op het nodemcu-bord te bevestigen. Je kunt het nog zien op de laatste foto's.

De voeding voor deze sensor moet worden genomen van de Vin die normaal gesproken wordt gevoed door de USB-bus. GND is hetzelfde, maar ook beschikbaar naast de Vin-pin.

De gegevens van de sensor worden overgedragen in een standaard 9600 baud serieel formaat, dus de rx- en tx-pinnen en de leestijd moeten worden geconfigureerd:

"pm": {

"pm25": { "description": "pm25-deeltjessensor", "pinrx": "D6", "pintx": "D5", "readtime": "10s" } }

We zullen de acties later toevoegen.

Om de installatie opnieuw te testen, start u het apparaat opnieuw op en gebruikt u een browser en opent u https://airding/board.htm en u ziet de werkelijke pm35-waarde van de sensor weergegeven en deze wordt ongeveer elke 10 seconden bijgewerkt, maar deze waarde is normaal niet vaak wisselen.

U kunt hogere waarden krijgen door een kaarslicht naast de sensor te plaatsen, aangezien een kaars veel van deze deeltjes produceert.

Nu kun je alles in een mooie behuizing stoppen omdat alle andere configuraties en zelfs software-updates op afstand kunnen worden gedaan.

Stap 7: Enkele netwerkfuncties toevoegen

Het volgende configuratie-extract in env.json is ingeschakeld:

  • de firmware via de ether bijwerken
  • maakt detectie van het netwerk mogelijk met behulp van het SSDP-netwerkprotocol en haalt de huidige tijd op van een ntp-server.

{

… "ota": { "0": { "port": 8266, "passwd": "123", "description": "Luister naar 'over-the-air' OTA-updates" } }, "ssdp": { "0 ": { "Fabrikant": "uwnaam" } }, "ntptime": { "0": { "readtime": "36h", "zone": 2 } } }

U moet de tijdzone aanpassen aan uw locatie. Als u twijfelt, kunt u de website https://www.timeanddate.com/ gebruiken om de compensatie van UTC/GMT te krijgen. "2" is geschikt voor de zomer in Duitsland.

U kunt het ota-wachtwoord ook aanpassen na het lezen van de instructies met betrekking tot de opslagmodus in de documentatie op

Na een herstart kunt u het uitgezonden apparaat op het netwerk vinden en na het ontvangen van een antwoord van de ntp-server is de lokale tijd beschikbaar.

Stap 8: wat logboekregistratie toevoegen

Alleen de werkelijke waarden geven misschien niet genoeg, dus er kunnen wat meer elementen worden gebruikt.

Voor dit verhaal worden het Log-element en het NPTTime-element gebruikt om de geschiedenis van sensorwaarden in een logbestand vast te leggen en de Web UI-kaart voor dit element kan het als een grafiek weergeven.

De volgende configuratie creëert de 2 log-elementen voor gas en deeltjes:

{

"log": { "pm": { "description": "Log of pm25", "filename": "/pmlog.txt", "filesize": "10000" }, "aq": { "description": " Log van gaskwaliteit", "bestandsnaam": "/aqlog.txt", "bestandsgrootte": "10000" } } }

Stap 9: Acties

Acties
Acties

Nu moeten we de werkelijke waarden overbrengen naar de log-elementen met behulp van acties. De acties gebruiken een URL-notatie om een kay en waarde door te geven aan het doelelement. Veel elementen ondersteunen het uitzenden van acties op bepaalde gebeurtenissen die plaatsvinden, zoals het vastleggen van een nieuwe sensorwaarde.

Acties worden geconfigureerd bij het element dat acties uitvoert. Er zijn 2 vermeldingen vereist:

  • De pms/p25 onvalue-gebeurtenis stuurt de werkelijke waarde naar het log/pm-element met behulp van een waardeactie.
  • De bme680/bd ongas-gebeurtenis stuurt de werkelijke waarde naar het log/pm-element met behulp van een waardeactie.

{

"pms": { "pm25": { … "onvalue": "log/pm?value=$v" } }, "bme680": { "bd": { … "ongas": "log/aq?value= $v" } } }

Nu zijn alle elementen geconfigureerd.

Stap 10: Afbeeldingen en configuratiebestanden

Afbeeldingen en configuratiebestanden
Afbeeldingen en configuratiebestanden
Afbeeldingen en configuratiebestanden
Afbeeldingen en configuratiebestanden
Afbeeldingen en configuratiebestanden
Afbeeldingen en configuratiebestanden

Hier zijn enkele foto's van mijn laatste IoT-luchtkwaliteitssensor.

De configuratiebestanden om te downloaden moeten worden hernoemd naar *.json (geen.txt) voordat ze worden geüpload.

Links en referenties

  • HomeDing Broncode Repository:
  • Documentatie:
  • Standaardvoorbeeld:
  • BME680-element:
  • PMS-element:
  • Log-element:
  • NtpTime-element:

Aanbevolen: