Introduction
This article will show you how to quickly create an ESP32 based "smart device", using Arduino, by creating a simple application that basically connects your WiFi router, then a MQTT server, and publishes a message every five seconds.
Of course, you can use any other WiFi enabled board.
I chose the ESP32 because I recently bought a LiliGo TTGO ESP32 board, without any specific project in mind.
This is the board I use: http://www.lilygo.cn/prod_view.aspx?Id=1126
Configuration
Board
First, we need to add support to our ESP32 board.
- In the Arduino preferences, in the Additional Boards Manager URLs field, add: 
https://dl.espressif.com/dl/package_esp32_index.json - In the Tools menu, open the Boards Manager and look for esp32, then install it.
 - Still in the Tools menu, choose your board (TTGO LoRa32-OLED V1 in my case)
 
Libraries
- In the Sketch menu, select Manage Libraries...
 - Install library PubSubClient
 
Code
Configuration
Headers
#include <WiFi.h>
#include <PubSubClient.h>
Definitions
Let's define our WiFi SSID, password, and the MQTT server
informations (hostname, port, username, password, client).
#define ssid          "MyWiFi" 
#define password      "MyWifiPassword"
#define mqtt_host     "MyMQTTServer"
#define mqtt_port     1883
#define mqtt_client   "ArduinoCl"
#define mqtt_user     "julzor"
#define mqtt_password "SomePassword"
Global variables
WiFiClient espClient;
PubSubClient cli = PubSubClient(espClient);
Connecting to WiFi
void setup_wifi()
{
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(500);
  }
}
Connecting to MQTT
void setup_mqtt()
{
  cli.setServer(mqtt_host, mqtt_port);
  if (cli.connect(mqtt_client, mqtt_user, mqtt_password))
  {
    // Now we're connected to the MQTT server
    // Let's publish a first message...
    cli.publish("test/hello", "hello world");
  }
}
Putting it all together
Setup
void setup()
{
    Serial.begin(115200);
    delay(10);
    setup_wifi();
    setup_mqtt();
}
Loop
long last = 0;
void loop() {
  if (!cli.connected())
  {
    // We were disconnected, let's reconnect
    delay(1000);
    setup_mqtt();
  }
  else
  {
    cli.loop();
    long now = millis();
    if (now - last > 5000)
    {
      last = now;
      cli.publish("test/ping", "Ping");
    }
  }
}
Conclusion
You should now have a working application that does nothing but send a ping message on your MQTT server. That's a start!
In another article, I will show you how I use my useless smart device with Node-RED, a Raspberry Pi, and Alexa.
    
Top comments (0)