ارسال و دریافت دیتا با MQTT و Node_RED

سلام در این جلسه قصد داریم با استفاده از پروتکل MQTT و نرم افزار Node_RED از طریق برد NodeMCU دیتا ارسال و دریافت کرده و اون رو مشاهده کنیم.
برای درک بهتر این آموزش آموزش معرفی پروتکل MQTT را مطالعه کنید.
خب ما داخل این پروژه قصد داریم دیتا خاصی رو به تاپیک خاصی ارسال کنیم .
و دیتا خاصی رو از تاپیک خاصی دریافت کنیم.
برای اینکار اول به مبحث ارسال دیتا میپردازیم و یک پروژه باهاش انجام میدیم و بعد سراغ دریافت دیتا میریم.
داخل پروتکل MQTT ارسال دیتا همان publish میباشد .
برای اینکه بتونیم با برد NodeMCU و MQTT ارتباط برقرار کنیم لازم هستش کتابخانه PubSubClient.h رو به نرم افزار آردوینو اضافه کنیم برای اینکار به قسمت library manager میریم و کتابخانه PubSubClient رو سرچ کرده و بعد نصب میکنیم.
نکته : قبل از اینکه برنامه رو اجرا کنید سرور MQTT رو ران کنید .
ارسال دیتا :
تنظیمات و برنامه نویسی نرم افزار Node_RED:
بلوک های برنامه نویسی بلوکی ۴ADAIOT:
وارد پلتفرم برنامه نویسی بلوکی میشیم و بلوک های لازم که داخل شکل زیر قرار داده شده رو وارد میکنیم و بعد کد ساخته شده رو در نرم افزار آردوینو وارد میکنیم و بعد روی برد آپلود میکنیم.
کد ساخته شده توسط پلتفرم بلوکی ۴ADAIOT:
نام وایفای و رمز عبور و آدرس رور را مشخص کنید و بعد کد را روی برد آپلود کنید.
///////////////////////////////// // Generated with a lot of love// // with 4ADAIOT FOR ESP8266 // // Website: https://4adateam.com // ///////////////////////////////// #include <ESP8266WiFi.h> #include <PubSubClient.h> int i; WiFiClient espClient; PubSubClient client(espClient); void reconnectmqttserver() { while (!client.connected()) { Serial.print("Attempting MQTT connection..."); String clientId = "ESP8266Client-"; clientId += String(random(0xffff), HEX); if (client.connect(clientId.c_str())) { Serial.println("connected"); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); delay(5000); } } } char msgmqtt[50]; void callback(char* topic, byte* payload, unsigned int length) { String MQTT_DATA = ""; for (int i=0;i<length;i++) { MQTT_DATA += (char)payload[i];} } void setup() { i = 0; Serial.begin(9600); WiFi.disconnect(); delay(3000); Serial.println("START"); WiFi.begin("نام وایفای ","رمز عبور"); while ((!(WiFi.status() == WL_CONNECTED))){ delay(300); Serial.print(".."); } Serial.println("Connected"); Serial.println("Your IP is"); Serial.println((WiFi.localIP().toString())); client.setServer("آدرس سرور ", ۱۸۸۳); client.setCallback(callback); } void loop() { if (!client.connected()) { reconnectmqttserver(); } client.loop(); snprintf (msgmqtt, 50, "%d ",i); client.publish("test", msgmqtt); i = i + 2; delay(1000); }
داخل این کد هر ثانیه به متغیر i 2 شماره اضافه میشه و بعد ارسال میشه .
دریافت دیتا :
تنظیمات و برنامه نویسی نرم افزار Node_RED:
بلوک های پلتفرم برنامه نویسی بلوکی ۴ADAIOT :
کد ساخته شده توسط پلتفرم بلوکی ۴ADAIOT:
بعد از وارد کردن نام وایفای و رمز عبور و آدرس سرور و آپلود کردن برد به قسمت سریال مانیتور رفته دیتا دریافتی رو مشاهده کنید.
برنامه به این شکل هستش که دیتا دریافتی از تایپک مورد نظر رو داخل سریال مانیتور نمایش میده.
///////////////////////////////// // Generated with a lot of love// // with 4ADAIOT FOR ESP8266 // // Website: https://4adateam.com // ///////////////////////////////// #include <ESP8266WiFi.h> #include <PubSubClient.h> char* i; WiFiClient espClient; PubSubClient client(espClient); void reconnectmqttserver() { while (!client.connected()) { Serial.print("Attempting MQTT connection..."); String clientId = "ESP8266Client-"; clientId += String(random(0xffff), HEX); if (client.connect(clientId.c_str())) { Serial.println("connected"); client.subscribe("test"); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); delay(5000); } } } void callback(char* topic, byte* payload, unsigned int length) { String MQTT_DATA = ""; for (int i=0;i<length;i++) { MQTT_DATA += (char)payload[i];} Serial.print(MQTT_DATA); } void setup() { i = ""; Serial.begin(9600); WiFi.disconnect(); delay(3000); Serial.println("START"); WiFi.begin("نام وایفای","رمز عبور "); while ((!(WiFi.status() == WL_CONNECTED))){ delay(300); Serial.print(".."); } Serial.println("Connected"); Serial.println("Your IP is"); Serial.println((WiFi.localIP().toString())); client.setServer("آدرس سرور MQTT", 1883); client.setCallback(callback); } void loop() { if (!client.connected()) { reconnectmqttserver(); } client.loop(); }