مقدمه
این سرور یک سرویس رایگان MQTT Broker است که برای توسعهدهندگان اینترنت اشیاء (IoT) جهت تست و توسعه پروژههای خود فراهم شده است. استفاده از این سرور به شما امکان میدهد پیامها را بین دستگاههای مختلف (مانند میکروکنترلرها، اپلیکیشنهای موبایل، وبسایتها) از طریق پروتکل MQTT تبادل کنید.
۱. مشخصات اتصال
برای اتصال به این سرور، از مشخصات زیر استفاده کنید:
- Server (آدرس سرور):
mqtt.giot.ir
- Port (پورت):
8883
- Protocol (پروتکل):
TLS
(Transport Layer Security) - Username (نام کاربری):
giot
- Password (رمز عبور):
giot
نکات مهم در مورد اتصال:
- پورت 8883 و پروتکل TLS: این پورت نشاندهنده استفاده از اتصال امن و رمزگذاری شده است. تمام دادههایی که بین دستگاه شما و سرور رد و بدل میشود، رمزگذاری خواهد شد.
- نام کاربری و رمز عبور مشترک: توجه داشته باشید که نام کاربری (
giot
) و رمز عبور (giot
) برای تمام کاربران این سرویس یکسان است. (پیامدهای امنیتی در ادامه توضیح داده شده است).
۲. ساختار تاپیک (Topic Structure)
سرور به گونهای تنظیم شده که کاربران با استفاده از نام کاربری giot
میتوانند به تاپیکهای زیرمجموعه demo/giot/#
دسترسی داشته باشند.
- تاپیک پایه:
demo/giot/
- نحوه ایجاد تاپیک اختصاصی: برای اینکه پیامهای شما با دیگران تداخل نداشته باشد، باید یک شناسه منحصر به فرد (مانند یک هش، شماره سریال دستگاه، یا هر رشته یکتای دیگر) به انتهای تاپیک پایه اضافه کنید.
- مثال: اگر شناسه منحصر به فرد شما
mydevice123
باشد:demo/giot/mydevice123/temperature
(ارسال دما)demo/giot/mydevice123/status
(ارسال وضعیت)demo/giot/mydevice123/command
(دریافت دستورات)
- مثال: اگر شناسه منحصر به فرد شما
- اشتراک (Subscribe): شما میتوانید به تاپیک کامل خود (
demo/giot/mydevice123/#
) یا تاپیکهای خاصتر مشترک شوید. - انتشار (Publish): شما میتوانید به هر تاپیکی تحت
demo/giot/YOUR_UNIQUE_ID/
پیام ارسال کنید.
demo/
└── giot/
├── # (wildcard)
│
├── YOUR_UNIQUE_ID_1/
│ ├── temperature
│ ├── status
│ └── command
│
└── YOUR_UNIQUE_ID_2/
├── humidity
└── control
۳. پنل تحت وب (Web Panel)
یک پنل تحت وب به آدرس زیر برای راحتی توسعهدهندگان فراهم شده است:
با استفاده از این پنل میتوانید به صورت آنلاین به بروکر متصل شوید، تاپیکها را مشترک شوید، پیام ارسال کنید و عملکرد دستگاههای خود را آزمایش نمایید.
۴. ملاحظات امنیتی
- اتصال TLS: استفاده از پورت 8883 و TLS ارتباط شما را رمزگذاری میکند (مزیت).
- نام کاربری و رمز عبور مشترک: این بزرگترین نقطه ضعف امنیتی این سرویس رایگان است.
- هر کسی با این مشخصات میتواند به هر تاپیکی تحت
demo/giot/#
دسترسی پیدا کند (اگر نام کامل تاپیک را بداند/حدس بزند). - استفاده از شناسههای منحصر به فرد در تاپیک، حریم خصوصی واقعی را تضمین نمیکند.
- نتیجه: این سرور برای تست، توسعه، و یادگیری مناسب است، اما برای کاربردهای تجاری یا حساس توصیه نمیشود. از ارسال اطلاعات حساس خودداری کنید.
- هر کسی با این مشخصات میتواند به هر تاپیکی تحت
۵. نمونه کد آردوینو برای ESP32/ESP8266 با اتصال TLS
پیشنیازها:
- نصب برد ESP32/ESP8266 در Arduino IDE.
- نصب کتابخانه
PubSubClient
(نوشته Nick O'Leary) از طریق Library Manager.
کد نمونه:
#include <WiFi.h> // برای ESP32
// #include <ESP8266WiFi.h> // برای ESP8266 (یکی از این دو خط را فعال کنید)
#include <WiFiClientSecure.h>
#include <PubSubClient.h>
// --- تنظیمات WiFi ---
const char* ssid = "YOUR_WIFI_SSID"; // نام شبکه WiFi خود را وارد کنید
const char* password = "YOUR_WIFI_PASSWORD"; // رمز عبور شبکه WiFi خود را وارد کنید
// --- تنظیمات MQTT Broker ---
const char* mqttServer = "mqtt.giot.ir";
const int mqttPort = 8883; // پورت TLS
const char* mqttUser = "giot";
const char* mqttPassword = "giot";
// --- شناسه منحصر به فرد دستگاه ---
// !!! این بخش را حتما با یک شناسه یکتا برای دستگاه خود جایگزین کنید !!!
const char* uniqueDeviceId = "YOUR_UNIQUE_DEVICE_ID"; // مثلا "my_esp32_livingroom"
// --- تاپیکهای MQTT ---
char statusTopic[100]; // تاپیک برای ارسال وضعیت
char commandTopic[100]; // تاپیک برای دریافت دستور
// --- اشیاء کلاینتها ---
WiFiClientSecure wifiClientSecure; // کلاینت امن برای TLS
PubSubClient client(wifiClientSecure);
unsigned long lastMsg = 0;
const long interval = 5000; // ارسال پیام هر 5 ثانیه
// --- تابع callback برای دریافت پیامهای MQTT ---
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
String message;
for (int i = 0; i < length; i++) {
message += (char)payload[i];
}
Serial.println(message);
// اینجا میتوانید بر اساس پیام دریافتی کاری انجام دهید
if (message == "ON") {
Serial.println("Received ON command!");
// کد روشن کردن LED یا رله
} else if (message == "OFF") {
Serial.println("Received OFF command!");
// کد خاموش کردن LED یا رله
}
}
// --- تابع اتصال مجدد به MQTT ---
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
String clientId = "ESP_";
#ifdef ESP32
clientId += String(WiFi.macAddress());
#else // ESP8266
clientId += String(WiFi.macAddress());
#endif
clientId.replace(":", "");
if (client.connect(clientId.c_str(), mqttUser, mqttPassword)) {
Serial.println("connected");
snprintf(statusTopic, sizeof(statusTopic), "demo/giot/%s/status", uniqueDeviceId);
snprintf(commandTopic, sizeof(commandTopic), "demo/giot/%s/command", uniqueDeviceId);
Serial.print("Status Topic: "); Serial.println(statusTopic);
Serial.print("Command Topic: "); Serial.println(commandTopic);
if (client.subscribe(commandTopic)) {
Serial.print("Subscribed to: "); Serial.println(commandTopic);
} else {
Serial.println("Subscription failed!");
}
client.publish(statusTopic, "Device Connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
// --- تابع Setup ---
void setup() {
Serial.begin(115200);
Serial.println("\nStarting setup...");
Serial.print("Connecting to "); Serial.println(ssid);
#ifdef ESP32
WiFi.begin(ssid, password);
#else // ESP8266
WiFi.begin(ssid, password);
#endif
while (WiFi.status() != WL_CONNECTED) {
delay(500); Serial.print(".");
}
Serial.println("\nWiFi connected");
Serial.print("IP address: "); Serial.println(WiFi.localIP());
// --- تنظیمات TLS ---
// مهم: این خط اعتبارسنجی گواهی سرور را غیرفعال میکند (کمتر امن اما سادهتر).
wifiClientSecure.setInsecure();
// برای امنیت بیشتر، گواهی CA سرور را با setCACert() تنظیم کنید.
client.setServer(mqttServer, mqttPort);
client.setCallback(callback);
Serial.println("MQTT setup done.");
}
// --- تابع Loop ---
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop(); // حفظ ارتباط MQTT
unsigned long now = millis();
if (now - lastMsg > interval) {
lastMsg = now;
char msg[50];
snprintf(msg, sizeof(msg), "Uptime: %lu sec", millis() / 1000);
Serial.print("Publishing message: "); Serial.println(msg);
client.publish(statusTopic, msg);
}
}
۶. نحوه استفاده از کد آردوینو
- کد بالا را کپی کرده و در Arduino IDE پیست کنید.
- مقادیر
YOUR_WIFI_SSID
وYOUR_WIFI_PASSWORD
را با اطلاعات شبکه WiFi خود جایگزین کنید. - مقدار
YOUR_UNIQUE_DEVICE_ID
را با یک شناسه منحصر به فرد برای دستگاه خود عوض کنید (مثلاًesp_office_1
). - برد و پورت سریال صحیح ESP خود را در منوی Tools انتخاب کنید.
- کد را کامپایل و روی برد آپلود کنید.
- پنجره Serial Monitor را با بادریت 115200 باز کنید تا لاگ اتصال و پیامها را ببینید.
- با استفاده از پنل وب
cloud.giot.ir
یا کلاینت MQTT دیگر، به تاپیکهای وضعیت (برای مشاهده) و دستورات (برای ارسالON
/OFF
) دستگاه خود متصل شوید و عملکرد را تست کنید.