در این مطلب به مبحث SPIFFS در ESP8266 خواهیم پرداخت. اول از همه باید بدانیم که SPIFFS چیست و چگونه از آن باید استفاده کرد. در شروع بگم که من مطلب مشابه به زبان فارسی ندیدم. بنابراین اگر ایرادی در مطلب بود، لطفا با کامنت به من اطلاع دهید.
SPI Flash File System
خب اول باید بدانیم اصلا SPIFFS چی هست؟ ترجمهی لغتی آن می شود: سیستم ارتباط سریالی به فایلهای محیط فلش. البته من این مدلی ترجمهاش کردم چون درکش را راحت تر می کند.
تا الان وقتی که ما می خواستیم کد HTML را در ESP8266 ذخیره کنیم. باید آنرا به صورت یک رشته ذخیره می کردیم. و مستقیم نمیتوانستیم یک فایل HTML را داخل ESP8266 ذخیره کنیم. ولی از الان به بعد SPIFFS این امکان را به ما میدهد که شبیه کامپیوتر در داخل ESP8266 فولدری ایجاد کنیم. و سپس داخل آن فایلهای خود را ذخیره کنیم. تقریبا شبیه کامپیوتر ولی با محدودیت فضای حافظهی کمتر. فایل را بخوانیم و داخل آن بنویسیم.
اگر توجه داشته باشید در برنامهی آردوینو در هنگام انتخاب بورد. در قسمت Tools>Flash Size وقتی میخواهیم مقدار حافظه را مشخص کنیم. با همچین گزینههایی مواجه میشویم.
میبینید که اندازهی فلش را می توانیم انتخاب کنیم، با اندازههای مختلفی از SPIFFS . این اندازه باید بر اساس اندازهی فایل ما تنظیم شود. هرچقدر که فایل ما فضا نیاز دارد، اینجا برایش جای بیشتری در نظر می گیریم.
خب حالا قبل از اینکه به بحثهای اصلی بپردازیم. باید یک پلاگین را در برنامهی آردوینو خود نصب کنید. اگه توجه کنید میبینید که در منوی Tools من، یک گزینه به اسم ESP8266 Sketch Data Upload هست، که به احتمال زیاد در منوی شما نیست.
اول از همه به این آدرس برای دانلود رفته: آخرین ورژن PLUGIN را دانلود کنید. و در این لینک هم کلیه توضیحات را برای نصب داده شده است. ولی من به طور خلاصه توضیح میدهم.
- فولدر Sketch ها را پیدا کنید.File > Preferences > Sketchbook Location
- بعد یک فولدر به اسم tools درست کنید.
- فایل زیپ را به داخل آن انتقال داده.
- فایل زیپ را Extract کنید.
- در آخر باید مسیری به این شکل داشته باشید.
<sketchbook directory>/tools/ESP8266FS/tool/esp8266fs.jar
بعد اتمام کار آردوینو را بسته و دوباره باز کنید. حال باید گزینهی ESP8266 Sketch Data Upload در منوی Tools اضافه شده باشد.
Uploading files to SPIFFS
برای بارگذاری فایلها داخل ESP8266 اول از همه باید در داخل فولدری که برنامه در آن است. یک فولدر به اسم data ایجاد کنید. برای پیدا کردن فولدر برنامه این مسیر را بروید:
تمام فایلهای خود را داخل این فولدر قرار دهید. توجه داشته باشید که فایلهای بزرگ را نمیتوانید در داخل ESP8266 ذخیره کنید.
اندازهی فایلهای خود را بدست آورده و Flash Size را طبق آن تنظیم کنید.
سپس بعد از بارگذاری برنامهی خود باید یکبار هم به طور جداگانه فایلهای خود را بارگذاری کنید. برای این کار اول مطمئن شوید که سریال مونیتور را بسته باشید. سپس به همان روش قبلی ESP8266 را به مد برنامه ریزی برده. و از منوی tools > ESP8266 Sketch data upload را انتخاب کنید.
اگر کد خطایی دریافت کردید به احتمال زیاد حجم فایلهای شما از ظرفیت حافظهی SPIFFS بیشتر است.
توجه داشته باشید که با تغییر در اندازهی SPIFFS باید برنامه را هم دوباره بارگذاری کنید.
در ادامه برنامهای را برای شما قرار می دهم که در آن از SPIFFS استفاده شده. برنامهی سادهای است و طبق آدرس URI به دنبال فایل آن میگردد و اگر موجود باشد به آن پاسخ می دهد.
#include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <FS.h> // Include the SPIFFS library ESP8266WebServer server(80); // Create a webserver object that listens for HTTP request on port 80 String getContentType(String filename); // convert the file extension to the MIME type bool handleFileRead(String path); // send the right file to the client (if it exists) const char* ssid = "SSID"; const char* password = "PASSWORD"; void setup() { Serial.begin(115200); // Start the Serial communication to send messages to the computer delay(10); Serial.println('\n'); //Constant IP for Local WiFi IPAddress ipWiFi(192, 168, 1, 22); IPAddress gatewayWiFi(192, 168, 1, 249); IPAddress subnetWiFi(255, 255, 255, 0); WiFi.config(ipWiFi, gatewayWiFi, subnetWiFi); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(F("Local WiFi Connected")); SPIFFS.begin(); server.onNotFound([]() { // If the client requests any URI if (!handleFileRead(server.uri())) // send it if it exists server.send(404, "text/plain", "404: Not Found"); // otherwise, respond with a 404 (Not Found) error }); server.begin(); // Actually start the server Serial.println("HTTP server started"); } void loop(void) { server.handleClient(); } String getContentType(String filename) { // convert the file extension to the MIME type if (filename.endsWith(".html")) return "text/html"; else if (filename.endsWith(".css")) return "text/css"; else if (filename.endsWith(".js")) return "application/javascript"; else if (filename.endsWith(".ico")) return "image/x-icon"; return "text/plain"; } bool handleFileRead(String path) { // send the right file to the client (if it exists) Serial.println("handleFileRead: " + path); if (path.endsWith("/")) path += "index.html"; // If a folder is requested, send the index file String contentType = getContentType(path); // Get the MIME type if (SPIFFS.exists(path)) { // If the file exists File file = SPIFFS.open(path, "r"); // Open it size_t sent = server.streamFile(file, contentType); // And send it to the client file.close(); // Then close the file again return true; } Serial.println("\tFile Not Found"); return false; // If the file doesn't exist, return false }
بسیار عالی و جالب
این مطالب برای من بسیار مفید بود مرسی
فقط اینکه سایت شما در نتایج گوگل دیده نمیشه , سایت را از instagramپیدا کردم
من مدت زیادی دنبال مطالب فارسی ای که از پایه اموزش بدهند بودم و تقریبا نبود
مرسی از سایت خوبتون
خواهش می کنم امیدوارم مفید بوده باشه