قبل أن تبدأ
للاتصال بـ MQTT One تحتاج إلى عنوان البروكر واسم مستخدم وكلمة مرور، وتُنشأ لك هذه البيانات تلقائياً عند بدء مشروع في منصة iotBind.
- أنشئ حساباً مجانياً أو سجّل الدخول في iotBind.
- أنشئ مشروعاً جديداً (أو افتح مشروعاً موجوداً).
- افتح تفاصيل المشروع لتجد عنوان البروكر وبيانات الدخول والـ Topics المخصصة له.
بيانات الاتصال
استخدم القيم التالية مع أي عميل MQTT. في أمثلة هذه الصفحة your-broker.mqtt.one مجرد عنوان توضيحي: استبدله بعنوان البروكر الظاهر في مشروعك.
| الإعداد | القيمة |
|---|---|
| عنوان البروكر | your-broker.mqtt.one (من مشروعك) |
| MQTT (TCP) | 1883 |
| MQTT عبر TLS | 8883 |
| WebSocket | 8083، المسار /mqtt |
| WebSocket آمن | 8084، المسار /mqtt |
| اسم المستخدم / كلمة المرور | بيانات دخول البروكر من مشروعك |
| معرّف العميل (Client ID) | أي قيمة فريدة لكل جهاز، مثل esp32-kitchen-01 |
| إصدار البروتوكول | MQTT 3.1 / 3.1.1 |
تتوفر عدة بروكرات، ولكل مشروع عنوان بروكر خاص به. انسخ دائماً العنوان كما يظهر في مشروعك.
أمثلة الكود
اختر منصتك. استبدل YOUR_USERNAME وYOUR_PASSWORD وعنوان البروكر وyour/topic بالقيم الموجودة في مشروعك.
# Subscribe to a topic (keeps listening)
mosquitto_sub -h your-broker.mqtt.one -p 1883 \
-u "YOUR_USERNAME" -P "YOUR_PASSWORD" \
-t "your/topic" -q 1 -v
# Publish a message from another terminal
mosquitto_pub -h your-broker.mqtt.one -p 1883 \
-u "YOUR_USERNAME" -P "YOUR_PASSWORD" \
-t "your/topic" -m "hello from MQTT One" -q 1
# Encrypted connection over TLS
mosquitto_sub -h your-broker.mqtt.one -p 8883 --capath /etc/ssl/certs \
-u "YOUR_USERNAME" -P "YOUR_PASSWORD" -t "your/topic"# pip install paho-mqtt
import paho.mqtt.client as mqtt
BROKER = "your-broker.mqtt.one"
TOPIC = "your/topic"
def on_connect(client, userdata, flags, reason_code, properties):
print("Connected:", reason_code)
client.subscribe(TOPIC, qos=1)
def on_message(client, userdata, msg):
print(msg.topic, msg.payload.decode())
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
client.username_pw_set("YOUR_USERNAME", "YOUR_PASSWORD")
client.on_connect = on_connect
client.on_message = on_message
client.connect(BROKER, 1883, keepalive=60)
client.publish(TOPIC, "22.5", qos=1)
client.loop_forever()// ESP32 / ESP8266 with the PubSubClient library
#include <WiFi.h> // use <ESP8266WiFi.h> on ESP8266
#include <PubSubClient.h>
const char* WIFI_SSID = "YOUR_WIFI";
const char* WIFI_PASS = "YOUR_WIFI_PASSWORD";
const char* BROKER = "your-broker.mqtt.one";
const char* MQTT_USER = "YOUR_USERNAME";
const char* MQTT_PASS = "YOUR_PASSWORD";
const char* TOPIC = "your/topic";
WiFiClient net;
PubSubClient mqtt(net);
void onMessage(char* topic, byte* payload, unsigned int length) {
Serial.printf("%s: %.*s\n", topic, (int)length, (char*)payload);
}
void reconnect() {
while (!mqtt.connected()) {
String id = "esp32-" + String((uint32_t)ESP.getEfuseMac(), HEX);
if (mqtt.connect(id.c_str(), MQTT_USER, MQTT_PASS)) {
mqtt.subscribe(TOPIC);
} else {
delay(3000);
}
}
}
void setup() {
Serial.begin(115200);
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) delay(500);
mqtt.setServer(BROKER, 1883);
mqtt.setCallback(onMessage);
}
void loop() {
if (!mqtt.connected()) reconnect();
mqtt.loop();
static unsigned long last = 0;
if (millis() - last > 10000) {
last = millis();
mqtt.publish(TOPIC, String(analogRead(34)).c_str());
}
}// npm install mqtt
import mqtt from "mqtt";
const client = mqtt.connect("mqtt://your-broker.mqtt.one:1883", {
username: "YOUR_USERNAME",
password: "YOUR_PASSWORD",
clientId: "node-" + Math.random().toString(16).slice(2, 10),
});
client.on("connect", () => {
client.subscribe("your/topic", { qos: 1 });
client.publish("your/topic", JSON.stringify({ temp: 22.5 }), { qos: 1 });
});
client.on("message", (topic, payload) => {
console.log(topic, payload.toString());
});<!-- MQTT over secure WebSocket, directly from the browser -->
<script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script>
<script>
const client = mqtt.connect("wss://your-broker.mqtt.one:8084/mqtt", {
username: "YOUR_USERNAME",
password: "YOUR_PASSWORD",
});
client.on("connect", () => client.subscribe("your/topic"));
client.on("message", (topic, payload) => {
document.body.insertAdjacentText("beforeend", topic + ": " + payload + "\n");
});
// Plain WebSocket is also available: ws://your-broker.mqtt.one:8083/mqtt
</script>الـ Topics وقواعد الصلاحيات
لا يستطيع مستخدم البروكر النشر أو الاشتراك إلا في الـ Topics المسموحة له. يعرض مشروعك الـ Topics المتاحة وما إذا كان كل منها يسمح بالنشر أو الاشتراك أو كليهما.
- استخدم أسماء الـ Topics كما تظهر في مشروعك تماماً — الأسماء حساسة لحالة الأحرف.
- نظّم البيانات بمستويات تفصلها
/، مثلyour/topic/temperature. - استخدم الأحرف والأرقام والشرطة والشرطة السفلية، وتجنب المسافات والرموز الخاصة.
- يمكن استخدام الرموز الشاملة
+و#عند الاشتراك، ضمن الـ Topics المسموحة لك.
أفضل الممارسات
معرّف عميل فريد
إذا اتصل عميلان بنفس المعرّف فسيقطع كل منهما اتصال الآخر. امنح كل جهاز معرّفاً خاصاً.
إبقاء الاتصال
استخدم فترة Keep Alive بين 30 و60 ثانية لاكتشاف الاتصالات المقطوعة بسرعة.
إعادة الاتصال تلقائياً
الشبكات تنقطع أحياناً. اجعل جهازك يعيد المحاولة بعد مهلة قصيرة بدلاً من التوقف.
اختر QoS المناسب
QoS 0 للقراءات المتكررة، وQoS 1 لمعظم الرسائل، وQoS 2 فقط عندما يكون التكرار غير مقبول.
Retain ورسالة الوصية
احفظ آخر حالة بخيار Retain، وسجّل رسالة وصية للإعلان عن انقطاع الجهاز.
شفّر على الشبكات العامة
استخدم المنفذ 8883 (TLS) أو 8084 (WebSocket الآمن) عندما تمر البيانات عبر الإنترنت.
حل المشكلات
| المشكلة | ما الذي يجب التحقق منه |
|---|---|
| رفض الاتصال: غير مصرّح | تحقق من اسم المستخدم وكلمة المرور، وتأكد أنك نسخت عنوان البروكر الخاص بنفس المشروع. |
| تم الاتصال لكن لا تصل رسائل | تأكد أن الناشر والمشترك يستخدمان نفس الـ Topic بالضبط، وأن مستخدمك مسموح له بالاشتراك فيه. |
| ينقطع الاتصال كل بضع ثوانٍ | غالباً يستخدم عميل آخر نفس معرّف العميل. استخدم معرّفاً فريداً لكل جهاز. |
| لا يمكن الاتصال من المتصفح | تحتاج المتصفحات إلى WebSocket: استخدم المنفذ 8084 مع wss:// والمسار /mqtt. |
| انتهت مهلة الاتصال | قد تحجب شبكتك المنفذ. جرّب منفذاً آخر مثل 8883 أو 8084، أو اختبر من شبكة مختلفة. |