Chciałbym zrobić sobie wyświetlacz temperatury pobierający dane z linku bezpośredniego z Supla Cloud i wyświetlającego na module 4-cyfrowym LED. Dokładnie jest to temperatura wody w bojlerze.
Podzespoły:
- NodeMCU v3,
- 4-digit LCD na TM1637.
Nie wiem jak poprawnie pobierać dane z serwera i jak je wyświetlić chociażby na monitorze portu szeregowego. Kod próbowałem stworzyć za pomocą ChatGPT, ale podczas kompilacji zawsze są jakieś błędy. Myślę, że ktoś już ma taki bezprzewodowy wyswietlacz temperatury i pomoże. Poniżej kod, który jest błędny:
- const size_t capacity = JSON_OBJECT_SIZE(4);
- StaticJsonDocument<200> doc;
Code: Select all
#define ARDUINOJSON_ENABLE_DEPRECATED 1
#include <ESP8266WiFi.h>
#include <ArduinoJson.h>
#include <TM1637Display.h>
#include <ESP8266HTTPClient.h>
const int CLK = D2;
const int DIO = D3;
const char* ssid = "nazwa_sieci";
const char* password = "password";
const char* host = "svr15.supla.org";
const String url = "/direct/xxxx/xxxxxxxx/read";
TM1637Display display(CLK, DIO);
void setup() {
display.setBrightness(0x0a);
Serial.begin(115200);
delay(10);
WiFi.begin(ssid, password);
Serial.print("Connecting to ");
Serial.println(ssid);
int i = 0;
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(++i);
Serial.print(' ');
}
Serial.println('\n');
Serial.println("Connection established!");
Serial.print("IP address:\t");
Serial.println(WiFi.localIP());
}
void loop() {
if (WiFi.status() == WL_CONNECTED) {
WiFiClient client;
HTTPClient http;
http.begin(client, host, 443, url);
int httpResponseCode = http.GET();
if (httpResponseCode > 0) {
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
String payload = http.getString();
Serial.println("Received payload: " + payload);
// Parse JSON payload
const size_t capacity = JSON_OBJECT_SIZE(1) + 30; // Adjust capacity according to your JSON structure
StaticJsonDocument<200> doc;
deserializeJson(doc, payload);
// Extract temperature value from JSON
float temperature = doc["temperature"];
// Display temperature on the TM1637 display
display.showNumberDec(temperature * 10, false); // Assuming temperature is in degrees Celsius
} else {
Serial.print("Error code: ");
Serial.println(httpResponseCode);
}
http.end();
}
delay(10000);
}