آردوینو آردوینو Arduino Uno

استفاده از JSON در آردوینو Arduino IDE

json-in-arduino-ide-digispark
نوشته شده توسط نیلوفر مهرنیا

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


ساختار JSON


JSON مخفف واژگان JavaScript Object Notation یک استاندارد متنی، خوانا، سبک و باز برای انتقال داده است. نمونه ساختار JSON به‌صورت زیر است:

{

"key1":value1,

...,

"keyn":valuen

}

نوع مقادیر در این ساختار می‌تواند String، integer، Real، boolean، Null و object باشد.


کتابخانه ArduinoJSON


برای استفاده از ساختار JSON در Arduino IDE باید کتابخانه ArduinoJSON را نصب کنید. اگر با نحوه نصب کتابخانه آشنا نیستید آموزش نصب کتابخانه در نرم‌افزار آردوینو Arduino IDE را مطالعه کنید. حواستان باشد نسخه ۶ به بعدازاین کتابخانه را نصب کنید زیرا نسبت به نسخه‌های قبلی تغییرات اساسی دارد و نسخه ۵ دیگر ساپورت نمی‌شود.


معرفی کتابخانه json در آردوینو


کتابخانه مورد استفاده در این آموزش Arduinojson می‌باشد.

#include <ArduinoJson.h>

 

بسته به کاربرد می‌توان از نوع داینامیک یا استاتیک استفاده کرد:

DynamicJsonDocument doc(1024);

Or

StaticJsonDocument<200> doc;

 

مثال نحوه اضافه کردن کلید و مقدار:

doc["temp"]=25;

تبدیل کردن به ساختار JSON:

serializeJson(doc,file);

مؤلفه دوم Serialjson() می‌تواند سریال مانیتور، مکانی در حافظه یا یک string باشد. اکنون اگر این استرینگ را نمایش دهیم با این ساختار روبرو می‌شویم:

{"temp":25}

جایی دیگر اگر خواستیم از مقادیر داخل این ساختار استفاده کنیم باید آن را deserialize کنیم:

deserializeJson(doc, answer);

مؤلفه دومdeserializejson() محل ذخیره کلیدها و مقادیرشان است. حال برای ریختن مقادیر در متغیرها از روش زیر استفاده می‌کنیم:

tempnow = doc["temp"];

 


نمونه کد ارسال داده با JSON


کد آردوینو به صورت زیر است:

#include <ArduinoJson.h>

DynamicJsonDocument doc(1024);

doc["starthours"]=7;

doc["endhours"]=23;

doc["term"]=false;

serializeJson(doc,Serial);

حال خروجی را در سریال مانیتور به شکل زیر خواهیم دید:

{"starthours"=7,"endhours"=23,"term"=false}

 


نمونه کد دریافت داده با JSON


#include <ArduinoJson.h>

int starthours,endhours;

DynamicJsonDocument doc(1024);

       deserializeJson(doc, answer2);

starthours = doc["starthours"];

      endhours = doc["endhours"];

سپس میتوانیم از متغیر های starthours و endhours در جای موردنیاز استفاده کنیم. دیدیم که با این ساختار به آسانی میتوان داده ها را منتقل کرد. این انتقال اطلاعات میتواند بین دو برد آردوینو یا حتی بین آردوینو و پلت فرم دیگری انجام شود. در آموزش‌های بعدی روش کار با JSON در اندروید استودیو را بررسی خواهیم کرد و  با استفاده از آن بین اپلیکیشن اندروید و ماژول ESP8266 داده ها را رد و بدل خواهیم کرد.

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 


پروژه و دریافت بن ارسال رایگان


برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکه‌های اجتماعی از جمله آپارات و اینستگرام، با هشتگ‌های دیجی_اسپارک   دانشجوکیت    digispark    daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۲۰۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

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

نیلوفر مهرنیا

مهندس نرم افزار

تبادل نظر و رفع عیب با ثبت دیدگاه

۲۰ دیدگاه

  • سلام
    سپاس از انتشار این آموزش، من نمیدونستم چطور باید با آردوینو از json استفاده کرد. سوالی که دارم، برای چه پروژه‌هایی باید از جی سان استفاده کرد؟

    • سلام ممنونم
      برای مثال در پروژه هایی که میخواهیم دیتایی را به سرور منتقل کنیم.

  • سلام خانم مهرنیا من قبلا با json کار کردم اما متاسفانه چون اطلاعات برنامه نویسی نداشتم درک کاملی به دست نیاوردم . نقش Serialjson() فقط برای نمایش در سریال مانیتور است؟

    • سلام
      اگر منظورتان SerializeJson بود باید بگویم برای نمایش در سریال مانیتور نیست. بلکه با اینکار داده ها به ساختار json درمیایند و با deserial کردن هم از این ساختار خارج خواهند شد.

  • سلام، تشکر از آموزش.
    یه سوال داشتم، اگر تبدیل به Json و استفاده از Json به همین سادگی هست؛ پس براچی توی بعضی برنامه ها از JsonObject استفاده میشه و doc رو داخل اون قرار میده؟ کار JsonObject چیه؟ و استفاده ازش در کجا لزوم داره؟

  • ببخشید یک سوال دیگه هم داشتم؛ اینکه: من توی یک تابعی اومدم یک document ایجاد کردم و مقادیری رو در کلید “a” قرار دادم و در انتها، متن serialize شده رو درون یک فایل txt قرار میدم. حالا اگه دستگاه ریست بشه و یا وارد تابع دیگه ای بشه میخوام مقادیری که در همون کلید “a” قرار دادم رو تغییر بدم. اما مشکل اینجاست که وقتی دوباره یک document ایجاد میشه، در فایل txt یک آکولاد دیگه باز میشه و تغییرات صورت گرفته در کلید “a” در یک آبجکت جدا ذخیره میشه. یعنی به نوعی من میخوام مقادیر کلید “a” آپدیت بشه؛ ولی در عوض میاد یک کلید “a” دیگه در یک آبجکت دیگه میسازه.

    • سلام
      در نوشتن داخل فایل اشتباه کرده اید. در مد های باز کردن فایل (r , w , a و …) بیشتر دقت کنید.