ESP32. MQTT. Broker. Publish. Subscribe. ThingSpeak

9.- App Publish and moves a Servo in ESP32.

p117B_mqtt_Extension_Servo.aia (73.6 KB)

  • Publish juan/mensaje = "increases" ---> increases grado +5
  • Publish juan/mensaje = "decreases" ---> decreases grado -5
  • Publish juan/mensaje = 90* ---> Move Servo to those position

// Juan A. Villalpando.
// http://kio4.com/arduino/117_Wemos_MQTT.htm

//#include <ESP8266WiFi.h> // Para el ESP8266
#include <WiFi.h> // Para el ESP32
WiFiClient WIFI_CLIENT;
#include <PubSubClient.h>
PubSubClient MQTT_CLIENT;

const char* ssid = "Nombre_Red_Wifi";
const char* password = "Clave_Wifi";

// Servo.
#include <Servo.h>
Servo myservo;
#define servoPin  27 // El servo en pin 27
int grado = 90;
String message = "";

void setup() {
  Serial.begin(115200);
  delay(10);
  myservo.attach(servoPin);
  Serial.println();
  Serial.print("Connecting with ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}

Serial.println("");
Serial.print("WiFi conected. IP: ");
Serial.println(WiFi.localIP());

// Setting Callback.
  MQTT_CLIENT.setCallback(callback);
}

// What to do when it receives the data. 
void callback(char* recibido, byte* payload, unsigned int length) {
  Serial.print("Message received: ");
  Serial.print(recibido);
  Serial.print("   ");
  message = "";
  for (int i=0;i<length;i++) {
    message += (char)payload[i];
  }
   Serial.println(message);
   if (message == "increases") {grado = grado + 5; myservo.write(grado);}
   if (message == "decreases") {grado = grado - 5; myservo.write(grado);}
   if (message.indexOf("*") != -1)  { // if message contain *
   message = message.substring(0, message.length() - 1); // Delete last char *
   grado = message.toInt();
   myservo.write(grado);
   }
}
 
void loop() {
  if (!MQTT_CLIENT.connected()) {
    reconnect();
  }

  // PUBLISH topic.
  // Does not Publish.
  
  MQTT_CLIENT.loop(); // Check Subscription.

}

// Reconecta con MQTT broker
void reconnect() {
MQTT_CLIENT.setServer("broker.hivemq.com", 1883);  
//MQTT_CLIENT.setServer("mqtt.eclipse.org", 1883);
MQTT_CLIENT.setClient(WIFI_CLIENT);

// Trying connect with broker.
while (!MQTT_CLIENT.connected()) {
Serial.println("Trying to connect with Broker MQTT.");
MQTT_CLIENT.connect("JuanAntonio"); // it isn't necessary..
MQTT_CLIENT.subscribe("juan/mensaje"); // HERE SUBSCRIBE.

// Wait to try to reconnect again...
delay(3000);
}

Serial.println("Conectado a MQTT.");
}
  • It is convenient that the Servo is powered by an external power supply.