English Click this button for the international website

COVID-19 CORONA Tracker: ESP32 & Arduino IDE

Wanneer je de situatie met betrekking tot de verspreiding van COVID-19 24/7 wilt volgen, kunt je hiervoor een microcontroller gebruiken. Samen met een LCD kun je een live COVID-19 CORONA Tracker samenstellen. Bijvoorbeeld met een M5StickC, die is uitgerust met een ESP32 en een kleuren-LCD. Wil je hetzelfde doen maar dan met een ESP8266 microcontroller, lees dan de blog “ESP8266 Real-time COVID-19 Datamonitor“.

Als je wilt weten hoe je de gegevens met PHP kunt ophalen lees dan de blog “COVID-19 CORONA Data opvragen met PHP

COVID-19 CORONA Tracker ESP32 & Arduino IDE - M5StickC
COVID-19 CORONA Tracker ESP32 & Arduino IDE – M5StickC

M5StickC en de Arduino IDE

Allereerst hebben we een ESP32-compatible ontwikkelbord met LCD nodig, zoals de M5StickC. Je kunt natuurlijk een andere ESP32 gebruiken, zolang je de schets maar aanpast. Zoals gewoonlijk, installeer je de Arduino IDE met de ESP32 core. Wanneer je de M5StickC gebruikt, installeer je ook de M5StickC-libraries. Voor meer informatie kun je de vorige blog “De M5StickC programmeren met de Arduino IDE” raadplegen.

Als laatste heb je nog de ArduinoJson-library nodig. Die kun je installeren met de library manager in de Arduino IDE.

M5Stack M5Stick-C ESP32 Mini-Ontwikkelboard
Getest en aanbevolen door OneGuyOneBlog.com:

M5Stack M5Stick-C ESP32 Mini-Ontwikkelboard
VNGsystems.nl
Coronavirus COVID-19 Global Cases
Coronavirus COVID-19 Global Cases

Coronavirus dataset

Vervolgens hebben we natuurlijk de gegevens nodig. Die zijn bijvoorbeeld te vinden op de website Coronavirus Disease (COVID-19) GIS Hub. Die website voorziet ook in een REST-API, waar je de data in JSON-formaat kunt opvragen. Door middel van de API-Explorer op die website kun je gemakkelijk de juiste query-URL samenstellen.

COVID-19 CORONA Tracker: ESP32 & Arduino IDE - REST API Query-URL
COVID-19 CORONA Tracker: ESP32 & Arduino IDE – REST API Query-URL

In dit geval kies je voor de volgende instellingen:

  • Bij “Waar” kies je “Country_Region” en dan vul je bijv. “Netherlands” in.
  • Daaronder bij “Uit velden” vink je “Last_Update”,”Confirmed”, “Deaths”, “Recovered” aan en de rest uit.
  • Bij “Uitvoeropties” zet je “Geometrie opvragen” op “False”, en de rest ook.

Rechtsboven zie je nu de gegenereerde query-URL:

https://services1.arcgis.com/0MSEUqKaxRlEPj5g/arcgis/rest/services/Coronavirus_2019_nCoV_Cases/FeatureServer/1/query?where=Country_Region%20like%20'%25NETHERLANDS%25'&outFields=Last_Update,Confirmed,Deaths,Recovered&returnGeometry=false&outSR=4326&f=json

Klik op “Nu proberen” of plak de URL in een nieuw browser-window, de uitvoer van die query ziet er dan als volgt uit:

{
   "objectIdFieldName": "OBJECTID",
   "uniqueIdField": {
      "name": "OBJECTID",
      "isSystemMaintained": true
   },
   "globalIdFieldName": "",
   "geometryType": "esriGeometryPoint",
   "spatialReference": {
      "wkid": 4326,
      "latestWkid": 4326
   },
   "fields": [
      {
         "name": "Last_Update",
         "type": "esriFieldTypeDate",
         "alias": "Last Update",
         "sqlType": "sqlTypeOther",
         "length": 8,
         "domain": null,
         "defaultValue": null
      },
      {
         "name": "Confirmed",
         "type": "esriFieldTypeInteger",
         "alias": "Confirmed",
         "sqlType": "sqlTypeOther",
         "domain": null,
         "defaultValue": null
      },
      {
         "name": "Deaths",
         "type": "esriFieldTypeInteger",
         "alias": "Deaths",
         "sqlType": "sqlTypeOther",
         "domain": null,
         "defaultValue": null
      },
      {
         "name": "Recovered",
         "type": "esriFieldTypeInteger",
         "alias": "Recovered",
         "sqlType": "sqlTypeOther",
         "domain": null,
         "defaultValue": null
      }
   ],
   "features": [
      {
         "attributes": {
            "Last_Update": 1583777591000,
            "Confirmed": 321,
            "Deaths": 3,
            "Recovered": 0
         }
      }
   ]
}
COVID-19 CORONA Tracker: ESP32 & Arduino IDE - JSON data
COVID-19 CORONA Tracker: ESP32 & Arduino IDE – JSON data

JSON-data parsen

De code die we nodig hebben om de JSON-data in te lezen kunnen we automatisch laten genereren met de online “ArduinoJson Assistant“. Plak de JSON-data die we hierboven gegenereerd hebben in de ArduinoJson Assistant, en de website genereert de programmacode.

COVID-19 CORONA Tracker: ESP32 & Arduino IDE - ArduinoJson Assistant
COVID-19 CORONA Tracker: ESP32 & Arduino IDE – ArduinoJson Assistant

Van die programmacode nemen we alleen de noodzakelijke regels over, en de regel met “deserializeJson”passen we aan. Zie onderstaande eindresultaat:

    const size_t capacity = JSON_ARRAY_SIZE(1) + JSON_ARRAY_SIZE(4) + JSON_OBJECT_SIZE(1) + 2 * JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(4) + 3 * JSON_OBJECT_SIZE(6) + 2 * JSON_OBJECT_SIZE(7) + 690;
    DynamicJsonDocument doc(capacity);

    deserializeJson(doc, payload);

    JsonArray fields = doc["fields"];

    JsonObject features_0_attributes = doc["features"][0]["attributes"];

    long features_0_attributes_Last_Update = features_0_attributes["Last_Update"];
    int features_0_attributes_Confirmed = features_0_attributes["Confirmed"];
    int features_0_attributes_Deaths = features_0_attributes["Deaths"];
    int features_0_attributes_Recovered = features_0_attributes["Recovered"];

Dit fragment zul je in de schets onderaan deze pagina terug zien.

COVID-19 CORONA Tracker schets

Met deze informatie kun je nu gemakkelijk je eigen Corona-tracker in elkaar knutselen. De schets onderaan dit artikel doet niets anders dan elke 10 minuten nieuwe gegevens ophalen (de rode led zal branden). Op het scherm van de M5StickC zie je dan het aantal besmettingen in het betreffende gebied (in gele cijfers), daaronder het aantal sterfgevallen (rode cijfers) en het aantal herstelden (groene cijfers).

Je moet in de schets nog wel je netwerknaam en wachtwoord invoeren.

De schets is ook beschikbaar op GitHub: https://github.com/oneguyoneblog/COVID-19-Corona-ESP32

COVID-19 CORONA Tracker: slechts een voorbeeld

Zoals meestal op dit blog, is de code slechts een startpunt voor je eigen project. De schets is heel basaal, maar je kunt er zelf iets moois van maken. Heb je iets interessants gemaakt, laat het dan vooral aan weten in de commentaarsectie onder dit artikel!

Als je wilt weten hoe je de gegevens met PHP kunt ophalen lees dan de blog “COVID-19 CORONA Data opvragen met PHP“.

#include <M5StickC.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>

const char* url = "https://services1.arcgis.com/0MSEUqKaxRlEPj5g/arcgis/rest/services/Coronavirus_2019_nCoV_Cases/FeatureServer/1/query?where=Country_Region%20like%20'%25NETHERLANDS%25'&outFields=Last_Update,Confirmed,Deaths,Recovered&returnGeometry=false&outSR=4326&f=json";

const char* ssid = "mijnwifinetwerk";
const char* password = "mijnwifiwachtwoord";

const int redLED = 10;

void setup() {

  pinMode(redLED, OUTPUT);
  Serial.begin(115200);
  delay(2000);

  M5.begin();
  M5.Lcd.setRotation(3);
  M5.Lcd.setTextColor(WHITE);
  M5.Lcd.setTextSize(2);

  digitalWrite(redLED, LOW);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    M5.Lcd.fillScreen(BLACK);
    M5.Lcd.setCursor(0, 10);
    M5.Lcd.printf("Connecting..");
  }

  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.setCursor(0, 10);
  M5.Lcd.printf("Connected");
  digitalWrite(redLED, HIGH);
}

void loop() {

  HTTPClient http;
  String data;

  digitalWrite(redLED, LOW);
  http.begin(url);
  digitalWrite(redLED, HIGH);

  int httpCode = http.GET();

  if (httpCode > 0) { //Check for the returning code

    String payload = http.getString();
    char charBuf[500];
    payload.toCharArray(charBuf, 500);
    
    M5.Lcd.fillScreen(BLACK);
    M5.Lcd.setCursor(0, 10);

    Serial.println(payload);

    const size_t capacity = JSON_ARRAY_SIZE(1) + JSON_ARRAY_SIZE(4) + JSON_OBJECT_SIZE(1) + 2 * JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(4) + 3 * JSON_OBJECT_SIZE(6) + 2 * JSON_OBJECT_SIZE(7) + 690;
    DynamicJsonDocument doc(capacity);

    deserializeJson(doc, payload);

    JsonArray fields = doc["fields"];

    JsonObject features_0_attributes = doc["features"][0]["attributes"];

    long features_0_attributes_Last_Update = features_0_attributes["Last_Update"];
    int features_0_attributes_Confirmed = features_0_attributes["Confirmed"];
    int features_0_attributes_Deaths = features_0_attributes["Deaths"];
    int features_0_attributes_Recovered = features_0_attributes["Recovered"];

    M5.Lcd.setTextSize(4);
    M5.Lcd.setTextColor(ORANGE);
    M5.Lcd.println(features_0_attributes_Confirmed);

    M5.Lcd.setTextSize(3);
    M5.Lcd.setTextColor(RED);
    M5.Lcd.println(features_0_attributes_Deaths);
    
    M5.Lcd.setTextSize(2);
    M5.Lcd.setTextColor(GREEN);
    M5.Lcd.println(features_0_attributes_Recovered);
    
  } else {

    M5.Lcd.fillScreen(BLACK);
    M5.Lcd.setCursor(0, 10);
    M5.Lcd.printf("Error on HTTP request");
  }

  http.end();

  delay(60000);
}

Maak je eigen ESP32 COVID-19-trackerproject

Gebruik de bovenstaande informatie om je eigen geweldige project te maken. Net als Saša Čavlović uit Kroatië, hij gebruikte de ESP-32S samen met een kleuren-LCD:

Heb je zelf iets interessants gemaakt? Laat het ons weten in de comments!

VNG Systems

M5Stack M5Stick-C ESP32 Mini-Ontwikkelboard
Getest en aanbevolen door OneGuyOneBlog.com:

M5Stack M5Stick-C ESP32 Mini-Ontwikkelboard
VNGsystems.nl

Voeg een reactie toe

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *