مستندات ویرالینک

کنترل اینترنتی ESP8266 GPIO بر روی MQTT با ویرالینک

ویرالینک یک پلتفرم اینترنت اشیا سمت سرور است که به شما امکان نظارت و کنترل دستگاه‌های IoT را می‌دهد. هم برای استفاده شخصی و هم برای استفاده تجاری می توانید استفاده کنید. اگر این اولین تجربه شما با این پلتفرم است، توصیه می‌کنیم صفحه «ویرالینک چیست» و شروع به کار با ویرالینک را مرور کنید.

در این مثال نحوه کنترل GPIO هر دستگاه مبتنی بر ESP8266 با استفاده از رابط وب ویرالینک را نشان می‌دهیم. هدف این آمورش نشان دادن قابلیت‌های RPC ویرالینک و نقطه شروعی برای پروژه‌های اینترنت اشیا پیچیده‌تر است. صرفا جهت سادگی از LED موجود در Wemos D1 mini که به GPIO2 وصل می باشد استفاده می کنیم ولی شما با تغییر در کد‌ها میتوانید برای انواع GPIO‌ها استفاده کنید.

برنامه‌ای که روی ESP8266 اجرا می‌شود با استفاده از Arduino SDK نوشته شده‌است که کاملاً ساده و قابل درک است. ESP8266 راه‌حل کامل و مستقل شبکه Wi-Fi را همراه با قدرت پردازشی عالی ارائه می‌دهد. در کتابخانه ویرالینک ESP8266 با استفاده از کتابخانه PubSubClient برای آردوینو، داده‌ها را از طریق پروتکل MQTT به سرور ویرالینک منتقل می‌کند. وضعیت فعلی GPIO و ویجت کنترل GPIO در داشبورد مخصوص قابل مشاهده‌ است.

لیست سخت افزارهای مورد نیاز #

  1. ماژول ESP8266

ما در این آموزش برد توسعه Wemos d1 mini را جهت راحتی کار انتخاب کردیم ولی شما میتونید از هر بردی که مبتنی بر ESP8266 باشد انتخاب کنید.

wemos-d1-mini-pinout

2. کابل Micro USB

ثبت نام در ویرالینک #

برای ثبت نام به دکمه ورود در گوشه سمت چپ بالا را بزنید.

زبان ویرالینک با زبان پیش فرض مرورگر شما تنظیم می شود و در صورت نیاز به تغییر زبان (فارسی/انگلیسی) به پروفایل خود در گوشه سمت راست بالا مراجعه نمایید. آموزش ها بر اساس زبان فارسی خواهد بود.

تعریف دستگاه #

به بخش “دستگاه ها” بروید. روی دکمه “+” کلیک کنید و دستگاهی با نام “ESP8266 Demo Device” ایجاد کنید.

افزودن دستگاه به پلتفرم اینترنت اشیا ویرالینک

پس از ایجاد دستگاه، جزئیات آن را باز کنید و توکن دسترسی تولید شده به صورت خودکار را از قسمت «کپی توکن دسترسی» کپی کنید. لطفاً این رمز دستگاه را ذخیره کنید. بعداً به عنوان $ACCESS_TOKEN استفاده خواهد شد.

جزئیات دستگاه در پلتفرم اینترنت اشیا ویرالینک

روی «شناسه دستگاه» در جزئیات دستگاه کلیک کنید تا شناسه دستگاه خود را در کلیپ بورد کپی کنید. شناسه دستگاه خود را در جایی ذخیره کنید، این مقدار در مراحل بعدی استفاده خواهد شد.

ایجاد داشبورد #

فایل حاوی داشبورد آزمایشی را دانلود کنید.

فایل را باز کرده و مقدار {DEVICE_ID} را به شناسه دستگاه خود تغییر دهید.

سپس به بخش “داشبورد ها” بروید. روی دکمه “+” کلیک کنید و درون ریزی داشبورد را انتخاب و در نهایت فایل نهایی را آپلود کنید.

برای آشنایی بیشتر به قسمت شروع به کار با ویرالینک مراجعه نمایید.

برنامه نویسی ESP8266 #

آماده‌سازی Arduino IDE برای ESP8266 #

برای شروع برنامه نویسی دستگاه ESP8266 به نصب آردوینو IDE و تمامی نرم افزارهای مرتبط نیاز دارید.

Arduino IDE را دانلود و نصب کنید.

پس از راه اندازی آردوینو، Prefrences را از منوی ‘file’ باز کنید.

آدرس زیر را به فیلد Additional board managers URL اضافه نمایید.

http://arduino.esp8266.com/stable/package_esp8266com_index.json

با دکمه OK صفحه را ببندید.

اکنون می توانیم با استفاده از board manager، برد ESP8266 را اضافه کنیم.

افزودن esp8266 به آردوینو

در ابزارهای منو روی گزینه منو Board:… کلیک کنید. در آنجا اولین گزینه “Board Manager” را خواهید یافت.

3 حرف ESP را در نوار جستجو تایپ کنید. ” esp8266 by ESP8266 Community ” را پیدا کرده و روی آن کلیک کنید . بر روی install کلیک کنید و برای دانلود برد صبر کنید.

نصب برد esp8266 در آردوینو

توجه داشته باشید که این آموزش با “ esp8266 by ESP8266 Community ” نسخه 3.0.2 تست شده است.

در منوی Tools Board چند برد جدید به زیرمجموعه ESP8266 Boards اضافه شده است.

“LOLIN(Wemos) D1 R2 & mini” یا هر بردی که استفاده می کنید را انتخاب کنید.

در منوی Tools، پورت مربوطه را انتخاب کنید. نمایشگر سریال را باز کنید (با فشار دادن CTRL-Shift-M یا از منوی Tools). شبیه سازی کلید را روی “Both NL & CR” و سرعت را روی 115200 baud تنظیم کنید. این را می توان در پایین صفحه ترمینال تنظیم کرد.

کتابخانه‌های آردوینو را نصب کنید #

Arduino IDE را باز کنید و به Sketch -> Include Library -> Manage Libraries بروید. کتابخانه زیر را پیدا و نصب کنید:

ViraLink-MQTT-Client

برنامه را آماده و آپلود کنید #

مثال mqtt_working_with_rpc که در پوشه File->Examples->ViraLink-MQTT-Client هست را باز کنید.

#include <Arduino.h>

// enable debug on SerialMon
#define VIRALINK_DEBUG 
// if you need DEBUG SerialMon should be defined
#define SerialMon Serial

#define WIFI_SSID "xxxxxxx"
#define WIFI_PASSWORD "xxxxxxx"

#define VIRALINK_TOKEN "xxxxxxx"
#define VIRALINK_MQTT_URL "console.viralink.io"
#define VIRALINK_MQTT_PORT 1883

#include "viralink.h"

#include "ESP8266WiFi.h"

MQTTController mqttController;
WiFiClient client;

bool on_message(const String &topic, DynamicJsonDocument json){

  if (json.containsKey("method")) {
    String methodName = json["method"];
    Serial.print("MethodName: ");
    Serial.println(methodName);

    if (json.containsKey("params")) {
      String params = json["params"];
      Serial.print("Params: ");
      Serial.println(params);
    }

    if (methodName.equals("setLEDStatus"))
      digitalWrite(LED_BUILTIN, json["params"]["enabled"]);

    if (methodName.equals("getLEDStatus")) {
      String responseTopic = String(topic);
      responseTopic.replace("request", "response");
      DynamicJsonDocument responsePayload(100);
      responsePayload[String(LED_BUILTIN)] = 
      digitalRead(LED_BUILTIN) ? "ON" : "OFF";
      mqttController.addToPublishQueue(responseTopic,
              responsePayload.as<String>());
    }

  }
  return true;
}

void setup() {

  Serial.begin(115200);

  pinMode(LED_BUILTIN, OUTPUT);

  WiFi.mode(WIFI_STA);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);

  Serial.println();
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(50);
  }

  Serial.println("Connected to WiFi!");
  Serial.println(WiFi.localIP());

  mqttController.init();
  mqttController.connect(client, "esp", VIRALINK_TOKEN, ""
            , VIRALINK_MQTT_URL, VIRALINK_MQTT_PORT,
            on_message, nullptr, []() {
        Serial.println("Connected To Platform");
      });

}

void loop() {
  mqttController.loop();
}

مقادیر زیر را تعیین کنید.

نام وای فای : WIFI_SSID

رمز وای فای :‌WIFI_PASSWORD

توکن دسترسی دستگاه : VIRALINK_TOKEN

ثابت LED_BUILTIN همان GPIO2 در Wemos D1 mini می‌باشد ولی ممکن است در برد‌های دیگر به GPIO دیگری اختصاص یابد.

با تغییر ثابت LED_BUILTIN در قسمت زیر به متغیر می‌توانید بازه وسیعی از GPIO ها را کنترل نمایید.

digitalWrite(LED_BUILTIN, json["params"]["enabled"]);

نسخه متغییر با محتوای RPC:

digitalWrite(json["params"]["pin"], json["params"]["enabled"]);

Wemos D1 mini را به رایانه شخصی متصل کنید و پورت مربوطه را در Arduino IDE انتخاب کنید. با استفاده از دکمه “Upload” طرح خود را کامپایل و در دستگاه آپلود کنید.

پس از آپلود و شروع برنامه، سعی می‌کند با استفاده از کلاینت mqtt به ویرالینک متصل شود منتظر دستورات باشد.

پس از ورود به سیستم، صفحه داشبوردها->ESP8266 Demo Dashboard را باز کنید. باید داشبورد نمایشی با کنترل GPIO دستگاه خود را مشاهده کنید. اکنون می توانید وضعیت GPIO را با استفاده از سوییچ تغییر دهید. در نتیجه شاهد تغییر وضعیت led در دستگاه و سوییچ در داشبورد خواهید بود.

در زیر اسکرین شات “ESP8266 GPIO Dashboard” آمده است.

داشبورد اینترنت اشیا ویرالینک

راهنماهای مربوط به ویژگی‌های اصلی ویرالینک را کاوش کنید: