/* Get the price of bitcoin from the Kraken API to an ESP32 platform and webserve it */ #include #include #include #include WebServer server(80); void handleRoot() { server.send(200, "text/plain", "BTC"); } void handleNotFound() { server.send(404, "text/plain", "File Not Found"); } void setup() { Serial.begin(115200); while (!Serial) delay(100); WiFi.begin("ssid", "p4ssw0rd"); Serial.print("Connecting to WiFi... "); while (WiFi.status() != WL_CONNECTED) delay(500); Serial.println("Ok."); Serial.print("IP address: "); Serial.println(WiFi.localIP()); server.on("/", handleRoot); server.onNotFound(handleNotFound); server.begin(); Serial.println("HTTP server started"); } void loop() { /* freely inspired by: - BasicHTTPClient.ino from Espressif ESP32 Dev Module - https://arduinojson.org/v6/example/parser/ */ if (WiFi.status() == WL_CONNECTED) { HTTPClient http; // https://docs.kraken.com/api/docs/rest-api/get-ticker-information http.begin("https://api.kraken.com/0/public/Ticker?pair=XXBTZEUR"); Serial.print("Send request... "); // start connection and send HTTP header int httpCode = http.GET(); // httpCode will be negative on error if (httpCode > 0) { Serial.println(httpCode); // file found at server if (httpCode == HTTP_CODE_OK) { String response = http.getString(); Serial.println(response); // Use arduinojson.org/v6/assistant to compute the capacity. //DynamicJsonDocument doc(2048); JsonDocument doc; DeserializationError error = deserializeJson(doc, response); if (error) { // F -> https://www.locoduino.org/spip.php?article131 [FR] Serial.print(F("deserializeJson() failed: ")); Serial.println(error.f_str()); } else { Serial.print("BTC: "); Serial.println(doc["result"]["XXBTZEUR"]["c"][0].as()); } } } else { Serial.printf("failed, error: %s\n", http.errorToString(httpCode).c_str()); } http.end(); } else { Serial.println("Network unreachable"); } server.handleClient(); delay(5000); }