68 lines
1.4 KiB
Arduino
68 lines
1.4 KiB
Arduino
|
/*
|
||
|
Reconnecting MQTT example - non-blocking
|
||
|
|
||
|
This sketch demonstrates how to keep the client connected
|
||
|
using a non-blocking reconnect function. If the client loses
|
||
|
its connection, it attempts to reconnect every 5 seconds
|
||
|
without blocking the main loop.
|
||
|
|
||
|
*/
|
||
|
|
||
|
#include <SPI.h>
|
||
|
#include <Ethernet.h>
|
||
|
#include <PubSubClient.h>
|
||
|
|
||
|
// Update these with values suitable for your hardware/network.
|
||
|
byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
|
||
|
IPAddress ip(172, 16, 0, 100);
|
||
|
IPAddress server(172, 16, 0, 2);
|
||
|
|
||
|
void callback(char* topic, byte* payload, unsigned int length) {
|
||
|
// handle message arrived
|
||
|
}
|
||
|
|
||
|
EthernetClient ethClient;
|
||
|
PubSubClient client(ethClient);
|
||
|
|
||
|
long lastReconnectAttempt = 0;
|
||
|
|
||
|
boolean reconnect() {
|
||
|
if (client.connect("arduinoClient")) {
|
||
|
// Once connected, publish an announcement...
|
||
|
client.publish("outTopic","hello world");
|
||
|
// ... and resubscribe
|
||
|
client.subscribe("inTopic");
|
||
|
}
|
||
|
return client.connected();
|
||
|
}
|
||
|
|
||
|
void setup()
|
||
|
{
|
||
|
client.setServer(server, 1883);
|
||
|
client.setCallback(callback);
|
||
|
|
||
|
Ethernet.begin(mac, ip);
|
||
|
delay(1500);
|
||
|
lastReconnectAttempt = 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
void loop()
|
||
|
{
|
||
|
if (!client.connected()) {
|
||
|
long now = millis();
|
||
|
if (now - lastReconnectAttempt > 5000) {
|
||
|
lastReconnectAttempt = now;
|
||
|
// Attempt to reconnect
|
||
|
if (reconnect()) {
|
||
|
lastReconnectAttempt = 0;
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
// Client connected
|
||
|
|
||
|
client.loop();
|
||
|
}
|
||
|
|
||
|
}
|