Wemos D1 mini – Corona Tracker

Elektronics at its best

Wemos D1 mini – Corona Tracker

1. April 2020 Allgemein 0

Heute soll es um einen Corona Trakcer mit dem Wemos D1 mini gehen. Dieser zeigt nach der Landeswahl die Corona Fälle, Tote und gesundete an.
Eigentlich eine klasse Sache. Ich habe mich an das Script von Github gehalten aber noch ein paar Änderungen vorgenommen.

Im Github Sketch habe ich erstmal Germany als Land ausgewählt und die Anzeige auf meinem LCD 16×2 etwas geändert. Mir hat es nicht gefallen das alle Punkte auf einem Display direkt angezeigt wurden. In meiner Version bekommt man die Corona Fälle, Toten und Genesenen separat und nacheinander angezeigt. Hier ist der Sketch:

#include <ESP8266HTTPClient.h> 
#include <LiquidCrystal_I2C.h>
#include "json_parser.h"
#include "WifiConnect.h"

#define s2ms(second) (second*1000)
unsigned long long prev_millis(0);

#define country_code "Germany"

LiquidCrystal_I2C lcd(0x27, 16, 2);

int interval = s2ms(60);
unsigned long long PreviousMillis = 0;
unsigned long long CurrentMillis = interval;
bool bFirstKickMillis = false;

extern bool bGotIpFlag;

static String build_url_from_country(String country)
{
  String url = "http://coronavirus-19-api.herokuapp.com/countries/";
  url = url + country;
  return url;
}

void setup(void)
{ 
  lcd.begin();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Covid-19 Watch");
  lcd.setCursor(0, 1);
  lcd.print("Germany");

  #if defined JSON_DEBUG
    Serial.begin(9600);
  #endif
  
  JSON_LOG("Connecting...");
  
  vConnWifiNetworkViaSdk();
}

void loop()
{
  if(bGotIpFlag) bGotIp();
  
  if(bFirstKickMillis) CurrentMillis = millis();
  
  if (!bGotIpFlag && CurrentMillis - PreviousMillis >= interval) 
  {
    if(!bFirstKickMillis) CurrentMillis = 0;
    
    bFirstKickMillis = true;
    
    PreviousMillis = CurrentMillis;
    
    HTTPClient http; 
    http.begin(build_url_from_country(country_code));
    
    int httpCode = http.GET(); 
  
    if(httpCode > 0) 
    {
      String payload = http.getString();
       
      char* JsonArray = (char *)malloc(payload.length() + 1);
      if (!JsonArray) JSON_LOG("upssss fuck");
      
      payload.toCharArray(JsonArray, payload.length() + 1);
      
      JSON_LOG(JsonArray);
      
      if (json_validate(JsonArray))
      {
        int confirmed = (int)get_json_value(JsonArray, "cases", INT);
        int deaths = (int)get_json_value(JsonArray, "deaths", INT);
        int recovered = (int)get_json_value(JsonArray, "recovered", INT);
      
        JSON_LOG(confirmed);
        JSON_LOG(deaths);
        JSON_LOG(recovered);
        
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Bestaetigt");
        lcd.setCursor(0, 1);
        lcd.print(confirmed);
        delay(2000);lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Tote");
        lcd.setCursor(0, 1);
        lcd.print(deaths);
        delay(2000);lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Wieder gesund");  
        lcd.setCursor(0, 1);
        lcd.print(recovered);
        delay(2000);
        
      }
      
      free(JsonArray);
    }
    
    http.end(); 
  }
}

Das <delay> kann auf Wunsch angepasst werden.
Ihr solltet auch darauf achten das in der Datei: WifiConnect.h eure WLAN- Zugangsdaten eingetragen werden.

So sieht die Verdrahtung aus.
Das war es schon.

Bis dahin,
habt Spaß am basteln und vor allem: bleibt gesund 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu. Weitere Informationen

Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen" eingestellt, um das beste Surferlebnis zu ermöglichen. Wenn du diese Website ohne Änderung der Cookie-Einstellungen verwendest oder auf "Akzeptieren" klickst, erklärst du sich damit einverstanden.

Schließen