01-11-2015, 22:50
Napisałem prosty kod, który odczytuje ciśnienie i temperaturę z BMP180 i publikuje na serwerze MQTT ale mam problem - w przypadku odłączenia lan'u arduino nie potrafi wznowić połączenia z serwerem MQTT. Czy jest jakaś funkcja typu auto reconnect?
Kod:
#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>
float Tc=0;
float Pa=0;
#define MQTT_SERVER "192.168.1.1"
char TcString[6];
char PaString[6];
unsigned long time;
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x23, 0x38 };
IPAddress ip(192, 168, 1, 2);
Adafruit_BMP085 bmp;
char message_buff[100];
EthernetClient ethClient;
PubSubClient client( MQTT_SERVER, 1883, callback, ethClient);
void setup() {
byte i;
Serial.begin(9600);
delay( 500 );
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1) {}
}
while (!Serial) {;
}
Ethernet.begin(mac, ip);
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
if (client.connect("arduinoClient")) { // connecting to MQTT server
Serial.println("Connected to MQTT"); // Milestone for connection debugging
}
}
void callback(char* topic, byte* payload, unsigned int length) {
int i = 0;
for(i=0; i<length; i++) {
message_buff[i] = payload[i];
}
message_buff[i] = '\0';
String msgString = String(message_buff);
}
}
void loop() {
client.loop();
if (millis() > (time + 15000)) {
time = millis();
Serial.print("Temperature = ");
Tc=bmp.readTemperature();
dtostrf(Tc, 2, 2, TcString);
Serial.print(Tc);
Serial.println(" *C");
client.publish("/test/dom/temp1/",TcString);
Serial.print("Pressure = ");
Pa=bmp.readPressure()/100;
if(Pa<1000) {
dtostrf(Pa, 2, 2, PaString);
} else {
dtostrf(Pa, 1, 2, PaString);
}
Serial.print(Pa);
Serial.println(" hPa");
client.publish("/test/dom/cisnienie/",PaString);
Serial.println();
delay(1000);
}
}