Skip to content

Instantly share code, notes, and snippets.

@danilopinotti
Last active April 28, 2021 03:19
Show Gist options
  • Save danilopinotti/f4498916be3cef051625495a56c4b553 to your computer and use it in GitHub Desktop.
Save danilopinotti/f4498916be3cef051625495a56c4b553 to your computer and use it in GitHub Desktop.
Simple MQTT chat using Arduino Serial and a public broker
#include <WiFi.h>
#include <WiFiManager.h> // https://github.com/tzapu/WiFiManager
#include <PubSubClient.h> // https://github.com/knolleary/pubsubclient
#define BROKER_ADDRESS "broker.hivemq.com"
#define BROKER_PORT 1883
#define MQTT_CLIENT_ID "arduinoClient-1A2B3C"
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
void setupWiFi() {
WiFi.mode(WIFI_STA);
WiFiManager wifiManager;
//wifiManager.resetSettings();
bool isConnected;
isConnected = wifiManager.autoConnect("AutoConnectAP", "password");
if (!isConnected) {
Serial.println("Failed to connect.");
ESP.restart();
}
}
void setup() {
Serial.begin(19200);
setupWiFi();
mqttClient.setServer(BROKER_ADDRESS, BROKER_PORT);
mqttClient.setCallback(handleReceivedMessage);
}
void connectMqtt() {
while (!mqttClient.connected()) {
Serial.print("Attempting MQTT connection... ");
if (mqttClient.connect(MQTT_CLIENT_ID)) {
Serial.println("Connected!");
subscribeMqttTopics();
} else {
Serial.println("failed, try again in 5 seconds");
delay(5000);
}
}
}
void handleReceivedMessage(char* topic, byte* payload, unsigned int length) {
Serial.print("[" + String(topic) + "]: ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
}
void subscribeMqttTopics() {
mqttClient.subscribe("btk/chat");
}
void loop() {
if (!mqttClient.connected()) {
connectMqtt();
}
String message = Serial.readString();
if (message.length() >= 1) {
mqttClient.publish("btk/chat", message.c_str());
}
mqttClient.loop();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment