Hallo zusammen,
würde gerne mit meinem Arduino mega Daten zur Verfügung stellen und diese mit einem Ethernet shield über eine http Anfrage abgreifen. Dafür hab ich mir schon einige Beispiele angesehen. Http request / get /post / http client usw.
Kann mir jemand sagen, welches Beispiel ich da verwenden kann / soll?
Mit diesem get Befehl will ich bei meinem mega Anfragen und mir den Wert holen
/api/?action=get&Wert=10
Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.
Was für eine api willst Du da verwenden?
Wenn Du Daten vom MEGA holen willst, dann muss der MEGA als Webserver arbeiten. Welche Ethernet-Lib willst Du verwenden? (Link bitte).
Hallo,
mit dem verwendeten Beispiel in der Doku stellt der Arduino doch eine Webseite zu Verfügung die Du z.B mit einem Brauser aud dem PC "anfordern" kannst. Der Arduino antwortet darauf mit der Webseite und den darin enthalteten Daten, in dem Fall die Analogwerte.
Nun lass Dir mal nicht jedes Wort einzeln aus der Nase ziehen und beschreibe genauer, worum es geht.
Sollen immer die 3 Werte gemeinsam gesendet werden oder einzeln angefordert? Woher hat der MEGA die Werte? Wie willst Du die dann auf der Client-Seite weiter verarbeiten?
So wie ich das verstehe, muss ich das so machen wie in diesem Beispiel?
Ich mach eine Anfrage an den Arduino mit 192.168.8.100/api/?action=get&Wert=10
Der Arduino sendet dann den HTTP body zurück und fertig.
Ist das richtig so?
Lg
/*
* Created by ArduinoGetStarted.com
*
* This example code is in the public domain
*
* Tutorial page: https://arduinogetstarted.com/tutorials/arduino-http-request
*/
#include <SPI.h>
#include <Ethernet.h>
// replace the MAC address below by the MAC address printed on a sticker on the Arduino Shield 2
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
EthernetClient client;
int HTTP_PORT = 80;
String HTTP_METHOD = "GET";
char HOST_NAME[] = "192.168.8.100";
String PATH_NAME = "/api";
String queryString = "?Wert=10";;
void setup() {
Serial.begin(9600);
// initialize the Ethernet shield using DHCP:
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to obtaining an IP address using DHCP");
while(true);
}
// connect to web server on port 80:
if(client.connect(HOST_NAME, HTTP_PORT)) {
// if connected:
Serial.println("Connected to server");
// make a HTTP request:
// send HTTP header
client.println(HTTP_METHOD + " " + PATH_NAME + " HTTP/1.1");
client.println("Host: " + String(HOST_NAME));
client.println("Connection: close");
client.println(); // end HTTP header
// send HTTP body
client.println(queryString);
while(client.connected()) {
if(client.available()){
// read an incoming byte from the server and print it to serial monitor:
char c = client.read();
Serial.print(c);
}
}
// the server's disconnected, stop the client:
client.stop();
Serial.println();
Serial.println("disconnected");
} else {// if not connected:
Serial.println("connection failed");
}
}
void loop() {
}
Also tut mir leid ich beschreibe es nun mal genauer.
Ich lese mit der seriellen Schnittstelle 3 am Arduino Daten von einer victron energy Batterieanzeige ein. Weiterverarbeiten möchte ich die Daten dann im Comexio I/O Server.
Im ersten Schritt wollte ich einfach einen Wert senden. Später 3 Werte einzeln.
Also der Comexio I/O Server soll sich die Daten vom Arduino holen. Mit diesem Befehl falls das funktioniert:
192.168.8.100/api/?action=get&Wert=10
Nun muss der Arduino diese Anfrage verarbeiten und den richtigen Wert an die Steuerung senden.
Gruß
action=get kann entfallen. Das machst Du mit dem Aufruf
wert=10 sieht eher danach aus, als wölltest Du einen Wert setzen.
Setze Dich mit den Links, die Dir Rentner gegeben hat, auseinander. Nimm erst mal feste Werte und schau, dass Du die am Client (Browser) angezeigt bekommst. Zu Connexio I/O kann ich nichts sagen. Dem musst Du ja auch noch lernen zu programmieren. Das wird ein größeres Projekt.
Gehe schrittweise vor und teile es in Teilaspekte auf.
Moment, ist das jetzt eine weiterführende Geschichte von
???
Dann gehe unter DATEI-Beispielle-Ethernet- Webserver
Das Beispiel ist einfach gestrickt.
Du kannst daraus entwickeln.
Ich nutze das so ähnlich.
Das Beispiel geht immer davon aus das Du aus dem root liest. Das lässt sich auch mit einem Parser verbinden und auf subdirs setzen oder speziell antworten.
Also ein HTTP Server am Arduino der Werte zurückgeben soll.
Müssen das so viele Parameter sein?
Wie soll das Ergebnis aussehen? nur
Wert=5
oder was kann dein "Comexio I/O Server" eigentlich aus dem Body verarbeiten?
Das oben verlinkte POST Beispiel von meiner Seite sollte eigentlich auch GET Parameter verarbeiten können.
so ca ab Zeile 40 im Server Tab werden die Parameter ausgegeben. Da müsstest halt die notwendigen Daten in Variable übernehmen um diese später einer Funktion für die Ausgabe (ein neues "sendPage") übergeben.