موضوعات داغ

دانلود و ذخیره یک فایل JSON در حافظه ESP۳۲ – SPIFFS

معرفی کلی برد توسعه ESP32 – D1 R32:

این برد توسعه یکی از برد توسعه های خانواده ESP32 می باشد و با الگو برداری از برد دوست داشتنی Arduino Uno طراحی شده است .در شکل زیر می توانید نگاه دقیق تری داشته باشید. همانطورکه حدس زدید تقریبا تمامی شیلد های آردینو را می توانیم روی این برد توسعه قدرتمند سوار کنیم و تعداد پایه های ورودی و خروجی آن تقریبا یکسان است.

2_Pinout_D1_R32
2_Pinout_D1_R32

شرح کلی این پروژه:

در این آموزش می خواهیم از مهم ترین قابلیت این برد یعنی وای فای و دستورات HTTP استفاده کنیم و یک فایل JSON را که از یک وبسایت دریافت می کنیم را دیکود (رمز گشایی) کنیم و سپس یکی از داده های رمزگشایی شده آن را در حافظه دائمی SPIFFS ذخیره کنیم.

SPIFFS:

SPIFFSقابلیتی است که امکان استفاده از بخش هایی از حافظه Flash متصل به ESP32 را به صورت یک حافظه خارجی فراهم می سازد . در واقع در این روش شما می توانید از حجم اختصاص داده شده به SPIFFSجهت ذخیره فایل های مختلف همچون عکس ، فایل های HTML و… استفاده کنید .

JSON:

جیسون معادل اختصاری عبارت JavaScript Object Notation به معنی «نمادگذاری اشیا در جاوا اسکریپت» است. جیسون یک قالب استاندارد باز است که امکان تبادل داده‌ها در وب با استفاده از جفت‌های خصوصیت-کلید را ممکن ساخته است. به صورت خلاصه: بهینه ترین روش دریافت و ارسال اطلاعات به صورت متن در فضای اینترنت و اینترنت اشیا که استفاده می کنیم.

شکل ظاهری جیسون:

JSON Example

{

    “employee”: {

        “name”:       “sonoo”,

        “salary”:      56000,

        “married”:    true

    }

}

حال برای انجام یک تست پروژه به یک وبسایت نیاز داریم که یک فایل جیسون را از آن دریافت کنیم که من از وبسایت  dummyjson.com استفاده کردم.

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

فایل هدر که باید اضافه کنید SPIFFS-functions
کتابخانه که باید نصب کنید ArduinoJson
کتابخانه که به صورت پیشفرض موجود است WiFi
کتابخانه که به صورت پیشفرض موجود است
WiFiMulti
کتابخانه که به صورت پیشفرض موجود است
HTTPClient
فایل هدر SPIFFS متعلق به وبسایت imax-co.com است

بررسی بخش های مهم کد:

Before Setup

#define FORMAT_SPIFFS_IF_FAILED false

می توانیم تنظیم کنیم که آیا فایل سیستم در صورت به مشکل خوردن فرمت شود یا نه.

Setup

wifiMulti.addAP(“Modem1” , “12345678”);

wifiMulti.addAP(“Modem2” , “12345678”);

wifiMulti.addAP(“Modem3” , “12345678”);

if(wifiMulti.run() == WL_CONNECTED) {

Serial.println(“WiFi connected”);

 }

else if(wifiMulti.run() != WL_CONNECTED) {

Serial.println(“WiFi not connected!”);

delay(1000);

}

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

Setup

if (!SPIFFS.begin(FORMAT_SPIFFS_IF_FAILED)) {

Serial.println(“SPIFFS Mount Failed”);

return;

}

توسط این دستورات می توانیم فایل سیستم خود را راه اندازی کنیم که در صورت خطا کد اجرا نمی شود.

Setup

Serial.println(FSlistDir(“/”, 0));

Serial.println(FSreadFile(“/Title.txt”)) ;

ابتدا تمامی فایل های موجود در فایل سیستم را پرینت می کنیم.
سپس فایل مورد نظر را که یک متغیر در آن وجود دارد را پرینت می کنیم.

Loop

StaticJsonDocument<200> doc;

این دستور مربوط به جیسون می شود که حدود 200 بایت را به پردازش اختصاص می دهد که برای این پروژه کافیست.

Loop

HTTPClient client;

int Rnd = random(0 , 150);

String Url = “https://dummyjson.com/todos/” ;

Url = Url + Rnd ;

ابتدا یک کلاینت را راه اندازی می کنیم.
سپس یک عدد رندوم میان 0 و 150 انتخاب می کنیم و به آخر دستور GET خود متصل می کنیم.با اینکار می توانیم دیتا های مختلفی را از این وبسایت دریافت کنیم.

Loop

client.begin(Url);

int httpcode = client.GET();

if(httpcode > 0){

String payload = client.getString() ;

Serial.println(“/nStatus Code : ” + String(httpcode)) ;

Serial.println(payload);

در این بخش کلاینت خود را اجرا می کنیم و در صورت موفقیت جوابی را که دریافت کردیم.
را نمایش می دهیم و آماده رمز گشایی می شویم.

Loop

DeserializationError error = deserializeJson(doc , payload ) ;

if(error)

Serial.println(“Error In Json”) ;

else{

Serial.println(“Json Decoded Soccses”) ;

..

…..

}

این بخش می تواند جیسون را به راحتی آماده خواندن کند و در صورت ارور به ما نمایش می دهد.

Loop

int UserId = doc[“userId”] ;
int Id = doc[“id”] ;
String Title = doc[“todo”] ;
String Status = doc[“completed”] ;

Serial.println(UserId) ;
Serial.println(Id) ;
Serial.println(Title) ;
Serial.println(Status) ;
Serial.println(“—-“) ;

این بخش به راحتی دیتا های مارا داخل متغیر قرار می دهد و سپس نمایش می دهد.

Loop

FSwriteFile(“/Title.txt”, Title);

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

Loop

Finish = true ;

برنامه فقط یکبار در صورت موفقیت انجام می شود وگرنه تکرار شده و دوباره تلاش می کند.

Loop

client.end() ;

بستن کلاینت HTTP و تمام.

 

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

 

منابع:

imax-co.com

https://www.javatpoint.com/json-example

https://github.com/espressif/arduino-esp32

برچسب ها

نوشته های مشابه

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

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

− two = one

بستن