Skip to content

MQTT Publish/Subscribe

Send telemetry and handle a simple LED command via MQTT.

Wiring

  • Broker: test.mosquitto.org (demo)

Code

#include <WiFiS3.h>
#include <PubSubClient.h>

WiFiClient net;
PubSubClient mqtt(net);

const char* ssid = "YOUR_SSID";
const char* pass = "YOUR_PASS";

const char* host = "test.mosquitto.org";
const int   port = 1883;

const char* pubTopic = "stemsl/telemetry";
const char* subTopic = "stemsl/cmd";

void onMsg(char* topic, byte* payload, unsigned int len) {
  String s;
  for (unsigned int i = 0; i < len; i++) s += (char)payload[i];
  if (s == "led:on")  { pinMode(3, OUTPUT); digitalWrite(3, HIGH); }
  if (s == "led:off") { digitalWrite(3, LOW); }
}

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED) { delay(500); }
  mqtt.setServer(host, port);
  mqtt.setCallback(onMsg);
}

void loop() {
  if (!mqtt.connected()) {
    if (mqtt.connect("stemsl-ekr4")) mqtt.subscribe(subTopic);
  }
  mqtt.loop();

  static unsigned long t = 0;
  if (millis() - t > 2000) {
    t = millis();
    int v = analogRead(A0);
    String msg = String("{"a0":") + v + "}";
    mqtt.publish(pubTopic, msg.c_str());
  }
}