اگر در حوزه طراحی وب سایت فعالیت داشته باشید و یا اینکه قصد یادگیری برنامه نویسی وب را داشته باشید قطعا در این مسیر نام JSON را خواهید شنید.
جیسون یک قالب سبک وزن (lightweight) برای ذخیره و حملونقل داده است. شما با این فرمت میتوانید اطلاعات را در قالب متن جابه جا کنید و حتی از بیرون از شبکه انتقال دهید. فایلهای جیسون هم برای انسان و هم برای کامپیوترها خوانایی دارند.
JSON برای تبادل اطلاعات بین سرور و مرورگر فرمت سبک و مناسبی است. اما تنها فرمت موجود برای این کار نیست و XML هم در این زمینه وجود دارد. اما چرا بعضیها JSON را به XML ترجیح میدهند؟ شاید بخاطر خوانایی بیشتر آن نسبت به XML و محبوبیت زبان JavaScript است.
قواعد نحوه نوشتن جیسون
- دادهها در جفتهایی بصورت نام/مقدار (name/value) قرار میگیرد.
- دادهها با علامت کاما از هم جدا میشوند.
- علامتهای { } اشیاء را نگه میدارند.
- علامتهای [ ] آرایهها را نگه میدارند.
خبر خوب این است که ESP32 / ESP8266 از این فرمت پر طرفدار پشتیبانی می کند و می تواند که دیتا های مارا به صورت JSON دانلود کند و یا آن را بسازد و برای سرور ارسال کند.
در این پست ما باهم یک Json را دانلود کردیم و آن را به دیتا های خوانا برای ESP تبدیل کردیم.
امروز می خواهیم این کار را برعکس انجام دهیم و داده های مختلفی مانند Float/Int/String را درون یک Json مرتب شده و خوانا بریزیم و همچنین با مفهوم NTP آشنا می شویم.
NTP مخفف Network Time Protocol می باشد که وظیفه آن ایجاد هماهنگی زمانی بین کاربران و Client های موجود در یک شبکه می باشد. همانطور که می دانیم یکسان نبودن Time دستگاه ها می تواند ایجاد مشکلاتی جدی را در پی داشته باشد حتی اگر این اختلاف زمانی به اندازه کسری از ثانیه باشد!
به طور مثال:
- سینک شدن داده ها بین سرور ها با خطا مواجه می شود.
- در تراکنش های مالی اختلالاتی به وجود می آید.
- داده ها با ورژن قدیمی ایجاد می شوند.
- جمع آوری و بررسی Log های تولید شده به سختی امکان پذیر است و …
خبر خوب بعدی این است که ESP از این تکنولوژی کاربردی و مهم هم پشتیبانی می کند و حتی تاریخ دقیق را در هر لحظه همراه زمان دقیق به ما می دهد . البته با استفاده از پروتکل UDP و WiFi .
بریم سراغ بررسی کد ( فایل های مورد نیاز در پایین پست موجود می باشد)
کتابخانه ها
#include <NTPClient.h>
#include <WiFi.h>
#include <WiFiUdp.h>
#include <ArduinoJson.h>
کتابخانه Arduino Json رو پیشنهاد می کنم که از خود آردینو دانلود کنید تا کاملا بروز باشد.
NTP Begin
timeClient.begin();
timeClient.setTimeOffset(12642);
در این قسمت ما تنظیمات NTP را انجام می دهیم که یک عدد خاص رو می بینید که توضیح میدم.
عدد 12642 اختلاف زمان کشور ما از ساعت جهانی به صورت ثانیه است-(3:30 به ساعت).
Split The String
formattedDate = timeClient.getFormattedDate();
int splitT = formattedDate.indexOf(“T”);
dayStamp = formattedDate.substring(0, splitT);
timeStamp = formattedDate.substring(splitT+1, formattedDate.length()-1);
در این چند قطعه کد ما با استفاده از دستورات کتابخانه String آردینو بخش های مختلف زمانی را جدا می کنیم تا در کد بتوانیم از آنها استفاده کنیم.
پس باید مقدار دریافتی سرور NTP را در یک String به نام formattedDate ذخیره کنیم و آنرا تیکه تیکه تقسیم کنیم.
Make Pretty Json
doc[“Website“] = “https://embeddedlab.ir“;
doc[“Date“] = dayStamp ;
doc[“Time“] = timeStamp ;
JsonArray FLTJS = doc.createNestedArray(“Float-Values”) ;
FLTJS.add(FloatValue1) ;
FLTJS.add(FloatValue2) ;
FLTJS.add(FloatValue3) ;
JsonArray INTTJS = doc.createNestedArray(“Int-Values”) ;
INTTJS.add(IntValue1) ;
INTTJS.add(IntValue2) ;
INTTJS.add(IntValue3) ;
در آخر بخش سعی کردم با رنگی کردن قسمت های مختلف تاثیر هر کدام را نمایش دهم تا توسط این ابزار ها یک JSON خوب و خوانا ایجاد کنید که هم کامپیوتر درک کند و هم یک انسان دیگر.