ESP32 और SPIFFS फाइल सिस्टम


SPIFFS - (सीरियल पेरीफेरल इंटरफेस फ्लैश फाइल सिस्टम) एक सीरियल पेरीफेरल इंटरफेस के माध्यम से जुड़ी फ्लैश मेमोरी के लिए फाइल सिस्टम। सरल शब्दों में: एक ESP32 माइक्रोकंट्रोलर (चित्र 1) है, इसमें एक अंतर्निहित पुन: लिखने योग्य गैर-वाष्पशील NOR- मेमोरी है, जो स्टोर करता है: प्राथमिकताएं, बूटलोडर, फर्मवेयर (संकलित स्केच), फ़ाइल सिस्टम (SPIFFS) और कुछ और। ओवर-द-एयर (OTA) अपडेट जैसी कोई चीज़।



चित्रा 1. ESP32 माइक्रोकंट्रोलर के कार्यात्मक ब्लॉक आरेख


NOR मेमोरी एक प्रकार की गैर-वाष्पशील पुनर्लेखन योग्य मेमोरी है जिसमें NAND मेमोरी के प्रकार की तुलना में काफी अधिक पढ़ने की गति, अपेक्षाकृत कम लिखने और मिटाने की गति होती है। बड़ी-क्षमता वाले NOR- मेमोरी को पूरा करना लगभग असंभव है, आमतौर पर 128 MB तक सीमित होता है। ईएसपी 32 के मामले में - चार


आज SPIFFS के कुछ नुकसान हैं। कमियों , सहित: फ़ोल्डर समर्थन की कमी; एक वास्तविक समय स्टैक नहीं है, इसलिए एक ही ऑपरेशन अलग-अलग समय ले सकता है; टूटे हुए ब्लॉक को खोजने और ठीक करने की क्षमता की कमी। यदि सूचीबद्ध कमियां आपके लिए महत्वपूर्ण नहीं हैं, तो हम अगले पैराग्राफ को पढ़ना जारी रखते हैं।


का उपयोग करने के बारे में बात करते हैं


दुर्भाग्य से, बॉक्स से बाहर, माइक्रोकंट्रोलर की मेमोरी SPIFFS के लिए चिह्नित नहीं है, इसे चिह्नित करने के लिए, आपको Arduino IDE विकास पर्यावरण के लिए ESP32FS प्लग का उपयोग करने की आवश्यकता है।


प्लगइन डाउनलोड होने के बाद, इसे स्थापित किया जाना चाहिए:


  • सुनिश्चित करें कि आपके पास ईएसपी 32 पर आपके डिवाइस के लिए Arduino IDE विकास वातावरण और ड्राइवर का नवीनतम संस्करण है । मेरे पास M5Stack ड्राइवर CP210X है जिसे मैं इस लिंक से डाउनलोड करता हूं;
  • डाउनलोड किए गए टूल फ़ोल्डर को / Arduino / tools / ESP32FS / folder में एम्बेड किए गए प्लगइन के साथ कॉपी करें;
  • MacOS पर, फ़ोल्डर ~ / दस्तावेज़ / Arduino / पर स्थित है;
  • कंप्यूटर को पुनरारंभ करें और टूल मेनू में विकास के वातावरण में जांच करें ESP32 स्केच डेटा अपलोड आइटम प्रकट होता है (चित्र 2) - इसका मतलब है कि आपने सब कुछ सही ढंग से किया था;


चित्र 2. उपकरण मेनू


  • स्केच के बगल में स्थित डेटा फ़ोल्डर पर ध्यान दें। इस फ़ोल्डर में स्थित सभी फाइलों को प्रारूपण के दौरान डिवाइस की मेमोरी में लोड किया जाएगा;
  • संकेतित आइटम का चयन करने के लिए स्वतंत्र महसूस करें और मेमोरी क्षेत्र को प्रारूपित करने के अंत तक प्रतीक्षा करें। कृपया ध्यान दें कि मेमोरी के अन्य सेक्शन प्रभावित नहीं होंगे, जिसका अर्थ है कि फर्मवेयर डिवाइस की मेमोरी में रहेगा और काम करेगा। इसी तरह स्केच के साथ, जब इसे फर्मवेयर में संकलित किया जाता है और डिवाइस पर डाउनलोड किया जाता है, तो फ़ाइल सिस्टम प्रभावित नहीं होगा।

अगर आप आराम चाहते हैं


  • यदि आप फ़ाइलों को छूना चाहते हैं और मुफ्त स्थान के बारे में जानकारी देखना चाहते हैं, तो BRIDGE स्केच डाउनलोड करें और अपने डिवाइस को इसमें फ्लैश करें।


  • डाउनलोड भी करें और संकलन करें क्रॉस-प्लेटफ़ॉर्म फ़ाइल प्रबंधक ए-एक्सप्लोरर (चित्र 3)। GitHub पर, बायनेरिज़ जल्द ही बिन फ़ोल्डर में होंगे।



    चित्र 3 ए। MacOS के लिए A-Explorer फ़ाइल प्रबंधक



    चित्रा 3, बी। विंडोज के लिए ए-एक्सप्लोरर फाइल मैनेजर



यह फ़ाइल प्रबंधक आपको निशुल्क स्थान, अपलोड / डाउनलोड / हटाने वाली फ़ाइलों के बारे में जानकारी प्राप्त करने की अनुमति देगा। ऑपरेशन की प्रगति का एक संकेत है।


जैसा कि आप चित्र 3 से देख सकते हैं, SPIFFS के तहत प्लग-इन लगभग 1.38 एमबी मेमोरी आवंटित की गई है।


यह BRIDGE कौन है?


BRIDGE एक स्केच है, और सबसे पहले, एक ही नाम का एक फ़ंक्शन जो SPIFFS फाइल सिस्टम के साथ काम करता है और A-Explorer इसके लिए एक ग्राफिकल शेल है। बाद वाला एक कमांड या अन्य भेजता है, और यह फ़ंक्शन इसे डिवाइस पर एफएस और एसपीआईएफएफएस पुस्तकालयों का उपयोग करके संसाधित करता है । आइए देखें कि इन पुस्तकालयों में क्या दिलचस्प है।


आइए SPIFFS वर्ग के सार्वजनिक तरीकों को देखकर शुरू करें :


  • बूल स्टार्ट विधि (बूल प्रारूपऑनफेल = गलत, कास्ट चार * बेसपाथ = "/ स्पिफ्स", uint8_t maxOpenFiles = 10)। यह विधि कक्षा के एक उदाहरण को शुरू करने का प्रयास करती है। फ़ाइल सिस्टम फ़ॉर्मेट नहीं होने पर फ़ाइल सिस्टम को फॉर्मेट किया जाना चाहिए, तो पहला तर्क सही या गलत है। दूसरा तर्क वह रास्ता लेता है जहां फ़ाइल सिस्टम की जड़ स्थित होगी। तीसरा तर्क एक साथ खुली फ़ाइलों की संख्या निर्धारित करेगा। अंतिम दो मापदंडों को डिफ़ॉल्ट रूप से छोड़ना बेहतर है और उन्हें बदलना नहीं है। यदि फ़ाइल सिस्टम गायब है (ऊपर प्लगइन का उपयोग नहीं किया गया था)। तब फ़ंक्शन गलत वापस आ जाएगा।


  • बूल प्रारूप () विधि यह जांच करेगी कि क्या फ़ाइल सिस्टम स्वरूपित है - सही है, अन्यथा - गलत है।


  • विधि size_t TotalBytes ()। यह विधि फ़ाइल सिस्टम के लिए आवंटित बाइट्स की संख्या की size_t-number लौटाती है।


  • Size_t विधि का उपयोग किया जाता है ()। यह पद्धति फ़ाइल सिस्टम में उपयोग किए जाने वाले बाइट्स के size_t संख्या को लौटाती है।


  • शून्य अंत () विधि। यह विधि इस वर्ग का विचलन करती है। इस पद्धति को कॉल करने के बाद, अन्य तरीकों को कॉल करने का कोई मतलब नहीं है।



इस वर्ग में सब कुछ, विशेष रूप से दिलचस्प कुछ भी नहीं है। आइए एफएस वर्ग पर जाएं और देखें कि वहां से क्या काम आ सकता है।


  • पहली चीज जो आपकी आंख को पकड़ती है वह बूल स्टार्ट () वर्ग की प्रारंभिक विधि है। इस पद्धति के लिए तर्कों की आवश्यकता नहीं है और इसे कॉल करने की आवश्यकता नहीं है, क्योंकि हम अगले तरीके का तुरंत उपयोग करेंगे।


  • फ़ाइल ओपन मेथड (कास्ट चार पाथ, कास्ट चार मोड) और उसका भाई फाइल ओपन (कास्ट स्ट्रिंग एंड पाथ, कास्ट चार मोड)। इन विधियों में दो तर्क होते हैं, जिनमें से पहला फ़ाइल पथ के लिए एक प्रतीकात्मक और स्ट्रिंग सूचक है, और दूसरा उद्घाटन मोड है, जो निम्न स्थिर हो सकता है:



FILE_READ - केवल पढ़ने के लिए खुला;


FILE_WRITE - केवल लिखने के लिए खुला;


FILE_APPEND - ओवर राइटिंग के लिए खुला।


हमने फ़ाइल खोलने के बाद, अब हम इस पर कोई भी ऑपरेशन कर सकते हैं।


  • Size_t लिखना (uint8_t) विधि आपको फ़ाइल के अंत में एक 8-बिट अहस्ताक्षरित पूर्णांक लिखने की अनुमति देती है।
  • Size_t लिखने का तरीका (const uint8_t * buf, size_t size) आपको दूसरे तर्क में निर्दिष्ट लंबाई के अहस्ताक्षरित पूर्णांक की एक श्रृंखला लिखने की अनुमति देता है।
  • इंट उपलब्ध () विधि अंत से सूचक तक वर्णों की संख्या को गिनाती है।
  • इंट रीड () विधि फ़ाइल से एक वर्ण पढ़ती है और इसे पूर्णांक के रूप में वापस करती है, जबकि कर्सर एक इकाई को दाईं ओर स्थानांतरित करता है।
  • Size_t readBytes (चार * बफर, size_t लंबाई) विधि पहले तर्क द्वारा इंगित बफर में वर्णों को पढ़ती है, और दूसरे तर्क द्वारा पारित वर्णों की संख्या। पढ़े गए पात्रों की संख्या लौटाता है।
  • स्ट्रिंग readString () विधि एक फ़ाइल से एक पंक्ति पढ़ती है।
  • Int पिंग () मेथड int रीड () मेथड के समान काम करता है, केवल कर्सर ही रहता है।
  • बूल की तलाश (uint32_t pos, SeekMode मोड) और bool seek (uint32_t pos, SeekMode मोड) विधि कर्सर को निर्दिष्ट स्थान पर सेट करती है। स्थिति को पहले तर्क के रूप में पारित किया जाता है, और दूसरा नियम ( सीसेट - कर्सर सेट करें)। अगर सफल हो - सही, अन्यथा - असत्य।
  • Size_t स्थिति () विधि कर्सर स्थिति लौटाती है।
  • Size_t आकार () विधि फ़ाइल का आकार बाइट्स में देता है।
  • कास्ट चार * नाम () विधि फ़ाइल नाम लौटाती है।
  • कास्ट चार * पूर्णनाम () विधि, पूर्ण पथ को ध्यान में रखते हुए।
  • यदि खुली वस्तु एक फ़ाइल है तो बूल फ़िले () विधि सही है। अन्यथा - एक झूठ।
  • बूल .Directory () विधि सही है अगर खुली वस्तु एक फ़ोल्डर है। अन्यथा - एक झूठ।
  • फ़ाइल OpenNextFile () विधि रूट में अगली फ़ाइल के लिए एक पॉइंटर लौटाती है, अन्यथा NULL।
  • बूल मौजूद है (const char * path) और बूल मौजूद है (const String & path) विधियाँ फ़ाइल का पूरा नाम तर्क के रूप में लेती हैं, और यदि ऐसी कोई फ़ाइल मौजूद है, तो यह सत्य है, अन्यथा यह गलत है।
  • बूल रिमूव (कास्ट चार * पाथ) और बूल रिमूव (कास्ट स्ट्रिंग एंड पाथ) मेथड्स उस फाइल को डिलीट करने की कोशिश करते हैं जिसका नाम तर्क के साथ पास किया गया है। यदि सफल हो, तो सच लौटाता है, अन्यथा - असत्य।
  • विधि बूल नाम (const char pathFrom, const char pathTo ) और बूल नाम बदलें (const String & pathFrom, const String & pathTo); पूर्ण फ़ाइल नाम को पहले तर्क के रूप में स्वीकार करता है, और दूसरा पूर्ण नए फ़ाइल नाम के रूप में और इसका नाम बदल देता है।

हां, हां, आप इस फ़ंक्शन को ले सकते हैं और इसे किसी अन्य स्केच में एक अलग थ्रेड में चला सकते हैं


आपके समय के लिए बहुत बहुत धन्यवाद! मुझे खुशी होगी अगर इस लेख से आपको फायदा होगा।


संदर्भ और (या) स्रोत:


  • SPIFFS फाइलसिस्टम यहाँ
  • यहां Arduino IDE में ESP8266 एडऑन में फाइल सिस्टम के साथ काम करें
  • यहाँ Arduino ESP32 फाइलसिस्टम अपलोडर है

Source: https://habr.com/ru/post/hi483280/


All Articles