esp-idf-mqtt-broker

MQTT Broker for esp-idf

MIT License

Stars
123

esp-idf-mqtt-broker

MQTT Broker for esp-idf. This project use Mongoose networking library. I forked from here. However, with the release of mongoose ver7, I rewrote it. Your fork is welcome.

Installation overview

  1. In this project directory, create a components directory.

  2. In the components directory, clone Mongoose version 7.9:

git clone -b 7.9 https://github.com/cesanta/mongoose.git
  1. In the new Mongoose directory, create a CMakeLists.txt file containing:
idf_component_register(SRCS "mongoose.c" PRIV_REQUIRES esp_timer INCLUDE_DIRS ".")
  1. Compile this project.

Software requiment

  • mongoose version 7.9. The version of mongoose is written here.

  • ESP-IDF V5.0 or later. ESP-IDF V4.4 release branch reached EOL in July 2024.

Installation

git clone https://github.com/nopnop2002/esp-idf-mqtt-broker
cd esp-idf-mqtt-broker
mkdir components
cd components/
git clone -b 7.9 https://github.com/cesanta/mongoose.git
cd mongoose/
echo "idf_component_register(SRCS \"mongoose.c\" PRIV_REQUIRES esp_timer INCLUDE_DIRS \".\")" > CMakeLists.txt
cd ../..
idf.py set-target {esp32/esp32s2/esp32s3/esp32c2/esp32c3/esp32c6}
idf.py menuconfig
idf.py flash monitor

Application Setting

Station mode with dynamic address

SSID:SSID of your Wifi router ESP32 get IP using DHCP.

Station mode with static address

SSID:SSID of your Wifi router ESP32 set your specific IP.

Using mDNS hostname

You can connect using the mDNS hostname instead of the IP address.

You can change mDNS hostname using menuconfig.

Access Point Mode

SSID:SSID of ESP32 ESP32 have 192.168.4.1.

Start Built-In MQTT Subscriber

Start Built-In MQTT Publisher

Enable Authentication

When authentication is enabled, a username and password are required to connect to the server. config-8

Limitations

  • will topics will qos and will retain are ignored.

  • Unsupported MQTT request Do not respond to these MQTT requests: PUBREC PUBREL PUBCOMP

Publish using mosquitto-clients

$ sudo apt install mosquitto-clients moreutils
$ chmod 777 ./mqtt_sub.sh
$ ./mqtt_pub.sh

Subscribe using mosquitto-clients

$ sudo apt install mosquitto-clients moreutils
$ chmod 777 ./mqtt_sub.sh
$ ./mqtt_sub.sh
23/02/19 12:35:16 topic 2023/02/19-12:35:16
23/02/19 12:35:17 topic 2023/02/19-12:35:17
23/02/19 12:35:18 topic 2023/02/19-12:35:18
23/02/19 12:35:19 topic 2023/02/19-12:35:19
23/02/19 12:35:21 topic 2023/02/19-12:35:20

Notify topic of will using mosquitto-clients

  • In Terminal #1, do the following:
$ mosquitto_sub -v -h esp32-broker.local -p 1883  -t "topic/#" --will-topic "topic/will" --will-payload "GOODBYE"
  • Open new terminal. In Terminal #2, do the following:
$ mosquitto_sub -v -h esp32-broker.local -p 1883  -t "topic/#"
  • Press Control+C in Terminal #1:

  • The following is displayed in Terminal #2:

topic/will GOODBYE

Unsubscribe using python and paho

V2 of the Paho library was released in February 2024.

$ python3 -m pip install -U paho-mqtt
$ python3 unsub_example.py

Connected with result code 0
subscribe hoge

Received message 'b'test'' on topic 'hoge/1' with QoS 1
unsubscribe hoge, subscribe fuga

Received message 'b'test'' on topic 'fuga/1' with QoS 1
unsubscribe fuga, subscribe hoge

First, it subscribes to the topic [hoge/#]. When it receives the topic [hoge/1], it unsubscribes [hoge/#] and subscribes to [fuga/#]. When it receives the topic [fuga/1], it unsubscribes [fuga/#] and subscribes to [hoge/#] again.

Screen Shot

The message flows like this: PUBLISH->BROKER->SUBSCRIBE ScreenShot

mosquitto broker

mosquitto broker is here. mosquitto broker supports not only WiFi but also Ethernet.

git clone --recursive https://github.com/espressif/esp-protocols
cd esp-protocols/components/mosquitto/
cd examples/broker/
idf.py menuconfig
idf.py build