Det går ikke så alt for fort, men nå har jeg i alle fall klart å få til noe for moro skyld.
Jeg fant bare et bitte lite grafikkdisplay (Wemos shield) satt på en Wemos D1 mini klon, men det funker i alle fall. Dette leser /data.json over http.
Det jeg ikke klarer, er å plukke ut de nestede verdiene for "energy accounting" i json.
https://github.com/gskjold/AmsToMqttBridge/wiki/Message-formats
Jeg bruker arduinojson-biblioteket og har prøvd å vri hjernen til å få til filtrering, men no go.
https://arduinojson.org/v6/example/filter/
Hvis det er noen vennlige sjeler som vet mer enn meg, er jeg takknemlig for litt input. Koden som funker ligger ved nederst.
Det er vel ikke gitt at det å lese data med json til displaye er den mest fornuftige måten å gjøre det på, men det kunne vært moro å få til litt mer.
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h> // ver 6.20.0
#include <U8x8lib.h>
/* Constructor */
U8X8_SSD1306_64X48_ER_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);
/* u8x8.begin() is required and will sent the setup/init sequence to the display */
const char* ssid = "SSID";
const char* password = "PASSWORD";
void setup () {
Serial.begin(115200);
u8x8.begin();
u8x8.setFlipMode(0); // 1 or 0
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print("Connecting..");
}
}
void loop() {
if (WiFi.status() == WL_CONNECTED) { //Check WiFi connection status
HTTPClient http; //Declare an object of class HTTPClient
WiFiClient client; // or WiFiClientSecure for HTTPS
// Send request
http.useHTTP10(true);
http.begin(client, "http://192.168.1.40/data.json");
http.GET();
// Parse response
DynamicJsonDocument doc(2048);
deserializeJson(doc, http.getStream());
// Read values
Serial.print(doc["i"].as<float>() / 1000 ,3);
Serial.println (" kW ");
u8x8.setFont(u8x8_font_8x13_1x2_r );
u8x8.setCursor(0, 0);
u8x8.print(doc["i"].as<float>() / 1000 ,3);
u8x8.setCursor(6, 0);
u8x8.print("kW");
Serial.print(doc["u1"].as<float>());
Serial.println (" V (L1-L2) ");
u8x8.setFont(u8x8_font_5x7_r);
u8x8.setCursor(0, 2);
u8x8.print(doc["u1"].as<float>() ,1);
u8x8.setCursor(6, 2);
u8x8.print("V");
Serial.print(doc["i1"].as<float>());
Serial.println (" A (L1) ");
u8x8.setCursor(0, 3);
u8x8.print(doc["i1"].as<float>() ,1);
u8x8.setCursor(6, 3);
u8x8.print("A");
Serial.print(doc["p"].as<float>());
Serial.println (" kr");
u8x8.setCursor(0, 4);
u8x8.print(doc["p"].as<float>() ,2);
u8x8.setCursor(6, 4);
u8x8.print("Kr");
Serial.println ();
Serial.println ();
// Disconnect
http.end();
}
delay(3000); //Send a request every 3 seconds
}