img

برنامه نویسی QT برای HTTP REST Clints

/
/
/
این مقاله به بحث، پیرامون پشتیبانی QT برای وصل شدن به بسترهای اینترنت اشیاء (IoT)، مانند ThingSpeak به وسیله ی API های HTTP REST می پردازد. تمرکز این مقاله همچنین بر روی کار کردن با داده JSON، به لحاظ کدبندی، تجزیه، کدبندی URL، تشکیل رشته های پرسمان و غیره، می باشد.
 
QT یک چارچوب توسعه ی میان بستری است، که برای پدید آوردن امکاناتی زیبا برای GUI و فراهم کردن API قوی برای پشتیبانی از ارتباطات وب ، نقطه چینی گراف، تبادل داده، تجسم سه بعدی، کاربردهای چند رسانه ای، ردیابی، رابط سازی حسگری و غیره می باشد. برنامه های Qt می توانند برای انواع بسترهای رایانه های شخصی مثل linux، Mac OS و Windows، و برای بسترهای نهفته ای مثل Raspbery Pi و QNX، و همچنین برای بسترهای همراه مثل Android، iOS، و Windows mobile ساخته شوند.
این مقاله،  پشتیبانی QT برای وصل شدن به بسترهای اینترنت اشیاء مثل ThingSpeak توسط HTTP REST API‌ها را بررسی کرده، و همچنین بر روی کارکردن با داده های JSON به لحاظ کدبندی و تجزیه، کدبندی URL، و ایجاد رشته های پرسمان و غیره تمرکز دارد. فرض بر آن است که خواننده آشنایی مقدماتی با QT و عملیات REST با پشتیبانی HTTP را داشته باشد. اگر شما در محیط QT تازه وارد هستید، به مقالاتی که قبلا نسخه های پیشین پیرامون OSFY منتشر شده است مراجعه کنید، و سپس این مقاله را مطالعه کنید.
 
درباره HTTP REST و ThingSpeak
ThingSpeak  یک بستر متن باز برای ساخت برنامه های  اینترنت اشیاء می باشد، که از اتصال به وسیله ی API های HTTP REST پشتیبانی می کند. کاربر می تواند با استفاده از متد POST  به همراه یک درخواست از اطلاعات اصلی (payload)، داده را ارسال کند، و یا از متد GET به همراه یک رشته پرسمان استفاده کند. و داده‌ها را نیز می تواند، با فرمت های JSON یا XML به وسیله ی متد GET بازپس بگیرد. به تازگی، پشتیبانی برای ارسال داده با MQTT Publish نیز افزوده گردیده است. ThingSpeak از پشتیبانی یکپارچه خوبی برای MATLAB از Mathworks برخوردار است، که به آن برای ارائه تحلیل بهتر و تجسم داده کمک می کند. این ابزار برای چندین زبان SDK هایی را ارائه می دهد که به منظور ایجاد امکان اتصال، یا اجازه دادن به کاربرانی که می خواهند  برای متصل شدن ازکلاینت(کارخواه)  زبان مورد علاقه خود استفاده کنند، ساخته شده اند. در ThingSpeak، داده به صورت کانال ذخیره می شود، و هر کانال با یک ID، اسم، توصیف و  field های مرتبط به همراه چندین tag، مکان جغرافیایی و غیره مرتبط می شود.  برای درستی آزمایی بهتر و آسان تر، کلیدهای API از یک کانال به خصوص  می توانند درون یک رشته ی پرسمان نهاده شوند یا داده‌ها برای درستی آزمایی POST شوند. HTTP های امن (https) بهتر هستند، چون از دسترسی غیرمجاز کلیدهای API توسط جاسوسان جلوگیری می کنند. یک کانال، هم چنین می تواند بعدا به وسیله تغییر در تنظیمات به صورت عمومی درآید، که در هر صورت هیچ کلید خواندنی برای دیدن داده نیاز نیست.
یک کاربر می تواند به ThingSpeak با استفاده از حساب Mathworks وارد شود، که رایگان بوده و ساخت هر تعداد از کانال‌ها و ارسال حداکثری فید (feed) در آن مجاز می باشد – تنها محدودیت بر روی به روزرسانی کانال‌ها وقفه ای ۱۵ ثانیه می باشد. هنگامی که یک کانال با توصیفی مناسب، field هایی در خور و فرا اطلاعات ها(meta information) ساخته می شود، شما می توانید کلیدهای API خواندنی و نوشتنی را در زیر تنظیمات کانال تشخیص داده و کلید فرا عملیات (meta operations) را در قسمت profile بیابید.
اکنون اجازه دهید تا نگاهی به  چگونگی کارکرد کارخواه (client) REST  برای اتصال با  ThingSpeakداشته باشیم.
 
اتصال Qt HTTP
به منظور برقراری ارتباط با هر سرور شبکه ای به وسیله ی پروتکل HTTP، Qt کلاس QNetworkAccessManager را ارائه می دهدف که متد های ناهماهنگی مثل get, post, put و deleteResource را دارد که انواع عملیات REST را انجام می دهند. این متدها شیء QNetworkRequest را به عنوان یک  argument می گیرند، و همین طور آن را برای درخواست payload(داده ی اصلی)   در قالب QByteArray ، برای POST و عملیات PUT نیز به عنوان argument استفاده می کنند.
QNetworkRequest عمدتا یک URL در قالب یک شیء QUrl می شود، که پروتکل، اسم میزبان، پورت، مسیر، رشته ی پرسمان(Query string)، و غیره می شود. کلاس QUrlQuery می تواند برای ایجاد یک QueryString به طور موثری استفاده شود. این متدها پاسخ را در قالب یک QNetworkReply باز می گردانند، که بایستی با جزئیات نابود گردد که این امر با متد deleteLater ، در شیار متصل به سیگنال(finished) تمام شده ی QNetworkAccessManager انجام می گیرد.
تصور کنید که یک کانال با سه شاخه (field)، یعنی، دما، رطوبت و فشار وجود دارد. فرض می کنیم که کلید های API و اعداد کانال به صورت زیر مقدار دهی اولیه شده اند:
QString RDKey = “xxxxxxxxxxxxxxx”;
QString RDKey = “xxxxxxxxxxxxxxx”;
QString RDKey = “xxxxxxxxxxxxxxx”;
QString RDKey = “xxxxxxx”;
 
برای ارسال یک feed، ما بایستی متد POST را به ترتیب مراحل زیر با
http://api.thingspeak.com/update.json
 
و داده JSON ،که به عنوان داده ی اصلی به کار برده شده است، اجرا کنیم:
{
      “api_key”:”xxxxxxxxxxxx  xxxxxxxxxxx”,
      “field1”:”۲۵”,
      “field2”:”۷۲”,
      “field3”:”۹۰۰”
}
 
مرحله ی اول: ابتدا بایستی داده را برای POST در قالب JSON آماده کنیم، با فرض اینکه tval، hval و pval به ترتیب دما، و رطوبت و فشار را در قالب عدد طبیعی(integer) نمایندگی می کنند.
 
QVariantMap  feed;
feed.insert(“api_key”, WRKey);
feed.insert(“field1”, QVariant(tval).toString());
feed.insert(“field2”, QVariant(hval).toString());
feed.insert(“field3”, Qvariant(pval).toString());
QByteArray 
 
منابع
[۱]  doc.qt.io
[۲]   in.mathworks.com/help/thingspeak/
[۳]   github.com/rajeshsola/qt-examples
   Please refer to the following articles to get started with Qt:
[۴]   http://opensourceforu.com/2015/03/qt5-let%c2%92s-
learn-some-theory/
[۵]   http://opensourceforu.com/2015/03/qt5-console-
applications-and-networking/
[۶]   http://opensourceforu.com/2012/01/developing-
applications-qt-part-1/
[۷]   http://opensourceforu.com/2012/02/developing-
applications-qt-part-2/
[۸]   http://opensourceforu.com/2012/03/developing-apps-
qt-part-3/
[۹]   http://opensourceforu.com/ 2012/05/developing-apps-
qt-part-4/  

نظر بدهید

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

It is main inner container footer text