ich möchte die Vorschläge von noiasca nur erweitern und dir zeigen, wie einfach es mit UDP funktionieren kann.
Hier ein Beispiel von Sender und Empfänger, damit du siehst, wie einfach es geht.
Entscheidung liegt bei dir.
// send UDP data
// deine Definitionen erweitern
#include <WiFiUdp.h>
WiFiUDP Udp;
//Im setup erweitern
void setup()
{
Udp.begin(8888);
sendUdp();
}
// Sendefunktion
void sendUdp() // UDP-Sendefunktion die auch aus der Loop aufgerufen werden kann
{
// die IP des Empfängers + UDP-Port
Udp.beginPacket("192.168.100.1, 8888); // IP-Adresse des Empfängers und UDP-Port
Udp.printf("%s\n", "deine Info"); // deine gewünschte Information
Udp.endPacket();
}
// Ende send UDP
// ---------------------------------------------------------------------------------------------------, damit du siehst, wie einfach es geht
// receive UDP data
// deine Definitionen erweitern
#include <WiFiUdp.h>
WiFiUDP Udp;
//Im setup erweitern
void setup()
{
Udp.begin(8888);
}
// in der loop erweitern
void loop()
{
receiveUDP();
}
// Empfangsfunktion
void receiveUDP()
{
uint16_t packetSize = Udp.parsePacket(); // Eingehende UDP-Pakete empfangen.
if (packetSize) // Prüfen ob UDP-Pakete empfangen wurden.
{
// read the packet into packetBufffer
Udp.read(packetBuffer, sizeof(packetBuffer)); // Einlesen des UDP Paket in den Bufffer.
packetBuffer[packetSize] = 0; // String Ende hinzufügen.
DEBUG_P("Buffer: ");
DEBUG_L(packetBuffer); // Visualisierung des empfangenen Packets.
}
}
// Ende receive UDP
Meine letzten Bestellungen gingen immer an Aliexpress.
Und da habe ich bisher nur gute Erfahrungen machen können.
Wenns schnell gehen soll, dann Reichelt.
Heißt das am ESP1 ESP_Mikrofon_Musik_Ueberwachung soll auf der Webseite ein Button sein?
Dieser neue Button soll was genau am ESP2 (ESP32 Lautsprecherumschaltung) anstoßen?
Die Ein/ Aus-Taste = GPIO 025
Audio-Umschalter = GPIO 023
mit Zustandsanzeige wären schon Klasse.
Vielleicht verstehe ich dann das Zusammenspiel einigermaßen und kann mich selber etwas weiterbilden
Noch eine Frage zu der WEB-Seite. Die ist ja auf dem ESP32.
Ich übe gerade in einem 60 Min Lernvideo (mit WEBSTORM) an einer HTML-Seite.
Im 2. Teil kommt gerade die Sinnhaftigkeit der CCS dran. Ich bilde mich hier schon ..
Kann man meine(deine) aktuelle Web-Seite vom ESP32 zurück "beamen" um sie z.B. mit WEBSTORM und auch die CCS einfach bearbeiten zu können. Greift dann eigentlich auch die fs.css im Ordner "Data" in meinem Arduino Folder?
Die andere Richtung also erstellte HTML-Seite in Arduino wäre dann die nächste Herausforderung.
"Je mehr ich weiß, desto mehr weiß ich, dass ich nichts weiß" (war nicht von mir...)
mahowe
Hi noiasca,
ich versuche die Fragen zufriedenstellend zu beantworten.
Minimallösung:
Auf der WEB-Oberfläche meines ESP1 (Mikrofon_Musiküberwachung) soll ein EIN/AUS-Button implementiert werden.
Dieser EIN/AUS-Button schaltet am ESP2 (Lautsprecherumschaltung) den Monitor ein (220 V).
Ein weiterer 2. Button auf der ESP1-WEB Oberfläche soll die Lautsprecherumschaltung am ESP2 (Lautsprecherumschaltung) vornehmen. Wenn ich das Gerät schon vorab einschalte, wäre ja gleich die Auswahl der geeigneten Lautsprecher auf der WEB-Oberfläche des ESP1 sinnvoll.
Genial (also Maximallösung) wäre es natürlich, wenn ich die o.g. Buttons zusätzlich als physikalische Taster mit LEDs ins Tableau beim ESP1 vorne einbauen könnte. So hätte ich zusätzlich die Möglichkeit den Monitor und Lautsprecherumschaltung ohne WEB vornehmen zu können.
Ich bin für alles dankbar. Vor allem will ich ja auch lernen..
Doch! Doch!
Aber ich habe den Einsatz dafür bisher nicht verstanden?
Ich habe gesucht und ein englisches Tutorial zum ESP32 mit u.a. Infos zu UDP gefunden wo auch alle anderen Übertragungsarten beschrieben werden und es für mich ins Deutsche übersetzten lassen. Das direkte Ausdrucken des Tutorial war mir aber durch die Werbungen zu nervig, so dass ich es erstmal für mich in ein eigenes Dokument gepackt um wichtige/interessante Dinge dann später in ein eigenes kleines Nachschlagewerk(Brevier) zu speichern. So muss ich nicht immer "googeln"
Auf Seite 50 des beiliegenden PDF-Dokuments ist u.a. UDP beschrieben.
Genau, was anderes soll es auch nicht sein.
Dennoch verstehe ich deine Anmerkungen nicht.
Der Einsatz ist als einfache Alternative zu ESP Now gedacht.
Das von mir gezeigte Beispiel ist doch genau beschrieben, wo du was in deinen Sketch hinkopieren musst, mehr nicht.
Und dann dollte das schon funktionieren.
Aber ok....ist nur ein einfaches Beispiel, was dir zeigen soll, wie einfach das ist und lässt sich auch einfach in bestehende Systeme einbauen. Du darfs auch gern andere Protokolle verwenden.
Ich wäre froh, wenn eines der Protokolle funktionieren würde.
Wenn ich dich richtig verstanden habe, dann könnte ich mit dem Protokoll wie in NOW beschrieben, über einen Taster am ESP1 eine LED am ESP2 steuern. Das war ja meine grundsätzliche Intention.
Vielleicht finde ich ein einfaches/einfachstes Beispiel dazu um die Grundfunktionalität hinzubringen. Darauf aufzubauen/ändern, fällt mir dann schon leichter.
Leider finde ich meist nur komplexe Beispiele die ich nicht zum Laufen bringe (siehe NOW, BLE-iPhone,..)
Ich schau mir nochmal deine Sketche an. Manchmal "dämmerts" ja
Bitte nicht immer mit dem Kopf durch die Wand...fang klein an.
Mit meinem Beispiel wird vom "Sender" an den "Empfänger" ein Text (deine Info) übertragen. Im einfachsten kannst du da Zahlen übertragen und diese dann im Empfänger auswerten und damit deine Led an ESP2 zum leuchten bringen.
Mach erst mal den Text, alles weitere wird dann schon.
// process comands from a remote device // noiasca
void handleRemote() {
Serial.println(F("handleRemote"));
// if the browser has send commands to change pins
String message;
message.reserve(2000);
if (server.hasArg("C")) {
Serial.println(F("C"));
// act according to the commands:
if (server.arg("C") == "0")
digitalWrite(outputPinC, LOW);
if (server.arg("C") == "1")
digitalWrite(outputPinC, HIGH);
if (server.arg("C") == "T") { // toggle
if (digitalRead(outputPinC) == LOW) {
digitalWrite(outputPinC, HIGH);
}
else {
digitalWrite(outputPinC, LOW);
}
}
// read output to get new state for the return message
if (digitalRead(outputPinC) == LOW)
message = F("C=0");
else
message = F("C=1");
}
server.send(200, "text/css", message);
}
und jetzt kannst in deine Webseite am ESP1 z.B. einen HREF setzen
zum Einschalten:
http://{IP2_ESP2}/remote?C=1
zum Ausschalten:
http://{IP2_ESP2}/remote?C=0
zum Umschalten/toggeln
http://{IP2_ESP2}/remote?C=T
oder einen Button und mittels JavaScript auslösen ... wie auch immer.
ESP32_Lautsprecherumschaltung.zip (127.4 KB)
Änderungen im Tab
Main: evtl. die DHT Simulation rückgängig machen
Hardware: neuer Output C (ja jetzt wäre es Zeit für ein Array) und setup ergänzt
Server: im wesentlichen der neue Handle, in den anderen funktionen nur teilweise ergänzt und bleibt dir überlassen das Lokal anzuzeigen.
Man muß verstehen, daß der Text /remote, wenn er an den Server geschickt wird, den Aufruf der Funktion handleRemote() auslöst. Das wird im setup() einmal festgelegt:
server.on("/remote", handleRemote);
Wenn man es als Anleitung liest, ist es "unverständlich", als Programmbeispiel kann man es nachvollziehen
Da muss ich @agmue Recht geben. Um das zu verstehen, muss man schon ganz schön tief einsteigen können und nicht mehr in der "Anfängerstufe" stehen.
Und da sehe ich noch leichte Problem beim TO.
Selbst ich muss mir das mehrfach durchlesen um da (etwas) mitzukommen. Daher fällt mir diese Kommunikation per UDP oder TCP deutlich einfacher. Letztendlich kann der TO auch damit das erreichen, was er gerne möchte. Vielleicht nicht so elegant.
Es ist mir jetzt zwar (fast) peinlich. Euch mit solchen Wünschen zu bombardieren, Lösungen zu bekommen und dann fast nichts tief zu begreifen. Es liegt aber nicht an euch.
Wenn eben Basiswissen fehlt, dann fischt man eben meist im "Trüben" (Anglerlatein??)
Werde heute trotzdem versuchen, (wahrscheinlich wieder mit endlosen Sketch-Eingaben das Ganze irgendwie zum Laufen zu bringen.
Na ja, da die Standalone-Lösung (mit eurerUnterstützung) zumindest ohne Probleme seit Wochen läuft, habe ich ja schon ein Erfolgserlebnis.
Ich melde mich, wenn erfolgreich mit welcher Lösung. Ich hoffe ihr hört von mir ...
Ein genereller Erklärungsversuch:
Man soll sich vergegenwärtigt, dass man zum Übertragen von Daten eine Server - Client Kommunikation benötigt. Ob UDP, TCP oder in meinem Fall die Untergruppe HTTP ändert wenig daran. Mit allen Varianten (ja sogar mit ESP now) lässt sich das mehr oder weniger elegant - mehr oder weniger übertragungssicher lösen.
Angelehnt an deinen "Empfänger Sketch" in #21 wäre eine simples HTTP Beispiel lediglich:
// im setup
server.on("/con", handleCon); // an Endpoint to switch on output C
// global der Callback
void handleCon() {
Serial.println(F("C on"));
digitalWrite(outputPinC, HIGH);
server.send(200, "text/css", "C=1");
}
und jetzt kann man am ESP1 ein http://{IP_ESP2}/con auslösen und somit einen Port einschalten (das pinMode setzen halt nicht vergessen).
Der Code geht noch kürzer aber so soll es für jemanden der bereits einen HTTP Server auf einem ESP betreibt nachvollziehbar sein.
Warum ich hier kein UDP anwenden würde:
Aus den Posts von @mahowe lese ich u.a. raus, dass er einen Schaltbefehl vom ESP1 zum ESP2 senden will. Imho soll der Schaltbefehl am ESP2 ankommen, weswegen mir TCP oder HTTP geeigneter erscheinen als UDP. Weiters, so wie sich seine Ideen entwickeln kommt dann morgen ein "Der Button am ESP1 soll sich entsprechend des Ausgangs am ESP2 auch ändern". Also wird ein "Rückkanal" benötigt - bei TCP oder HTTP gibts das bereits in der Response des Servers. Und wie machst du das mit UDP: klar, einen UDP Server am ESP1 aufsetzen, damit ESP2 etwas an ESP1 senden kann. Und das alles parallel zum HTTP Server den es schon auf beiden ESPs gibt. Und dann ist nichts mehr mit "UDP ist einfacher, kürzer, anfängerfreundlicher, ...".