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 --versionormosquitto_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!"
🤖 Subscription 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 |
|---|---|---|---|
| Subscribe | subscribe |
client_id, rooms |
Subscribe client to specific rooms |
| Unsubscribe | unsubscribe |
client_id, rooms |
Unsubscribe client from specific rooms |
| Disconnect | disconnect |
client_id |
Disconnect client from all rooms |
| Status | status |
client_id |
Get client subscription status |
🤔 How to Run?
-
First, Go to Wokwi and Open Basic ESP32 Project.
-
Create New File named
main.py. -
From the repository, use the
diagram.jsonandmain.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