WEMOS D1 over Wifi verbinden met MySQL

Ik heb reeds jaar en dag een Raspberry Pi lopen waar alle elektriciteits, gas en waterverbruiken worden gelogd. Via een webserver zijn de data dan in grafiekvorm te raadplegen. Zie ook het artikel : http://wiki.robotmc.be/index.php/Loggen_pi

Dit werkt uitstekend, maar alle sensoren zijn nu aangesloten op de Pi zelf. Met de WemosD1 echter is het vrij eenvoudig om via Wifi extra uitbreidingen toe te voegen. De Arduino omgeving heeft een uitgebreide ondersteuning voor deze modules, en je vindt talloze voorbeelden op het net. Hieronder mijn ervaringen met een DHT22, DS18B20 en een regenmeter.

WEMOS D1 gevoed met een batterij

De ESP8266 kan in "deep sleep"modus gezet worden, het stroomverbruik bedraagt dan slechts 50 µA. De WiFi verbinding is dan uiteraard uitgeschakeld. Ontwaken kan door een interne counter waar je een periode van maximaal ca 71 minuten de ESP kan laten slapen. Een andere mogelijkheid is om de RST pin aan GND te verbinden. Tijdens "deep sleep" is de ESP vrijwel volledig uitgeschakeld, alleen  de RTC counter telt nog. Ook is er een beperkt RAM bereik dat behouden blijft. Het ontwaken is vergelijkbaar met een reset : de ESP start terug volledig op. 

De WEMOS D1 heeft echter een stroomverbruik van 200 µA in "deep sleep". Reden is de spanningsregelaar en daarnaast de CH340 usb-serieel omzetter. Nog een groter nadeel is dat het stroomverbruik bij afnemende spanning plots stijgt naar 3 mA ! Dit treedt op bij spanningen lager dan 3 V.  Ik vermoed dat de regelaar of de CH340 hiervan de oorzaak is.

Als je op deze manier data wil wegschrijven naar MySQL, kan dit alleen door te "Pushen". Immers, tijdens deepsleep is de Wemos onbereikbaar. De afloop is dus als volgt : 

  1. Opstart Wemos, sensoren uitlezen (vb temp. en vochtigheid met de DHT22)
  2. Verbinding maken met het WiFi netwerk
  3. Een "Insert" MySQL opdracht met de data naar de server sturen waar MySQL draait.
  4. De "deep sleep" periode in stellen en starten.

Dit werkt prima, maar heeft wel enkele nadelen : de deepsleep counter heeft toch wel erg grote toleranties (+/-3%). Je kan dus niet op vaste tijdstippen data versturen. Er is wel een workaround : je kan wel  met een "NTP server" verbinden en de exacte tijd opvragen. Aan de hand van deze tijd wordt dan de deepsleep periode telkens terug berekend. Als je vaak data wil versturen (>éénmaal/uur), wordt het stroomverbruik toch redelijk groot. De ESP kan tijdens deepsleep geen interrupts behandelen. Pulsen tellen van een regenmeter is bijvoorbeeld niet mogelijk.

MySQL insert met Arduino

Volgende libs zijn beschikbaar voor Arduino : 

#include <MySQL_Connection.h>

#include <MySQL_Cursor.h>

De juiste "Insert" string moet je zelf nog samen stellen. Dit is meestal een struikelsteen, omdat de kleinste fout al voldoende is om te falen. Daarom gebruik ik "PHPMyAdmin" om deze strings eerst vooraf te testen. PHPMyAdmin loopt dus op de computer waar ook MySQL op draait (vb Raspberry). Je kan via je browser nu MySQL in stellen en alle bewerkingen doen in een eenvoudige interface. Hier kan je dan een "insert string uit testen. 

In de volgende sketch vindt je deze toepassing : Temperatuur/hygro meting met een DHT22, Oled scherm, en upload naar een MySQL databank. Na meting gaat de Wemos terug in deepsleep voor 60 minuten. 

Arduino sketch