Hello.
I am new to ESP32...
What is the right way to create a "live" connection to my server, so the board can receive (and send) live commands, e.g when I press a button in my web server web interface the ESP would trigger the relay.
Sending part (from esp to server) can be easy and would be reliable to trigger a http GET command like example.com/esp.php?cmd=foo
And for simplicity, I can do this part that way^.
But what is the best practice and method for receiving commands ? An "ugly" way would be create a web server on ESP32 and deal with port forwarding and other unreliable things. Or to make the ESP constantly ask for new commands from server using http GET (not great).
I know there is a "sockets" method, but I am confused because of many examples and libraries, and some create "web" sockets, other create "tcp sockets" and I am kind of lost.
Another example I found on youtube involved installing tons of libraries and servers on both ends, not great eider.
What is the simplest and reliable way (sample code or library) to do the ESP32 receiving part ?
Thank you.
The right / easy way for live two way commands
The right / easy way for live two way commands
Last edited by esp32noob on Wed Jul 29, 2020 2:53 pm, edited 1 time in total.
-
- Posts: 9739
- Joined: Thu Nov 26, 2015 4:08 am
Re: The right / easy way for live two way commands
No such thing as 'the' right way to do something like this, but can I suggest looking into mqtt? Especially if your server is under your own control, this may be the way to go.
Re: The right / easy way for live two way commands
I cam across mqtt a few more times, so I will give that a try too, if anyone has more thoughts, please share.
I was able to create sockets with PHP too and from esp32 send data with:
This code seems simple enough, but not sure how to inject new text/commands while the established connection remains active.
I was able to create sockets with PHP too and from esp32 send data with:
Code: Select all
#include <WiFi.h>
[...]
client.connect(ip, port);
client.print("Hello from ESP32!\n\r");
-
- Posts: 9739
- Joined: Thu Nov 26, 2015 4:08 am
Re: The right / easy way for live two way commands
Assuming you're using PHP for a webpage, that is more-or-less impossible... your PHP program ends as soon as the webpage has finished loading, and the socket closes when your PHP program ends. You need some other more persistent server (e.g. an MQTT server) your ESP can connect to if you want persistent connections. (Well, technically there are ways for a php webpage to stay active for a longer time, but I'd say all of those are hacks that will end up with a lot of side effects. You really want something more persistent here.)
Re: The right / easy way for live two way commands
I actually made some progress and am able to send data both ways with raw socket between ESP32 and a PHP script.
If it ends up well, I will post all the details.
I looked at MQTT for a while, but this also seems to involve too many software components.
The way I did it now and my objective is for ESP32 to connect to my site trough wifi and connect to the socket opened at the server end, then data can be sent both ways, so no socket server on the ESP32's end.
My only problem now is that socket is opened inside the Arduino loop() and it cannot run other code while communicating with the server.
How can I put this outside of the loop in order to also loop other code ? (e.g to also update value of a temperature sensor).
If it ends up well, I will post all the details.
I looked at MQTT for a while, but this also seems to involve too many software components.
The way I did it now and my objective is for ESP32 to connect to my site trough wifi and connect to the socket opened at the server end, then data can be sent both ways, so no socket server on the ESP32's end.
My only problem now is that socket is opened inside the Arduino loop() and it cannot run other code while communicating with the server.
How can I put this outside of the loop in order to also loop other code ? (e.g to also update value of a temperature sensor).
Code: Select all
void loop(){
WiFiClient client;
if (!client.connect(host, port)) {
Serial.println("Connection to host failed");
delay(1000);
return;
}
Serial.println("Connected to server successful!");
client.print("Hello from ESP32 ");
client.print(random(100,999));
client.print("\0");
Serial.println("Disconnecting...");
client.stop();
delay(250);
}
Who is online
Users browsing this forum: Bing [Bot] and 128 guests