Awesome
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
-
In this project directory, create a components directory.
-
In the components directory, clone Mongoose version 7.9:
git clone -b 7.9 https://github.com/cesanta/mongoose.git
- In the new Mongoose directory, create a CMakeLists.txt file containing:
idf_component_register(SRCS "mongoose.c" PRIV_REQUIRES esp_timer INCLUDE_DIRS ".")
- 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.
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
mosquitto broker
mosquitto broker is here.
mosquitto broker supports not only WiFi but also Ethernet.
mosquitto broker supports TLS transport layer.
git clone --recursive https://github.com/espressif/esp-protocols
cd esp-protocols/components/mosquitto/
cd examples/broker/
idf.py menuconfig
idf.py build