Browse Source

Send Data via MQTT

main
ephides 5 years ago
parent
commit
da50b86576
  1. 61
      ESPClock.ino

61
ESPClock.ino

@ -5,11 +5,14 @@
#include <Adafruit_GFX.h> #include <Adafruit_GFX.h>
#include <Max72xxPanel.h> #include <Max72xxPanel.h>
#include <DHTesp.h> #include <DHTesp.h>
#include <PubSubClient.h>
#include "secrets.h" #include "secrets.h"
const char* ssid = STASSID; const char* ssid = STASSID;
const char* password = STAPSK; const char* password = STAPSK;
const char* mqttserver = MQTTSERVER;
const int pinCS = D8; const int pinCS = D8;
const int numberOfHorizontalDisplays = 8; const int numberOfHorizontalDisplays = 8;
const int numberOfVerticalDisplays = 1; const int numberOfVerticalDisplays = 1;
@ -20,10 +23,21 @@ Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVe
#define DHTTYPE DHTesp::DHT22 // DHT 22 (AM2302) #define DHTTYPE DHTesp::DHT22 // DHT 22 (AM2302)
float temperature; float temperature;
float humidity;
long dhttimer; long dhttimer;
DHTesp dht; DHTesp dht;
WiFiClient espClient;
PubSubClient MQTTclient(espClient);
long mqtttimer;
char MQTTclientName[32];
long mqttlastsent=0;
const long mqttinterval=60000l;
IPAddress ip;
void setup() { void setup() {
// Init Matrix Panel // Init Matrix Panel
matrix.setIntensity(0); // Use a value between 0 and 15 for brightness matrix.setIntensity(0); // Use a value between 0 and 15 for brightness
@ -90,6 +104,12 @@ void setup() {
// Init OTA // Init OTA
ArduinoOTA.begin(); ArduinoOTA.begin();
// Setup MQTT
sprintf(MQTTclientName, "esp8266-%06X", ESP.getChipId());
MQTTclient.setServer(MQTTSERVER, 1883);
mqtttimer=0l;
// Setup DHT Sensor
dht.setup(DHTPIN,DHTTYPE); dht.setup(DHTPIN,DHTTYPE);
dhttimer=millis()+dht.getMinimumSamplingPeriod(); dhttimer=millis()+dht.getMinimumSamplingPeriod();
} }
@ -98,9 +118,13 @@ void loop() {
struct tm *timeinfo; struct tm *timeinfo;
int temp; int temp;
char topic[64];
char payload[64];
// get DHT readings // get DHT readings
if (dhttimer<millis()) { if (dhttimer<millis()) {
temperature = dht.getTemperature(); temperature = dht.getTemperature();
humidity = dht.getHumidity();
dhttimer=millis()+dht.getMinimumSamplingPeriod(); dhttimer=millis()+dht.getMinimumSamplingPeriod();
} }
@ -153,6 +177,43 @@ void loop() {
matrix.setIntensity(analogRead(A0)/64); matrix.setIntensity(analogRead(A0)/64);
matrix.write(); // Send bitmap to display matrix.write(); // Send bitmap to display
// MQTT
if (!MQTTclient.connected()) {
if (mqtttimer<millis()) {
mqtttimer=millis()+5000;
MQTTclient.connect(MQTTclientName);
}
} else {
MQTTclient.loop();
// Publish sensor readings
if (mqttlastsent+mqttinterval<millis()) {
sprintf(topic,"%s/sensors/temperature",MQTTclientName);
sprintf(payload,"%.2f",temperature);
MQTTclient.publish(topic, payload);
sprintf(topic,"%s/sensors/humidity",MQTTclientName);
sprintf(payload,"%.2f",humidity);
MQTTclient.publish(topic, payload);
sprintf(topic,"%s/sensors/illumination",MQTTclientName);
sprintf(payload,"%u",analogRead(A0));
MQTTclient.publish(topic, payload);
sprintf(topic,"%s/sensors/headindex",MQTTclientName);
sprintf(payload,"%.2f",dht.computeHeatIndex(temperature, humidity, 0));
MQTTclient.publish(topic, payload);
sprintf(topic,"%s/sensors/dewpoint",MQTTclientName);
sprintf(payload,"%.2f",dht.computeDewPoint(temperature, humidity, 0));
MQTTclient.publish(topic, payload);
// infos about the system
sprintf(topic,"%s/network/rssi",MQTTclientName);
sprintf(payload,"%i",WiFi.RSSI());
MQTTclient.publish(topic, payload);
sprintf(topic,"%s/network/localip",MQTTclientName);
ip = WiFi.localIP();
sprintf(payload,"%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
MQTTclient.publish(topic, payload);
mqttlastsent=millis();
}
}
// Over The Air Update // Over The Air Update
ArduinoOTA.handle(); ArduinoOTA.handle();
} }

Loading…
Cancel
Save