Inspiriert von dem Projekt des Covid-Trackers mit dem Arduino Touch TFT-Display, habe ich mir überlegt: es müsste doch auch möglich sein, dies mit dem kleineren 1,7″ TFT-Display zu lösen.
Und es geht. Hat nur eine Weile gedauert, bis die Bibliotheken gepasst haben.

Die Verkabelung des Displays und die notwendigen Anpassungen am Code sind hier dokumentiert:
Danke an:
https://github.com/HWHardsoft/COVID19-Tracker-ESP32
https://programmer.ink/think/color-setting-and-text-display-esp32-learning-tour-arduino-version.html
Und hier deer Code:
/*
* Application note: Covid 19 tracker for AZ-Touch and ESP32 DEV KIT 3
* Version 1.1
* Copyright (C) 2020 Hartmut Wendt www.zihatec.de
*
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* angepasst für 1,7" TFT Display
* 2020/09/01
*
*/
/*______Import Libraries_______*/
#include <Arduino.h>
#include <SPI.h>
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <ArduinoHttpClient.h>
#include <TFT_eSPI.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
//
/*______End of Libraries_______*/
/*______End of Definitions _______*/
/*____Wifi _____________________*/
///////please enter your sensitive data in the Secret tab/arduino_secrets.h
#define WIFI_SSID "ssid" // Enter your SSID here
#define WIFI_PASS "password" // Enter your WiFi password here
// Number of milliseconds to wait without receiving any data before we give up
const int kNetworkTimeout = 30*1000;
// Number of milliseconds to wait if no data is available before trying again
const int kNetworkDelay = 2000;
/*______End of Wifi______*/
int status = WL_IDLE_STATUS;
int infected=0;
int recovered=0;
int deaths=0;
WiFiClientSecure client;
HttpClient http(client,"www.worldometers.info", 443);
TFT_eSPI tft = TFT_eSPI(); // Pins defined in User_Setup.h
void setup() {
//Initialize serial and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
// initialize the TFT
Serial.println("Init TFT ...");
tft.begin();
// tft.setRotation(2); // portrait mode
tft.fillScreen(TFT_BLACK);// clear screen
tft.setTextColor(TFT_WHITE);
tft.setTextSize(1);
tft.setCursor(10,10);
tft.print("COVID-19-Tacker");
tft.setCursor(10,25);
tft.print("Data live from:");
tft.setCursor(10,40);
tft.print("worldometer.info");
tft.setCursor(10,55);
tft.print("Connecting...");
// Set WiFi to station mode and disconnect from an AP if it was Previously
// connected
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
// Attempt to connect to Wifi network:
Serial.print("Connecting Wifi: ");
Serial.println(WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
IPAddress ip = WiFi.localIP();
Serial.println(ip);
}
void loop() {
check_country("Germany");
delay(3000);
check_country("Italy");
delay(3000);
check_country("France");
delay(3000);
check_country("UK");
delay(3000);
check_country("Spain");
delay(3000);
check_country("Russia");
delay(3000);
check_country("US");
delay(3000);
check_country("Brazil");
delay(3000);
check_country("India");
delay(3000);
}
void draw_country_screen(String sCountry){
tft.fillScreen(TFT_BLACK);// clear screen
// headline
tft.setCursor(5,5);
tft.setTextColor(TFT_WHITE);
tft.setTextSize(2);
tft.print(sCountry + ":");
tft.setTextSize(1);
// infected
#define TFT_mycolor 0x061F
tft.setCursor(10,30);
tft.setTextColor(TFT_mycolor);
tft.print("Infected:");
tft.setCursor(30,45);
tft.setTextSize(2);
tft.print(infected);
tft.setTextSize(1);
// recovered
tft.setCursor(10,75);
tft.setTextColor(TFT_GREEN);
tft.print("Recovered:");
tft.setCursor(30,90);
tft.setTextSize(2);
tft.print(recovered);
tft.setTextSize(1);
// deaths
tft.setCursor(10,120);
tft.setTextColor(TFT_LIGHTGREY);
tft.print("Deaths:");
tft.setCursor(30,135);
tft.setTextSize(2);
tft.print(deaths);
tft.setTextSize(1);
}
void check_country(String sCountry) {
int err =0;
int readcounter = 0;
int read_value_step = 0;
String s1 = "";
String s2 = "";
err = http.get("/coronavirus/country/" + sCountry +"/");
if (err == 0)
{
Serial.println("startedRequest ok");
err = http.responseStatusCode();
if (err >= 0)
{
Serial.print("Got status code: ");
Serial.println(err);
// Usually you'd check that the response code is 200 or a
// similar "success" code (200-299) before carrying on,
// but we'll print out whatever response we get
// If you are interesting in the response headers, you
// can read them here:
//while(http.headerAvailable())
//{
// String headerName = http.readHeaderName();
// String headerValue = http.readHeaderValue();
//}
Serial.print("Request data for ");
Serial.println(sCountry);
// Now we've got to the body, so we can print it out
unsigned long timeoutStart = millis();
char c;
// Whilst we haven't timed out & haven't reached the end of the body
while ( (http.connected() || http.available()) &&
(!http.endOfBodyReached()) &&
((millis() - timeoutStart) < kNetworkTimeout) )
{
if (http.available())
{
c = http.read();
s2 = s2 + c;
if (readcounter < 300) {
readcounter++;
} else {
readcounter = 0;
String tempString = "";
tempString.concat(s1);
tempString.concat(s2);
// check infected first
if (read_value_step == 0) {
int place = tempString.indexOf("Coronavirus Cases:");
if ((place != -1) && (place < 350)) {
read_value_step = 1;
s2 = tempString.substring(place + 15);
tempString = s2.substring(s2.indexOf("#aaa") + 6);
s1 = tempString.substring(0, (tempString.indexOf("</")));
s1.remove(s1.indexOf(","),1);
s1.remove(s1.indexOf(","),1); // for large 7 digit numbers
Serial.print("Coronavirus Cases: ");
Serial.println(s1);
infected = s1.toInt();
}
}
// check deaths
if (read_value_step == 1) {
int place = tempString.indexOf("Deaths:");
if ((place != -1) && (place < 350)) {
read_value_step = 2;
s2 = tempString.substring(place + 15);
tempString = s2.substring(s2.indexOf("<span>") + 6);
s1 = tempString.substring(0, (tempString.indexOf("</")));
s1.remove(s1.indexOf(","),1);
s1.remove(s1.indexOf(","),1); // for large 7 digit numbers
Serial.print("Deaths: ");
Serial.println(s1);
deaths = s1.toInt();
}
}
// check recovered
if (read_value_step == 2) {
int place = tempString.indexOf("Recovered:");
if ((place != -1) && (place < 350)) {
s2 = tempString.substring(place + 15);
tempString = s2.substring(s2.indexOf("<span>") + 6);
s1 = tempString.substring(0, (tempString.indexOf("</")));
s1.remove(s1.indexOf(","),1);
s1.remove(s1.indexOf(","),1); // for large 7 digit numbers
Serial.print("Recovered: ");
Serial.println(s1);
recovered = s1.toInt();
draw_country_screen(sCountry);
http.stop();
return;
}
}
s1 = s2;
s2 = "";
}
// We read something, reset the timeout counter
timeoutStart = millis();
}
else
{
// We haven't got any data, so let's pause to allow some to
// arrive
delay(kNetworkDelay);
}
}
}
else
{
Serial.print("Getting response failed: ");
Serial.println(err);
}
}
else
{
Serial.print("Connect failed: ");
Serial.println(err);
}
http.stop();
}
void printWiFiStatus() {
// print the SSID of the network you're attached to:
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
// print your board's IP address:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
// print the received signal strength:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
}
Covid-Tracker mit ESP32 und TFT-Display