ich bräuchte Hilfe bei einen Arduino Sketch.
Ich habe folgenden Sketch erfolgreich installiert.
Jetzt möchte ich aber nicht den Bitcoin Preis auslesen sondern den von Crypto.com
Ich habe mir eine Api ausgesucht und den Sketch versucht anzupassen. Leider ohne Erfolg.
kann mir bitte jemand Helfen?
Das bedeutet, das System will mit Dir per HTTPS und nicht mit HTTP kommkunizieren. Das ist Port 443 und Du brauchst einen Secure Client.
Ich habe dazu mal ein Tutorial erstellt, evtl. hilft es Dir weiter.
Basierend auf dem Link von Thommy habe ich für meinen ESP32 (ESP8266 habe ich nicht) ein Programm für Deine Preisabfrage geschrieben:
// ESP32
#define LED_BUILTIN 13
#include "zugangsdaten.h"
#include <Arduino_JSON.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <WiFiClientSecure.h>
WiFiClientSecure client; // Use WiFiClientSecure class to create TLS connection
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(115200);
delay(500);
Serial.println("\nStart ...");
const char *ssid = STA_SSID;
const char *pass = STA_PASSWORD;
const char *host = "api.kucoin.com";
String url = "/api/v1/market/orderbook/level1?symbol=CRO-USDT";
const uint16_t port = 443;
WiFi.persistent(false);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
digitalWrite(LED_BUILTIN, 1);
delay(250);
digitalWrite(LED_BUILTIN, 0);
delay(250);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Serial.print("Connecting to ");
Serial.println(host);
Serial.println("Mit setInsecure()");
client.setInsecure(); // <--------------------------
if (!client.connect(host, port)) {
Serial.println("Connection failed");
return;
}
HTTPClient http;
//String answer = "{\"code\":\"200000\",\"data\":{\"time\":1664101750686,\"sequence\":\"2780341\",\"price\":\"0.1166\",\"size\":\"2.4467\",\"bestBid\":\"0.1165\",\"bestBidSize\":\"14250.7193\",\"bestAsk\":\"0.1166\",\"bestAskSize\":\"9223.9829\"}}";
String answer;
Serial.print("[HTTPS] begin...\n");
if (http.begin(client, "https://api.kucoin.com/api/v1/market/orderbook/level1?symbol=CRO-USDT")) {
Serial.print("[HTTPS] GET...\n");
// start connection and send HTTP header
int httpCode = http.GET();
// httpCode will be negative on error
if (httpCode > 0) {
// HTTP header has been send and Server response header has been handled
Serial.printf("[HTTPS] GET... code: %d\n", httpCode);
// file found at server
if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
answer = http.getString();
Serial.println(answer);
}
} else {
Serial.printf("[HTTPS] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
} else {
Serial.printf("[HTTPS Unable to connect\n");
}
// Convert to JSON
JSONVar myObject = JSON.parse(answer);
// JSON.typeof(jsonVar) can be used to get the type of the var
if (JSON.typeof(myObject) == "undefined") {
Serial.println("Parsing input failed!");
} else {
Serial.print("myObject[\"price\"] = ");
Serial.println((const char*) myObject["data"]["price"]);
String tmp = (const char*) myObject["data"]["price"];
tmp.replace("\"", "");
float price = tmp.toFloat();
Serial.println();
Serial.print("price: ");
Serial.println(price, 4);
}
}
void loop() {}
Deine Vorlage fand ich nicht so toll, daher bin ich auf die Bibliothek Arduino_JSON (leider BETA) umgestiegen, geht aber sicherlich auch besser als in der Vorlage mit der anderen.
Vielen Dank für eure schnelle Hilfe!
Ich habe jetzt den Sketch soweit fertig. Der aktuelle Preis wird angezeigt.
Leider aktualisiert er sich nicht.
Was muss ich machen das der Preis alle 5 Minuten aktualisiert wird?
grüße Philipp
#if defined(ESP8266)
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#elif defined(ESP32)
#include <WiFi.h>
#include <HTTPClient.h>
#else
#error "Only ESP8266 or ESP32"
#endif
#define LED_BUILTIN 13
#include <Arduino_JSON.h>
#include <WiFiClientSecure.h>
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 5
#define CLK_PIN D5
#define DATA_PIN D7
#define CS_PIN D2
#define BRIGHTNESS 1
// Hardware SPI connection
MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
// Arbitrary output pins
// MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
WiFiClientSecure client; // Use WiFiClientSecure class to create TLS connection
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(115200);
delay(500);
Serial.println("\nStart ...");
const char* ssid = "Philipp";
const char* pass = "0123456789";
const char *host = "api.kucoin.com";
String url = "/api/v1/market/orderbook/level1?symbol=CRO-USDT";
const uint16_t port = 443;
P.begin();
WiFi.persistent(false);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
digitalWrite(LED_BUILTIN, 1);
delay(250);
digitalWrite(LED_BUILTIN, 0);
delay(250);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Serial.print("Connecting to ");
Serial.println(host);
Serial.println("Mit setInsecure()");
client.setInsecure(); // <--------------------------
if (!client.connect(host, port)) {
Serial.println("Connection failed");
return;
}
HTTPClient http;
//String answer = "{\"code\":\"200000\",\"data\":{\"time\":1664101750686,\"sequence\":\"2780341\",\"price\":\"0.1166\",\"size\":\"2.4467\",\"bestBid\":\"0.1165\",\"bestBidSize\":\"14250.7193\",\"bestAsk\":\"0.1166\",\"bestAskSize\":\"9223.9829\"}}";
String answer;
Serial.print("[HTTPS] begin...\n");
if (http.begin(client, "https://api.kucoin.com/api/v1/market/orderbook/level1?symbol=CRO-USDT")) {
Serial.print("[HTTPS] GET...\n");
// start connection and send HTTP header
int httpCode = http.GET();
// httpCode will be negative on error
if (httpCode > 0) {
// HTTP header has been send and Server response header has been handled
Serial.printf("[HTTPS] GET... code: %d\n", httpCode);
// file found at server
if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
answer = http.getString();
Serial.println(answer);
}
} else {
Serial.printf("[HTTPS] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
} else {
Serial.printf("[HTTPS Unable to connect\n");
}
// Convert to JSON
JSONVar myObject = JSON.parse(answer);
// JSON.typeof(jsonVar) can be used to get the type of the var
if (JSON.typeof(myObject) == "undefined") {
Serial.println("Parsing input failed!");
} else {
Serial.print("myObject[\"price\"] = ");
Serial.println((const char*) myObject["data"]["price"]);
String tmp = (const char*) myObject["data"]["price"];
tmp.replace("\"", "");
float price = tmp.toFloat();
Serial.println();
Serial.print("price: ");
Serial.println(price, 3);
P.setIntensity(0 );
P.setTextAlignment(PA_CENTER);
P.print(String(price,4)+"$");
}
// Wait 1 minute
delay(60000);
}
Die Bibliothek ArduinoJson bietet die Möglichkeit, direkt mittels deserializeJson(doc, client); auf client zuzugreifen, also ohne Umweg über einen Text. Als Vorlage dient das Beispiel JsonHttpClient.ino der Bibliothek.
Vergebe ein paar Herzchen für die Helfer. Die haben sich echt ins Zeug gelegt.
Und dann markier den, der Dich zur Lösung geführt hat als Lösung. Hat die Nachwelt auch noch was von und wird in der Suchfunktion mitverwendet...
Glückwunsch und Danke fürs zeigen des fertigen Produkts.
Dank der Hilfe von @agmue konnten einige Beispiele meines Tutorials HTTPS mit ESP8266 auch für ESP32 getestet werden und können damit genutzt werden.
Leider können (bisher) nicht alle Varianten auch mit ESP32 genutzt werden, da ESPRESSIF beim ESP32 teilweise andere Wege geht.