Rewrite client-with-wifi.ino

This commit is contained in:
hsaturn
2021-04-11 23:26:49 +02:00
parent 28b0ac1611
commit 122ab88960

View File

@@ -1,22 +1,31 @@
#include <TinyMqtt.h> // https://github.com/hsaturn/TinyMqtt #include <TinyMqtt.h> // https://github.com/hsaturn/TinyMqtt
/** /**
* Local broker that accept connections and two local clients *
* +-----------------------------+
* | ESP |
* | +--------+ | 1883 <--- External client/s
* | +-------->| broker | | 1883 <--- External client/s
* | | +--------+ |
* | | ^ |
* | | | |
* | v v |
* | +----------+ +----------+ |
* | | internal | | internal | |
* | | client | | client | |
* | +----------+ +----------+ |
* | |
* +-----------------------------+
* *
* pros - Reduces internal latency (when publish is received by the same ESP) * pros - Reduces internal latency (when publish is received by the same ESP)
* - Reduces wifi traffic * - Reduces wifi traffic
* - No need to have an external broker * - No need to have an external broker
* - can still report to a 'main' broker (TODO see documentation that have to be written) * - can still report to a 'main' broker (TODO see documentation that have to be written)
* - accepts external clients * - accepts external clients
* *
* cons - Takes more memory * cons - Takes more memory
* - a bit hard to understand * - a bit hard to understand
*
* This sounds crazy: a mqtt mqtt that do not need a broker !
* The use case arise when one ESP wants to publish topics and subscribe to them at the same time.
* Without broker, the ESP won't react to its own topics.
* *
* TinyMqtt mqtt allows this use case to work.
*/ */
#include <my_credentials.h> #include <my_credentials.h>
@@ -37,8 +46,8 @@ void onPublishB(const MqttClient* source, const Topic& topic, const char* payloa
void setup() void setup()
{ {
Serial.begin(115200); Serial.begin(115200);
delay(500); delay(500);
Serial << "Clients with wifi " << endl; Serial << "Clients with wifi " << endl;
WiFi.mode(WIFI_STA); WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password); WiFi.begin(ssid, password);
@@ -47,7 +56,7 @@ void setup()
Serial << "Connected to " << ssid << "IP address: " << WiFi.localIP() << endl; Serial << "Connected to " << ssid << "IP address: " << WiFi.localIP() << endl;
broker.begin(); broker.begin();
mqtt_a.setCallback(onPublishA); mqtt_a.setCallback(onPublishA);
mqtt_a.subscribe(topic); mqtt_a.subscribe(topic);
@@ -58,30 +67,30 @@ void setup()
void loop() void loop()
{ {
broker.loop(); broker.loop(); // Don't forget to add loop for every broker and clients
mqtt_a.loop(); mqtt_a.loop();
mqtt_b.loop(); mqtt_b.loop();
// ============= client A publish ================ // ============= client A publish ================
static const int intervalA = 5000; // publishes every 5s static const int intervalA = 5000; // publishes every 5s
static uint32_t timerA = millis() + intervalA; static uint32_t timerA = millis() + intervalA;
if (millis() > timerA) if (millis() > timerA)
{ {
Serial << "A is publishing " << topic.c_str() << endl; Serial << "A is publishing " << topic.c_str() << endl;
timerA += intervalA; timerA += intervalA;
mqtt_a.publish(topic); mqtt_a.publish(topic);
} }
// ============= client B publish ================ // ============= client B publish ================
static const int intervalB = 7000; // will send topic each 7s static const int intervalB = 7000; // will send topic each 7s
static uint32_t timerB = millis() + intervalB; static uint32_t timerB = millis() + intervalB;
if (millis() > timerB) if (millis() > timerB)
{ {
Serial << "B is publishing " << topic.c_str() << endl; Serial << "B is publishing " << topic.c_str() << endl;
timerB += intervalB; timerB += intervalB;
mqtt_b.publish(topic, std::string(String(15+millis()%10).c_str())); mqtt_b.publish(topic, std::string(String(15+millis()%10).c_str()));
} }
} }