Skip to content

Instantly share code, notes, and snippets.

@biacz
Created December 19, 2018 23:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save biacz/24c7f02cf9adbf6b399dff388235da86 to your computer and use it in GitHub Desktop.
Save biacz/24c7f02cf9adbf6b399dff388235da86 to your computer and use it in GitHub Desktop.
basic_mqtt_framework
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
#include "secrets.h"
#define ROOM "what"
#define NAME "ever"
const char* cmndTopic1 = "house/" ROOM "/" NAME "/set";
const char* cmndTopic2 = "house/group/power";
const char* statusTopic = "house/" ROOM "/" NAME "/status";
WiFiClient wifiClient;
PubSubClient MQTTClient(wifiClient);
bool printedWifiToSerial = false;
void wifiSetup() {
Serial.print("[WIFI] INFO: Devicename is ");
Serial.println(NAME);
Serial.print("[WIFI] INFO: Connecting to ");
Serial.println(WIFI_SSID);
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("[WIFI] INFO: WiFi connected");
Serial.print("[WIFI] INFO: IP address: ");
Serial.println(WiFi.localIP());
}
void otaSetup() {
ArduinoOTA.setPort(OTA_PORT);
ArduinoOTA.setHostname(NAME);
ArduinoOTA.setPassword(OTA_PASS);
ArduinoOTA.begin();
Serial.println("[OTA] initialized!");
}
void mqttReconnect() {
Serial.println("[MQTT] Check");
if (MQTTClient.connected()) {
Serial.println("[MQTT] OK");
}
else {
if (WiFi.status() == WL_CONNECTED) {
if (MQTTClient.connect(NAME, MQTT_USER, MQTT_PASSWORD)) {
Serial.println("[MQTT] Connected!");
MQTTClient.subscribe(cmndTopic1);
Serial.print("[MQTT] Subscribing to: ");
Serial.println(cmndTopic1);
MQTTClient.subscribe(cmndTopic2);
Serial.print("[MQTT] Subscribing to: ");
Serial.println(cmndTopic2);
} else {
Serial.print("[MQTT] failed, rc=");
Serial.println(MQTTClient.state());
}
}
else {
Serial.println("[MQTT] Not connected to WiFI AP, abandoned connect.");
}
}
if (MQTTClient.connected()) {
digitalWrite(WIFI_LED_PIN, HIGH);
}
else {
digitalWrite(WIFI_LED_PIN, LOW);
}
}
void MQTTcallback(char* topic, byte* payload, unsigned int length) {
Serial.print("[MQTT] Message arrived [");
Serial.print(topic);
Serial.println("] ");
}
void setup() {
Serial.begin(115200);
wifiSetup();
otaSetup();
MQTTClient.setServer(MQTT_SERVER_IP, MQTT_SERVER_PORT);
MQTTClient.setCallback(MQTTcallback);
}
void loop() {
yield();
ArduinoOTA.handle();
if(!MQTTClient.connected()) {
mqttReconnect();
}
MQTTClient.loop();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment