diff --git a/Readme.md b/Readme.md
index 4b2d6c2..68b6481 100644
--- a/Readme.md
+++ b/Readme.md
@@ -23,3 +23,6 @@ Device can also be put in OTA mode and will wait for OTA from the espota tool.
Provide previous WiFiAccessPointConfigurator features and can also measure temperature from a BMP180.
To interface with BMP180, the following library should be installed into Arduino environment: https://github.com/mmaret/BMP180_Breakout_Arduino_Library/archive/master.zip
+
+To use mqtt, the Adafruit Mqtt library should be installed.
+This have been tested against a mosquitto server without username or password
diff --git a/WifiControlSensor/MQTT.ino b/WifiControlSensor/MQTT.ino
new file mode 100644
index 0000000..40bd6af
--- /dev/null
+++ b/WifiControlSensor/MQTT.ino
@@ -0,0 +1,23 @@
+// Function to connect and reconnect as necessary to the MQTT server.
+// Should be called in the loop function and it will take care if connecting.
+int MQTT_connect() {
+ int8_t ret;
+
+ // Stop if already connected.
+ if (mqtt.connected()) {
+ return 0;
+ }
+
+ uint8_t retries = 3;
+ while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
+ Serial.println(mqtt.connectErrorString(ret));
+ Serial.println("Retrying MQTT connection ...");
+ mqtt.disconnect();
+ delay(100); // wait
+ retries--;
+ if (retries == 0) {
+ return -1;
+ }
+ }
+ return 0;
+}
diff --git a/WifiControlSensor/WebServer.ino b/WifiControlSensor/WebServer.ino
index 9c8fbb2..f6e13bb 100644
--- a/WifiControlSensor/WebServer.ino
+++ b/WifiControlSensor/WebServer.ino
@@ -1,5 +1,6 @@
void handleRoot() {
server.send(200, "text/html", "
You are connected
"
+ "Current temperature "+String(temp,2)+"C
"
"Setup
"
"OTA mode
"
"ON
"
diff --git a/WifiControlSensor/WifiControlSensor.ino b/WifiControlSensor/WifiControlSensor.ino
index b8c83d1..6a440e3 100644
--- a/WifiControlSensor/WifiControlSensor.ino
+++ b/WifiControlSensor/WifiControlSensor.ino
@@ -23,13 +23,21 @@
#include
#include
+#include "Adafruit_MQTT.h"
+#include "Adafruit_MQTT_Client.h"
+
+#define AIO_SERVER "192.168.0.250"
+#define AIO_SERVERPORT 1883 // use 8883 for SSL
+#define AIO_USERNAME ""
+#define AIO_PASSWORD ""
+
//#define ENABLE_EXTRA_GPIO
#define EEPROM_SIZE 512
char eeprom[EEPROM_SIZE];
#define WEB_DELAY_MS 100
-#define SAMPLING_PERIODE_MS 5000
+#define SAMPLING_PERIODE_MS 60000
/* I2C pin used*/
#define SDA 2
@@ -39,8 +47,24 @@ char eeprom[EEPROM_SIZE];
#define BOOTMODE_NORMAL 1
#define BOOTMODE_OTA 2
+double temp;
int mode;
+// Store the MQTT server, username, and password in flash memory.
+// This is required for using the Adafruit MQTT library.
+const char MQTT_SERVER[] PROGMEM = AIO_SERVER;
+const char MQTT_USERNAME[] PROGMEM = AIO_USERNAME;
+const char MQTT_PASSWORD[] PROGMEM = AIO_PASSWORD;
+
+// Create an ESP8266 WiFiClient class to connect to the MQTT server.
+WiFiClient client;
+
+// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
+Adafruit_MQTT_Client mqtt(&client, MQTT_SERVER, AIO_SERVERPORT, MQTT_USERNAME, MQTT_PASSWORD);
+
+const char TEMPERATURE_FEED[] PROGMEM = "/feeds/temperature";
+Adafruit_MQTT_Publish mqtt_temp = Adafruit_MQTT_Publish(&mqtt, TEMPERATURE_FEED);
+
/* Set these to your desired credentials. */
const char *ssid = "ESPConfigurator";
@@ -64,6 +88,9 @@ void readEEPROM(int &bootMode, char **ssid, char **password, char **host);
/* BMP180 decl */
int getTemperature(double &t);
+/* MQTT decl */
+int MQTT_connect();
+
void setupWifi(int bootmode, int forceSetup, char *confSsid, char *confPassword, char *confHost) {
IPAddress myIP;
if (bootmode == BOOTMODE_SETUP || forceSetup) {
@@ -167,7 +194,7 @@ void setup() {
}
Serial.print("Force Setup Mode ? :");
- Serial.print(txStatus?"No":"Yes");
+ Serial.print(txStatus ? "No" : "Yes");
Serial.println();
setupWifi(mode, txStatus == 0, confSsid, confPassword, confHost);
@@ -182,7 +209,6 @@ void setup() {
}
uint nbCycle = 0;
-double temp;
void loop() {
if (mode == BOOTMODE_OTA) {
ArduinoOTA.handle();
@@ -190,14 +216,19 @@ void loop() {
server.handleClient();
delay(WEB_DELAY_MS);
nbCycle++;
- if (nbCycle > SAMPLING_PERIODE_MS/WEB_DELAY_MS){
- if(getTemperature(temp) == 0){
+ if (nbCycle > SAMPLING_PERIODE_MS / WEB_DELAY_MS) {
+ if (getTemperature(temp) == 0) {
Serial.print("Sampling :");
Serial.println(temp);
- }else{
+ if (MQTT_connect() == 0){
+ Serial.println("publishing !");
+ mqtt_temp.publish(temp);
+ }
+ } else {
Serial.println("Cannot get T°C");
}
nbCycle = 0;
+
}
}
}