آموزش Espآموزش ESP32آموزش اینترنت اشیاپروژه های Espپروژه های اینترنت اشیا

آموزش ESP RainMaker (پلتفرم کنترل آسان ESP32)

در این آموزش، نگاهی به ESP RainMaker می اندازیم. ESP RainMaker یک پلتفرم end-to-end برای تراشه های ESP32 از Expressif  است. این پلتفرم در واقع جانشین پلتفرم ESP Jumpstart از همان Exspressif است. ESP RainMaker به مشتریان امکان طراحی، ساخت و استقرار راهکارهای اینترنت اشیا را براساس رایانش ابری در سطح سازمانی و بدون دردسر مدیریت زیرساخت ها میدهد. ESP RainMaker متشکل از device agent SDK، اپلیکیشن ابری شفاف و برنامه های تلفن همراه اندروید و iOS است.

این امر به توسعه دهندگان اجازه میدهد که بدون نوشتن حتی یک خط کد در فضای ابری یا اپلیکیشن تلفن همراه، فریمور را نوشته و به صورت آنی و از طریق برنامه تلفن همراه یا دستیارهای صوتی ارتباط برقرار کنند. سازندگان میتوانند بدون نگرانی درباره اپلیکیشن یا ارتباط با فضای ابری و بقیه زیرساخت ها، تنها بر توسعه فریمور خود تمرکز کنند.

ESP RainMaker به دیگر سرویس های IoT مانند اپلیکیشن Blynk، Ubidots، Thingspeak، IFTTT، فضای ابری Arduino IoT و غیره شباهت دارد. اما این پلتفرم امکانات بیشتری از جمله برنامه های سازگار تلفن همراه، اتصال رایگان به الکسا و دستیار گوگل، اشتراک گذاری Node، تامین و برقراری ارتباط وایفای با QR code و امکانات بیشتری را ارائه میدهد. ویژگی دیگر این پلتفرم IoT، رایگان بودن آن برای کاربران و همچنین ارائه خدمات عالی است. اجزا اولیه این راهکار عبارتند از:

  1. Claiming service : دریافت اطلاعات ارتباط با فضای ابر
  2. Agent باران ساز: مانند RainMaker repo برای توسعه فریمور
  3. فضای ابری باران ساز : بک اند، اتصال از راه دور
  4. رابط خط فرمان/ برنامه تلفن همراه باران ساز : ابزارهای کلاینت برای دسترسی از راه دور

امکانات و مزایای ESP RainMaker

چند مورد از امکانات و مزایای پلتفرم ESP RainMaker در لیست زیر آورده شده اند:

  1. به دلیل کلید در دست (turn-key) بودن راهکار، سرمایه گذاری تحقیق و توسعه حداقل است.
  2. گزینه های upscale امن و پایدار
  3. زمان توسعه کوتاه شده
  4. راهکار ابری بدون ریسک و بدون نیاز به نگهداری
  5. مدل پرداخت Pay-as-you-use ( کلاینت به ازای مقداری که از یک محصول یا خدمات استفاده کرده، پول میپردازد.) براساس معماری بدون سرور AWS
  6. راهکار ابری خصوصی برای امنیت بیشتر و حریم خصوصی بهتر
  7. اکثر سرویس های اصلی مانند الکسا، دستیار گوگل، هوم کیت اپل و Matter را پشتیبانی میکند.
  8. اشتراک گذاری Node : به کاربران اجازه میدهد تا کنترل دستگاه خود را روی اینترنت به اشتراک بگذارند.
  9. تنظیمات Time zone : تایم زون هر دستگاه یا Node میتواند به جای هارد-کدینگ یا کدنویسی سخت، از طریق اپلیکیشن تلفن همراه تغییر کند.
  10. پشتیبان آردوینو : ESP RainMaker، IDE آردوینو را پشتیبانی کرده که برای جامعه DIY یک خبر عالی به شمار می آید.
  11. گروه بندی Node ها: این ویژگی به کاربران اجازه میدهد تا node ها را گروه بندی کرده و مدیریت چند دستگاه با هم را آسان تر انجام دهند.
  12. FaaS یا تابع به عنوان سرویس: به علاوه خدمات نام برده، معماری بدون سرور AWS، یک تابع به عنوان سرویس یا FaaS را هم ارائه میدهد. توسعه دهندگان به کمک آن میتوانند نمونه کدی که بتواند روی داده کار کرده و با سرویس های دردسترس ارتباط برقرار کند را بنویسند. توسعه دهندگان میتوانند با استفاده از زبان های برنامه نویسی که با آن ها آشنایی دارند ( مانند پایتون، js و GO) و با SDKها با سرویس ها ارتباط برقرار کنند.
  13. FaaS بر اساس تعداد اجراها و زمان و حافظه مصرف شده در زمان اجرا (runtime) شارژ میشود.

جریان کاری ESP RainMaker

بیایید به جریان کار و چگونگی عملکرد باران ساز نگاهی بیندازیم.

  1. به محض اینکه ESP32 با فریمور ESP RainMaker برنامه نویسی شد، ESP32 یک QR code تولید کرده و آن را در سریال مانیتور نشان میدهد. این کد میتواند با اپلیکیشن ESP RainMaker اسکن شود.
  2. هنگامی که QR code اسکن شد، اپلیکیشن ارتباط BLE را با ESP32 SoC برقرار میکند.
  3. پس از اتصال به ESP32 میتوانیم با فراهم کردن مشخصات و اطلاعات وایفای، مراحل لازم برای مدیریت و دسترسی به داده را انجام دهیم.
  4. ESP32 از طریق وایفای با ESP RainMaker ارتباط برقرار کرده و داده هایی را که خودمان به منظور تبادل برنامه نویسی کرده ایم، مبادله میکند.
  5. به محض اینکه ESP32 به ابر متصل شد، از طریق سیستم ابری یا اپلیکیشن تلفن همراه میتوانیم این را ارتباط برقرار کنیم.

مدار اتصال برای ESP RainMaker

ما در گذشته پروژه های جالب بسیاری را با استفاده از ESP32 ساخته ایم. حال در این مطلب، ابتدا با مراحل اولیه که اتصال LED به ESP32 است، شروع میکنیم. اما این بار در کنار ESP32 از ESP RainMaker هم استفاده میکنیم.

برای این کار، LED را از طریق یک مقاومت که نقش محدودسازی جریان را دارد، به پایه GPIO16 میکروکنترلر مطابق شکل زیر وصل میکنیم و برای کلید، از همان کلید بوت روی بورد میکروکنترلر استفاده خواهیم کرد.

مدار اتصال برای ESP RainMaker

در اینجا اتصالات مدار واقعی را میبینیم.

مدار اتصال برای ESP RainMaker

سوالات متداول

1- ESP RainMaker چیست؟

ESP RainMaker یک پلتفرم است که به توسعه دهندگان اجازه میدهد بدون دردسر مدیریت زیرساخت ها، دستگاه هایی بسازند که به ESP32 SoC از Exspressif متصلند. این پلتفرم یک دستگاه SDK، اپلیکیشن های سازگار با تلفن همراه، میان افزار شفاف ابری و خدمات هاست را برای کاهش پیچیدگی های توسعه دستگاه فراهم میکند.

2- هاست زیرساخت ابر ESP RainMaker کجاست؟

ESP RainMaker از سرویس های وب آمازون (AWS) استفاده میکند.

3- آیا ESP RainMaker رایگان است؟

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

ESP RainMaker همواره برای سازندگان، مشتاقان و معلمان رایگان خواهد ماند. اما آن ها سرویس های پولی بدون محدودیت های سرویس عمومی را هم به کاربران ارائه میدهند.

استفاده از ESP RainMaker با IDE آردوینو

حال بیایید ببینیم که چگونه میتوان ESP RainMaker32 را در IDE استفاده کرد. در ابتدا باید نسخه 2.0 بورد ESP32 را نصب کنیم. اگر قبلا این نسخه را نصب کرده اید، میتوانید از این مراحل بگذرید. اما اگر همچنان از نسخه قدیمی استفاده میکنید، لطفا آن را به آخرین نسخه به روز رسانی کنید.

اگر بورد ESP32 را نصب نکرده اید و یا board manager نسخه 2.0 آن را نمایش نمیدهد، با استفاده از لینک json زیر، آن را نصب کنید.

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

برای نصب بورد، همانطور که در تصویر نشان داده شده، لینک بالا را در قسمت additional board manager URLs از منو preferences  در IDE آردوینو اضافه کنید.

استفاده از ESP RainMaker با IDE آردوینو

سپس در board manager، ESP32 را جست و جو کرده و آخرین نسخه را نصب کنید.

در IDE، بورد را به عنوان ESP32 Dev module، اندازه حافظه فلش را براساس بورد و partition scheme را به عنوان باران ساز انتخاب کنید. پس از اینکه این مراحل را انجام دادید، نمونه کد موجود در انتهای این مطلب را باز کرده، آن را کامپایل و سپس روی بورد توسعه ESP32 آپلود کنید. اپلیکیشن ESP RainMaker را دانلود کنید. QR code نشان داده شده در سریال مانیتور را با این اپلیکیشن اسکن کنید.

آموزش RainMaker

اگر QR code مانند چیزی که در بالا نشان داده شده نیست، URL موجود در قسمت پایین سریال مانیتور را کپی کرده و آن را در هر مرورگری که خواستید، پیست کنید. مرورگر QR code درست را  نشان خواهد داد و میتوانید آن را با استفاده از اپلیکیشن اسکن کنید.

QR Code کنترل Rain Maker ESP32

اپلیکیشن را باز کرده و در آن  log in کنید. اگر در گذشته هیچ دستگاهی اضافه نکرده باشید، صفحه اصلی به همراه کلید add device به شما نشان داده میشود.روی آن کلیک کرده و QR code  را اسکن کنید.

به محض اینکه اپلیکیشن از طریق BLE (بلوتوث کم انرژی یا کم مصرف) به ESP32 متصل شد، وارد صفحه ای خواهید شد تا اتصال وایفای خود را انتخاب کنید. اگر هیچ شبکه وایفای ای در اپلیکیشن نشان داده نشد، میتوانید مشخصات آن را با کلیک بر گزینه Join Other Network و به صورت دستی وارد کنید.

آموزش ESP32

پس از این مراحل، ESP به صورت اتوماتیک به شبکه وایفای متصل شده و یک دستگاه جدید که Switch نام دارد، به صفحه اصلی اپلیکیشن اضافه میشود. از طریق آن میتوانید LED متصل به میکروکنترلر را به کمک دکمه روی بورد کنترل کنید.

تنظیمات RainMaker App

کد آردوینو برای استفاده از ESP RainMaker

بیایید نگاهی به کد بیندازیم.

#include "RMaker.h"
#include "WiFi.h"
#include "WiFiProv.h"
#define DEFAULT_POWER_MODE true
const char *service_name = "RainMaker_BLE";
const char *pop = "12345678";
//GPIO for virtual device
static int gpio_0 = 0;
static int gpio_switch = 16;
/* Variable for reading pin status*/
bool switch_state = true;
//The framework provides some standard device types like a switch, lightbulb, fan, temperature sensor.
static Switch my_switch;

در آغاز، تمام کتابخانه های لازم از جمله کتابخانه وایفای و باران ساز را فراخوانی کردیم. سپس مشخصات BLE را به کمک پوینترهای service_name و pop مشخص کردیم. از این پوینترها در آماده سازی و پروویژنینگ استفاده خواهیم کرد. سپس پایه های GPIO استفاده شده برای کلید و LED و همچنین یک متغیر بولین به نام switch_state برای ذخیره وضعیت کلیدها تعریف کردیم.

void sysProvEvent(arduino_event_t *sys_event) {
    switch (sys_event->event_id) {
        case ARDUINO_EVENT_PROV_START:
#if CONFIG_IDF_TARGET_ESP32S2
        Serial.printf("\nProvisioning Started with name \"%s\" and PoP \"%s\" on SoftAP\n", service_name, pop);
        printQR(service_name, pop, "softap");
#else
        Serial.printf("\nProvisioning Started with name \"%s\" and PoP \"%s\" on BLE\n", service_name, pop);
        printQR(service_name, pop, "ble");
#endif
        break;
        default:;
    }
}

تابع sysProEvent برای ایونت های تامین و آماده سازی سیستم است. این تابع مشخصات وایفای را دریافت کرده و ESP32 را به روتر وصل میکند.

void write_callback(Device *device, Param *param, const param_val_t val, void *priv_data, write_ctx_t *ctx) {

    const char *device_name = device->getDeviceName();

    const char *param_name = param->getParamName();

    if(strcmp(param_name, "Power") == 0) {

        Serial.printf("Received value = %s for %s - %s\n", val.val.b? "true" : "false", device_name, param_name);

        switch_state = val.val.b;

        (switch_state == false) ? digitalWrite(gpio_switch, LOW) : digitalWrite(gpio_switch, HIGH);

        param->updateAndReport(val);

    }

}

تابع callback دستگاهی که داده را ارسال کرده، بررسی میکند و سپس پارامتر دستگاه را متقابلا تغییر میدهد. این تابع، برای دستگاه LED استفاده میشود. اگر دستگاه “LED” بوده و پارامتر آن هم “Power” باشد، آنگاه این تابع LOW یا HIGH بودن وضعیت پایه ای که به LED متصل است را بررسی میکند. اگر HIGH باشد، LED روشن شده و اگر LOW باشد، LED خاموش میشود.

{
    Serial.begin(115200);
    pinMode(gpio_0, INPUT);
    pinMode(gpio_switch, OUTPUT);
    digitalWrite(gpio_switch, DEFAULT_POWER_MODE);
    Node my_node;
    my_node = RMaker.initNode("ESP RainMaker Node");
    //Initialize switch device
    my_switch = Switch("Switch", &gpio_switch);
    //Standard switch device
    my_switch.addCb(write_callback);
    //Add switch device to the node
    my_node.addDevice(my_switch);
    //This is optional
    RMaker.enableOTA(OTA_USING_PARAMS);
    //If you want to enable scheduling, set the time zone for your region using setTimeZone().
    //The list of available values are provided here https://rainmaker.espressif.com/docs/time-service.html
    // RMaker.setTimeZone("Asia/Shanghai");
    // Alternatively, enable the Timezone service and let the phone apps set the appropriate timezone
    RMaker.enableTZService();
    RMaker.enableSchedule();
    RMaker.start();
    WiFi.onEvent(sysProvEvent);
#if CONFIG_IDF_TARGET_ESP32S2
    WiFiProv.beginProvision(WIFI_PROV_SCHEME_SOFTAP, WIFI_PROV_SCHEME_HANDLER_NONE, WIFI_PROV_SECURITY_1, pop, service_name);
#else
    WiFiProv.beginProvision(WIFI_PROV_SCHEME_BLE, WIFI_PROV_SCHEME_HANDLER_FREE_BTDM, WIFI_PROV_SECURITY_1, pop, service_name);
#endif
}

درون تابع setup، ارتباط سریال را با نرخ باد 115200 آغاز میکنیم. سپس پایه ریست را به عنوان ورودی و پایه LED را به عنوان خروجی پیکربندی میکنیم. این کار را با استفاده از تابع ()pinMode انجام میدهیم. اولین آرگومان این تابع، پایه GPIO و دومین آرگومان آن، خروجی یا ورودی بودن پایه را مشخص میکند.

به علاوه، وضعیت اولیه پایه متصل به LED را روی LOW تنظیم میکنیم. سپس یک Node یا گره اتصال به نام ESP RainMaker Node تعریف میکنیم.

در ادامه، دستگاه کلید و یک تابع callback  برای آن تعریف کرده و سرویس Time zone را فعال میکنیم.

با استفاده از تابع Rmaker.start باران ساز را آغاز کرده و سپس تابع sysProEvent را برای تامین و آماده سازی فراخوانی کردیم.

void loop() {
    if(digitalRead(gpio_0) == LOW) { //Push button pressed
        // Key debounce handling
        delay(100);
        int startTime = millis();
        while(digitalRead(gpio_0) == LOW) delay(50);
        int endTime = millis();
        if ((endTime - startTime) > 100) {
          // Toggle device state
          switch_state = !switch_state;
          Serial.printf("Toggle State to %s.\n", switch_state ? "true" : "false");
          my_switch.updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, switch_state);
          (switch_state == false) ? digitalWrite(gpio_switch, LOW) : digitalWrite(gpio_switch, HIGH);
      }
    }
    delay(100);
}

در تابع loop، وضعیت پایه GPIO0 را زیرنظر گرفته و متناسب با آن، پارامتر switch_state را به روز میکنیم. همچنین برای اشکال زدایی و دیباگ کردن، تغییرات وضعیت پایه را در سریال مانیتور چاپ میکنیم. نتیجه را در زیر مشاهده میکنید.

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

اگر باران ساز پس از آپلود کد، نتوانست endpoint را مشخص کند،

راه حل : اطمینان حاصل کنید که partition scheme را با گزینه OTA انتخاب کرده اید. ترجیحا با گزینه خود باران ساز.

اگر خطای Claiming failed را دریافت میکنید،

راه حل: پیش از آپلود کد، تمام محتوای حافظه فلش را پاک کنید.

اگر ESP32 نتوانست به طور مداوم ریبوت ها را آغاز کند،

راه حل: حافظه فلش متناسب با بورد و partition scheme را با گزینه OTA انتخاب کنید.  ترجیحا با گزینه خود باران ساز.

فایل های پشتیبان

 

4 (1 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *