EnglishThis website is also available in English

ESP8266 Monitor Data COVID-19 Waktu-Nyata

Jika Anda masih harus duduk di rumah karena COVID-19, ada banyak waktu untuk bermain-main. Terakhir kali kami bekerja dengan ESP32, kali ini kami bereksperimen dengan mikrokontroler ESP8266. ESP8266 Monitor Data COVID-19 Waktu-Nyata ini dapat dibandingkan dengan ESP32 COVID-19 CORONA Tracker. Sekali lagi kami menggunakan data dari Coronavirus Disease (COVID-19) GIS Hub dan kami memprogram “sketsa” kecil di Arduino IDE. Pada artikel ini, saya menggunakan ESP-WROOM-02 (dari VNGSystems di Gouda) tetapi tentu saja, Anda dapat menggunakan papan pengembangan ESP8266 lainnya.

Jika Anda ingin tahu cara mengambil data dengan PHP, baca posting blog “COVID-19 CORONA dapatkan data dengan PHP

ESP8266 Monitor Data COVID-19 Waktu-Nyata: OLED
ESP8266 Monitor Data COVID-19 Waktu-Nyata: OLED

Arduino IDE & Arduino core untuk ESP8266

Pertama-tama, Arduino IDE harus diinstal di komputer Anda. Jika Anda belum melakukannya, baca artikel “Arduino IDE: Menginstal di Windows 10“. Jika Anda menggunakan Linux, maka pilih “Arduino IDE: Instal atau tingkatkan di Linux“.

Arduino core untuk chip WiFi ESP8266” juga harus diinstal. Lihat bab “Memasang inti ArPino ESP8266” di blog “ESP8266 NodeMcu dan Arduino IDE di Linux“. Prosedurnya sama untuk Linux dan Windows.

ESP8266 Monitor Data COVID-19 Waktu-Nyata dengan ESP-WROOM-02

Jika Anda juga menggunakan ESP-WROOM-02 untuk proyek ini, baca artikel “WEMOS D1 Esp-Wroom-02 dan Arduino IDE“. Di sini Anda dapat membaca bagaimana Anda dapat menginstal pustaka ThingPulse ESP8266 OLED SSD1306 dan pustaka Brzo I2C untuk tampilan selain di atas.

ESP-Wroom-02 ESP8266+0,96inch OLED+18650 Batterijhouder
Diuji dan direkomendasikan oleh OneGuyOneBlog.com:

ESP-Wroom-02 ESP8266+0,96inch OLED+18650 Batterijhouder

ArduinoJson library

Akhirnya, Anda membutuhkan perpustakaan ArduinoJson. Anda dapat menginstalnya dengan manajer perpustakaan di Arduino IDE.

Coronavirus Disease (COVID-19) GIS Hub API

Maka, tentu saja, kita membutuhkan data. Ini dapat ditemukan, misalnya, di situs web GIS Hub Coronavirus Disease (COVID-19). Menggunakan Explorer API di situs web itu, Anda dapat membuat URL kueri yang benar untuk REST API. Anda dapat membaca bagaimana melakukan ini di blog COVID-19 CORONA Tracker: ESP32 & Arduino IDE.

COVOID-19 REST API Query-URL
COVOID-19 REST API Query-URL

Hasilnya adalah URL seperti ini:

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

Ini akan menghasilkan data JSON berikut:

{
  "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": 1585416253000,
        "Confirmed": 3069,
        "Deaths": 105,
        "Recovered": 16
      }
    }
  ]
}
ESP-Wroom-02 ESP8266+0,96inch OLED+18650 Batterijhouder
Diuji dan direkomendasikan oleh OneGuyOneBlog.com:

ESP-Wroom-02 ESP8266+0,96inch OLED+18650 Batterijhouder

ArduinoJson Assistant code generator

Kami dapat menghasilkan kode yang diperlukan untuk membaca data JSON dengan “ArduinoJson Assistant” online. Rekatkan data JSON yang kami buat di atas ke dalam Asisten, dan situs web akan menghasilkan kode.

ArduinoJson Assistant
ArduinoJson Assistant

Kami mengambil baris yang diperlukan dari kode itu, dan menyesuaikan garis dengan “deserializeJson”, seperti yang ditunjukkan di bawah ini:

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"];

Kode ini telah dimasukkan dalam sketsa di bawah ini.

ESP8266 Monitor Data COVID-19 Waktu-Nyata: Certificate fingerprint

Akhirnya, kita memerlukan sidik jari sertifikat situs web untuk dapat membuat koneksi https dengan ESP8288. Untuk peramban Google Chrome di Windows 10, Anda dapat menemukannya sebagai berikut. Pertama, klik pada kunci di sebelah URL. Kemudian pilih “Sertifikat” di menu dropdown.

ESP8266 Monitor Data COVID-19 Waktu-Nyata: certificate fingerprint
ESP8266 Monitor Data COVID-19 Waktu-Nyata: certificate fingerprint

Kemudian di jendela berikutnya, klik pada tab “Detail” dan gulir ke bawah ke “Fingerprint”. Pada kotak di bawah ini Anda sekarang akan melihat sidik jari yang dapat Anda tempel-tempelkan ke sketsa.

ESP8266 Real time COVID 19 data monitor: get certificate fingerprint
ESP8266 Real-time COVID 19 data monitor: get certificate fingerprint

Dalam sketsa itu terlihat seperti ini:

const char fingerprint[] PROGMEM = "70580e780c9d727550619d3e4efdb21d64d1e91e"; //SHA1 finger print

Anda akan menemukan aturan ini dalam sketsa di bawah ini.

ESP8266 Monitor Data COVID-19 Waktu-Nyata Sketsa

Semua hal di atas akhirnya digabungkan dalam sketsa di bawah ini. Seperti biasa di blog ini, ini hanyalah sebuah contoh. Gunakan di proyek Anda sendiri dan buat sesuatu yang menarik!

Anda juga dapat mengunduh kode ini dari GitHub: https://github.com/oneguyoneblog/COVID-19-Corona-ESP8266

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <ESP8266HTTPClient.h>
#include "SSD1306Brzo.h"
#include <ArduinoJson.h>

SSD1306Brzo display(0x3c, 5, 4);   // Initialize OLED display

const char* ssid = "yournetworkname";
const char* password = "yournetworkpassword";

const char* host = "services1.arcgis.com";
String request = "/0MSEUqKaxRlEPj5g/arcgis/rest/services/Coronavirus_2019_nCoV_Cases/FeatureServer/1/query?where=Country_Region%20like%20'%25SWEDEN%25'&outFields=Last_Update,Confirmed,Deaths,Recovered&returnGeometry=false&outSR=4326&f=json";
const int httpsPort = 443;
const char fingerprint[] PROGMEM = "70580e780c9d727550619d3e4efdb21d64d1e91e"; //SHA1 finger print

void setup() {

  Serial.begin(115200);
  Serial.print("Connecting");

  delay(1000);
  WiFi.mode(WIFI_OFF);        //Prevents reconnection issue
  delay(1000);
  WiFi.mode(WIFI_STA);        //Station mode
  WiFi.begin(ssid, password);     //Connect to WiFi

  display.init();   // Initialise the display
  display.setTextAlignment(TEXT_ALIGN_LEFT);
  display.setFont(ArialMT_Plain_16);
  display.drawString(0, 0, "Connecting");
  display.display();    // Write the buffer to the display

  while (WiFi.status() != WL_CONNECTED) {  // Wait for connection
    delay(500);
    Serial.print(".");
  }

  Serial.println("");  //If connection successful show IP address of ESP8266 in serial monitor
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  WiFiClientSecure httpsClient;    //Declare object of class WiFiClient

  Serial.println(host);
  Serial.printf("Using fingerprint '%s'\n", fingerprint);

  httpsClient.setFingerprint(fingerprint);
  httpsClient.setTimeout(15000); // 15 Seconds
  delay(1000);

  Serial.println("HTTPS Connecting");

  int r = 0; //retry counter
  while ((!httpsClient.connect(host, httpsPort)) && (r < 30)) {
    delay(100);
    Serial.print(".");
    r++;
  }
  
  if (r == 30) {
    Serial.println("Connection failed");
  }
  else {
    Serial.println("Connected");
  }

  Serial.print("Requesting: ");
  Serial.println(host + request);

  httpsClient.print(String("GET ") + request + " HTTP/1.1\r\n" +
                    "Host: " + host + "\r\n" +
                    "Connection: close\r\n\r\n");

  Serial.println("Request sent");

  while (httpsClient.connected()) {
    String line = httpsClient.readStringUntil('\n');
    if (line == "\r") {
      Serial.println("Headers received");
      break;
    }
  }

  Serial.println("Payload received:");

  String payload;
  while (httpsClient.available()) {
    payload = httpsClient.readStringUntil('\n');  //Read Line by Line
    Serial.println(payload); //Print response
  }

  Serial.println("Closing connection");

  char charBuf[500];
  payload.toCharArray(charBuf, 500);

  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"];

  String Confirmed = features_0_attributes["Confirmed"];
  String Deaths = features_0_attributes["Deaths"];
  String Recovered = features_0_attributes["Recovered"];
  long Last_Update = features_0_attributes["Last_Update"]; // not used yet

  display.clear();      // Clear OLED display
  display.setTextAlignment(TEXT_ALIGN_LEFT);
  display.setFont(ArialMT_Plain_16);

  display.drawString(0, 0, "Conf: " + Confirmed);
  display.drawString(0, 24, "Dead: " + Deaths);
  display.drawString(0, 48, "Recv: " + Recovered);

  display.display();    // Write the buffer to the display

  delay(60000);
}

VNG Systems

ESP-Wroom-02 ESP8266+0,96inch OLED+18650 Batterijhouder
Diuji dan direkomendasikan oleh OneGuyOneBlog.com:

ESP-Wroom-02 ESP8266+0,96inch OLED+18650 Batterijhouder

Add a Comment

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *