Simulating Message Queuing Telemetry Transport (MQTT) Protocol using Wokwi Simulator and Mosquitto Broker.
📦 Setup Environment
-
Download and Install Mosquitto Broker for Windows.
-
Add Mosquitto to PATH. Default Installation Directory for Mosquitto is:
C:\Program Files\mosquitto
-
Now, Open Notepad as Administrator and Save the following in the above directory by the name mosquitto.conf file.
listener 1883 0.0.0.0 protocol MQTT allow_anonymous true log_type all log_dest file C:\Program Files\mosquitto\mosquitto.log
-
Verify Installation with
mosquitto -v
. -
Check for Mosquitto Subscriber and Publisher with
mosquitto_sub --version
ormosquitto_pub --version
. -
Stop Mosquitto Broker service in Services.msc, if you get an error and re-check
mosquitto -v
. -
Test Basic Connection:
mosquitto_sub -h test.mosquitto.org -t test/connect mosquitto_pub -h test.mosquitto.org -t test/connect -m "Hello MQTT!"
🤖 Circuit Layout and Topics
- For complete circuit diagrams and pin connections, refer to CONNECTIONS.md.
graph TD
A[home/] --> B[home/control]
A --> C[home/summary]
A --> D[home/rooms/]
A --> E[home/control/response/]
D --> F[home/rooms/room1]
D --> G[home/rooms/kitchen]
D --> H[home/rooms/gate]
E --> I[home/control/response/client_id]
Command | Action | Required Fields | Description | Response Topic | Example JSON |
---|---|---|---|---|---|
Subscribe | subscribe |
client_id , rooms |
Subscribe client to specific rooms | home/control/response/{client_id} |
{"action": "subscribe", "client_id": "C-01", "rooms": ["room1", "kitchen"]} |
Unsubscribe | unsubscribe |
client_id , rooms |
Unsubscribe client from specific rooms | home/control/response/{client_id} |
{"action": "unsubscribe", "client_id": "C-01", "rooms": ["room1"]} |
Disconnect | disconnect |
client_id |
Disconnect client from all rooms | home/control/response/{client_id} |
{"action": "disconnect", "client_id": "C-01"} |
Status | status |
client_id |
Get client subscription status | home/control/response/{client_id} |
{"action": "status", "client_id": "C-01"} |
🤔 How to Run?
-
First, Go to Wokwi and Open Basic ESP32 Project.
-
Create New File named
main.py
. -
From the repository, use the
diagram.json
andmain.py
. -
Run the code in Wokwi.
-
Meanwhile, open Command Prompt and Subscribe to Topics to view messages.
-
Monitor all Topics.
mosquitto_sub -h test.mosquitto.org -t "home/#" -v
-
Monitor Specific Topics.
-
Monitor Control Messages
mosquitto_sub -h test.mosquitto.org -t "home/control/#" -v
-
Monitor Room Readings
mosquitto_sub -h test.mosquitto.org -t "home/rooms/#" -v
-
Monitor System Summary
mosquitto_sub -h test.mosquitto.org -t "home/summary" -v
- Subscribe Client to Rooms
-
Subscribe C-01 to gate only
mosquitto_pub -h test.mosquitto.org -t "home/control" -m "{\"action\": \"subscribe\", \"client_id\": \"C-01\", \"rooms\": [\"gate\"]}"
-
Subscribe C-02 to all rooms
mosquitto_pub -h test.mosquitto.org -t "home/control" -m "{\"action\": \"subscribe\", \"client_id\": \"client3\", \"rooms\": [\"room1\", \"kitchen\", \"gate\"]}"
-
Monitor Client Status
mosquitto_pub -h test.mosquitto.org -t "home/control" -m "{\"action\": \"status\", \"client_id\": \"C-01\"}"
-
Unsubscribe Client from Rooms
- Remove client2 from multiple rooms
mosquitto_pub -h test.mosquitto.org -t "home/control" -m "{\"action\": \"unsubscribe\", \"client_id\": \"C-02\", \"rooms\": [\"kitchen\", \"gate\"]}"
-
Disconnect Client
mosquitto_pub -h test.mosquitto.org -t "home/control" -m "{\"action\": \"disconnect\", \"client_id\": \"C-01\"}"
-
Monitor Specific Room Data
-
Monitor room1 readings
mosquitto_sub -h test.mosquitto.org -t "home/rooms/room1" -v
-
Monitor kitchen readings
mosquitto_sub -h test.mosquitto.org -t "home/rooms/kitchen" -v
-
Monitor gate readings
mosquitto_sub -h test.mosquitto.org -t "home/rooms/gate" -v