دستگاه های اینترنت اشیا می توانند کارهای جالبی انجام دهند، اما بخش مهمی از معادله نحوه ارتباط آنهاست. شما می توانید آن را با یک ماژول ESP-01 مدیریت کنید.
داشتن بودجه لزوماً به این معنی نیست که نمی توانید پروژه های پیشرفته DIY را انجام دهید. اگر به دنبال یک ماژول WiFi کوچک، مقرون به صرفه و راحت برای افزایش مقیاس پروژه های اینترنت اشیا خود هستید، ماژول ESP-01 یک انتخاب عالی است. با این حال، ادغام چنین ماژولی با یک پروتکل سبک وزن مانند MQTT می تواند مشکل باشد، به خصوص اگر در توسعه اینترنت اشیا تازه کار هستید.
برنامه نویسی برد ESP-01 به تنهایی می تواند در مقایسه با سایر ماژول های سری ESP8266 چالش برانگیز باشد. اما بیایید به اصول اولیه تمام تنظیمات سخت افزاری و نرم افزاری که برای شروع استفاده از ماژول نیاز دارید و همچنین نحوه راه اندازی MQTT به روشی ساده و رویه ای بپردازیم.
آشنایی با هیئت
ESP8266 ESP-01 یک ماژول WiFi کوچک و جمع و جور است که با یک تراشه ESP8266EX عرضه می شود که یک SoC بسیار یکپارچه است که برای کاربردهای اینترنت اشیا طراحی شده است.
این ماژول شامل یک میکروکنترلر بی سیم تک تراشه با پشته پروتکل TCP/IP است و می تواند به یک شبکه بی سیم متصل شود یا به عنوان یک نقطه دسترسی عمل کند. ماژول ESP-01 همچنین دارای یک هدر پین 2×4 است که دسترسی به پین های GPIO، برق و زمین و رابط UART را فراهم می کند.
راه اندازی سخت افزار
ماژول به هیچ وجه برای برد برد نیست. برای راحتی، میتوانید یک برد از پیش ساخته شده بخرید یا فقط به روش قدیمی بروید – با استفاده از سیمهای جامپر و تخته نان.
یک برنامه نویس اختصاصی به نام ESP8266 Serial Module Board وجود دارد که می تواند تجربه برنامه نویسی شما را آسان کند. اگر ترجیح میدهید این مسیر را طی کنید، DIYHOBI یک آموزش مفید در مورد نحوه فلش کردن یک برنامه در ماژول ESP-01 با استفاده از برنامهنویس (از جمله آداپتور ماژول تبدیل USB به TTL CH340G) دارد.
اما، همچنان می توانید ماژول را با استفاده از برد آردوینو برنامه ریزی کنید. برای مرجع به نمودار مدار زیر نگاه کنید.
اگرچه ممکن است وسوسه انگیز به نظر برسد، ما معمولاً اتصال ماژول را مستقیماً به پایه 3.3 ولتی آردوینو توصیه نمی کنیم زیرا به جریان بیشتری نسبت به پین نیاز دارد. در عوض، آردوینو 5 ولت را به یک تنظیم کننده ولتاژ 3.3 ولت مانند LM1117/LD117 وصل کنید، سپس ماژول وای فای را از رگولاتور تغذیه کنید.
پایه های VCC و CH_PD ESP را به پایه 5 ولت آردوینو وصل نکنید. اتصال ماژول به برق 5 ولت می تواند به آن آسیب برساند.
تمام خازن ها 10uF و مقاومت 1K است.
نرم افزار مورد نیاز
ماژول ESP-01 معمولاً با پلتفرم آردوینو استفاده می شود. به این ترتیب، راه اندازی نرم افزار بسیار ساده است، به خصوص اگر با Arduino C آشنا هستید. با این حال، اگر با Raspberry آشنایی بیشتری دارید، پروژه های Raspberry Pi IoT زیادی وجود دارد که می توانید امتحان کنید.
اینها الزامات اساسی هستند:
- یک کارگزار یا سرور MQTT (مانند Mosquitto یا CloudMQTT).
- یک Arduino IDE با کتابخانه هسته ESP8266.
- کتابخانه PubSubClient برای آردوینو.
باید به خاطر داشته باشید که داشتن سرور MQTT خود به صورت محلی به شما انعطاف پذیری در پروژه های خود می دهد.
نصب کتابخانه های مورد نیاز
ابتدا Arduino IDE را دانلود و بر روی کامپیوتر خود نصب کنید. پس از نصب، Arduino IDE را باز کنید و به File > Preferences بروید.
در قسمت Additional Boards Manager URLs URL زیر را وارد کنید:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
برای بستن پنجره Preferences روی OK کلیک کنید.
سپس به Tools > Board > Boards Manager بروید.
سپس esp8266 را جستجو کنید و بسته برد esp8266 را نصب کنید—این شامل تمام کتابخانه های لازم برای ماژول ESP-01 است.
برای نصب کتابخانه PubSubClient، به Sketch > Include Library > Manage Libraries بروید.
PubSubClient را جستجو کنید و روی کتابخانه کلیک کنید تا آن را نصب کنید.
هنگامی که تمام کتابخانه های لازم را نصب کردید، می توانید برنامه نویسی ماژول ESP-01 را شروع کنید. نکته ای که باید به آن توجه کنید این است که می توانید از Wifi.h که در کتابخانه موجود است استفاده کنید یا کتابخانه ESPWifi.h را دانلود کنید و آن را در طرح خود قرار دهید.
ایجاد ارتباط بین ESP-01 و کارگزار MQTT
کارگزار MQTT سروری است که به عنوان یک واسطه بین مشتریان MQTT عمل می کند. این به مشتریان اجازه می دهد تا از طریق یک مدل انتشار-اشتراک، پیام هایی را برای یکدیگر ارسال و دریافت کنند.
برای اتصال ماژول ESP-01 خود به یک کارگزار MQTT، باید آدرس IP و شماره پورت کارگزار را در کد خود مشخص کنید. همچنین باید یک شناسه مشتری منحصر به فرد که ماژول ESP-01 شما را مشخص می کند به کارگزار ارائه دهید.
ابتدا کتابخانه های لازم را در بالای طرح خود قرار دهید
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
سپس جزئیات اتصال WiFi و MQTT را تعریف کنید.
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";
const char* mqtt_server = "YOUR_MQTT_SERVER";
فراموش نکنید که متغیرهایی را با جزئیات اتصال WiFi و MQTT خود جایگزین کنید.
پس از آن، یک مشتری WiFi ایجاد کنید و به شبکه WiFi محلی خود متصل شوید:
WiFiClient espClient;
void setup_wifi() {
delay(10);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
}
این تابع باید در تابع setup() sketch شما فراخوانی شود.
در مرحله بعد، باید یک کلاینت MQTT ایجاد کنید و به کارگزار MQTT خود متصل شوید:
PubSubClient client(espClient);
void reconnect() {
while (!client.connected()) {
if (client.connect("ESP01", mqtt_user, mqtt_password)) {
// Subscribe to a topic
client.subscribe("test/topic");
} else {
delay(5000);
}
}
}
هنگامی که به کارگزار MQTT خود متصل شدید، می توانید شروع به انتشار و اشتراک در موضوعات کنید.
انتشار داده ها از ESP-01 به کارگزار MQTT
اکنون که ماژول ESP01 خود را با موفقیت به کارگزار MQTT متصل کرده اید، بیایید ببینیم چگونه می توانید داده ها را از ESP-01 به کارگزار منتشر کنید.
برای انتشار داده ها، از تابع client.publish() برای انتشار پیامی به موضوع inTopic استفاده کنید.
client.publish("inTopic", "Hello from ESP-01");
این پیام “سلام از ESP-01” را به موضوع inTopic منتشر می کند.
همچنین می توانید داده های حسگر را از ESP-01 برای کارگزار منتشر کنید. به عنوان مثال، اگر یک سنسور دما به ESP-01 خود متصل شدهاید، میتوانید دادههای دما را مطابق شکل زیر برای کارگزار منتشر کنید.
float temperature = 25.5;
String temperatureString = String(temperature);
char temperatureChar[5];
temperatureString.toCharArray(temperatureChar, 5);
client.publish("Temp", temperatureChar);
این اطلاعات دما را در موضوع Temp منتشر می کند.
بسته به نیاز پروژه شما، داده ها را می توان در یک حلقه یا در فواصل زمانی منظم منتشر کرد. مطمئن شوید که کارگزار را با داده های زیادی پر نمی کنید و در یک بازه زمانی معقول منتشر می کنید.
اشتراک در موضوعات MQTT و دریافت داده ها در ESP-01
برای اشتراک در یک موضوع، از تابع ()client.subscribe استفاده کنید. برای مورد زیر، مشتری در موضوع outTopic مشترک می شود.
client.subscribe("outTopic");
هنگامی که در یک موضوع مشترک شدید، می توانید پیام های منتشر شده برای آن موضوع را با استفاده از تابع client.loop() در تابع loop() در طرح زیر دریافت کنید:
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
}
این به طور مداوم پیامهای جدید را بررسی میکند و پس از دریافت پیام جدید، عملکرد پاسخ به تماس را اجرا میکند.
برای رسیدگی به پیامهای دریافتی، یک تابع تماس مانند تصویر زیر تعریف کنید:
void callback(char* topic, byte* payload, unsigned int length) {
// Print the received message
Serial.print("Message received on topic: ");
Serial.print(topic);
Serial.print(". Message: ");
for (int i=0;i<length;i++) {
Serial.print((char)payload[i]);
}
Serial.println();
}
هنگامی که پیام جدیدی در مورد موضوع مشترک دریافت شده است، این تابع فراخوانی می شود. پیام دریافتی را در مانیتور سریال چاپ می کند.
استفاده از سطوح و ویژگی های امنیتی QoS (کیفیت خدمات).
یکی از مهمترین تکنیکهای مورد استفاده در رسیدگی به درخواستها، استفاده از سطوح QoS (کیفیت خدمات) برای پیامهای MQTT است. سطوح QoS نحوه برخورد کارگزار و مشترکین با پیام های شما را مشخص می کند. سه سطح QoS وجود دارد: 0، 1، و 2.
سطح QoS 0 کمترین اطمینان را دارد، زیرا پیام ها فقط یک بار ارسال می شوند و تضمینی برای تحویل به مشترک نیستند. سطح QoS 1 قابل اعتمادتر است، زیرا پیام ها حداقل یک بار ارسال می شوند و تضمین می شود که حداقل یک بار به مشترک تحویل داده شوند. سطح QoS 2 قابل اعتمادترین است، زیرا پیام ها دقیقاً یک بار ارسال می شوند و تضمین می شود که دقیقاً یک بار به مشترک تحویل داده شوند. نحوه ارتباط دستگاههای شما با سایر مسائل امنیتی رایج اینترنت اشیا (IoT) مطابقت دارد و اصلاحاتی که میخواهید از آنها مطلع باشید.
برای استفاده از سطوح QoS، می توانید سطح مورد نظر را هنگام انتشار پیام ها با استفاده از تابع ()client.publish مشخص کنید:
client.publish("topic", "Hello, world!", 1);
با این کار پیام Hello, World! به مبحث با QoS سطح 1.
یکی دیگر از تکنیک های پیشرفته استفاده از پیام های آخرین وصیت و عهد (LWT) است. پیامهای LWT پیامهایی هستند که وقتی مشتری به طور غیرمنتظرهای ارتباط خود را قطع میکند، توسط کارگزار ارسال میشود. ما معتقدیم که این برای شناسایی دستگاههای آفلاین یا برای راهاندازی اقدامات هنگام قطع ارتباط دستگاه مهم است.
برای استفاده از پیام های LWT، می توانید پیام LWT را هنگام اتصال به کارگزار با استفاده از تابع ()client.setWill مشخص کنید:
client.setWill("status", "offline", 1, true);
با این کار پیام LWT در موضوع وضعیت با QoS سطح 1 آفلاین و پرچم حفظ روی true تنظیم می شود.
برای پروژه IoT بعدی خود آماده شوید
ماژول ESP-01 یک راه حل مقرون به صرفه و فشرده برای پروژه های اینترنت اشیا است و استفاده از آن با MQTT می تواند پروژه شما را به سطح بالاتری برساند. اگرچه راه اندازی اولیه می تواند دلهره آور باشد، اما مزایای MQTT، مانند ارتباطات سبک و مقیاس پذیری بالا، آن را به یک سرمایه گذاری ارزشمند تبدیل می کند.