# 12.File system SPIFFS

### 1. Why use a file system

บน BiBoard (ESP32) นอกเหนือจากพื้นที่โปรแกรมปกติและพื้นที่บูตแล้ว เราใช้ระบบไฟล์ในพาร์ติชัน Flash

บทบาทของระบบไฟล์ที่มีพาร์ติชันอิสระมีดังนี้:

* บันทึกข้อมูลตามที่อยู่ที่ระบุ และจะไม่ถูกลบเนื่องจากการอัปเดตซ้ำ (เช่น ข้อมูลการคาลิเบต ข้อมูลการเดิน
* ไม่จำเป็นต้องใช้การ์ด SD ภายนอก ช่วยประหยัดทรัพยากรฮาร์ดแวร์
* [Save HTML and CSS files to build a web server](https://randomnerdtutorials.com/esp32-web-server-spiffs-spi-flash-file-system/)
* [Save images, audio and other files](https://randomnerdtutorials.com/display-images-esp32-esp8266-web-server/)

ระบบไฟล์ทั่วไป ได้แก่ Windows NTFS, exFAT และระบบไฟล์บันทึกของ Linux Ext และ XFS แต่ในเขตข้อมูลที่ฝังตัว ระบบไฟล์ขนาดใหญ่เหล่านี้มีขนาดใหญ่เกินไป เราใช้ SPIFFS (ระบบไฟล์แฟลช SPI) ที่มีน้ำหนักเบา ซึ่งเป็นระบบไฟล์แบบฝังสำหรับอุปกรณ์แฟลช SPI NOR และฟังก์ชันสนับสนุน เช่น การปรับระดับการสึกหรอและการตรวจสอบความสอดคล้องกันของระบบไฟล์

เนื่องจากน้ำหนักเบา คุณลักษณะที่ใหญ่ที่สุดของ SPIFFS คือไม่รองรับไดเร็กทอรีแบบต้นไม้ กล่าวคือ ไฟล์ทั้งหมดจะถูกจัดเก็บไว้ในเลเยอร์เดียวกัน SPIFFS ที่ให้บริการโดย ESP32 มีคุณสมบัติดังต่อไปนี้:

* ปัจจุบัน SPIFFS ไม่รองรับไดเร็กทอรี แต่สร้างโครงสร้างแบบเรียบ หาก SPIFFS ติดตั้งอยู่ใต้ /spiffs การสร้างไฟล์ด้วยเส้นทาง /spiffs/tmp/myfile.txt จะสร้างไฟล์ชื่อ /tmp/myfile.txt ใน SPIFFS แทนที่จะเป็น myfile.txt ในไดเร็กทอรี /spiffs/tmp
* ไม่ใช่สแต็คแบบเรียลไทม์ การดำเนินการเขียนรายการหนึ่งอาจใช้เวลานานกว่าการดำเนินการอื่นมาก
* สำหรับตอนนี้ มันไม่ได้ตรวจหาหรือจัดการกับบล็อกที่ไม่ดี

### 2. Install the Arduino ESP32 file system uploader

คุณสามารถสร้าง/บันทึกและลบไฟล์ด้วยโค้ด Arduino ของคุณเอง แต่การดำเนินการนั้นยุ่งยาก คุณต้องใส่ข้อมูลหรือไฟล์ไบนารีลงใน Arduino Sketch และสร้างไฟล์โดยเรียกใช้โปรแกรม

อย่างไรก็ตาม มีเครื่องมือที่มีประโยชน์มากที่สามารถอัปโหลดไฟล์จากคอมพิวเตอร์ไปยังระบบไฟล์ได้โดยตรง แม้ว่าจะยุ่งยากกว่าการ "ลากและวาง" สำเนาของ "ที่เก็บข้อมูลแบบถอดได้" เล็กน้อย ไม่ว่าจะเป็นไฟล์เสียง MP3 หรือไฟล์เว็บ HTML ทั้งหมดก็สามารถอัปโหลดไปยังหน่วยความจำแฟลชได้อย่างง่ายดาย มาเรียนรู้วิธีใช้ปลั๊กอินนี้กัน

### 3. Install ESP32 file upload plugin

#### 3.1 Preparing the Environment

โปรดติดตั้ง Arduino IDE (เวอร์ชัน: 1.8.\* ) และชุดสนับสนุน ESP32 ของ Arduino IDE (โปรดดูบทที่ 3.2.1 ของคู่มือการเริ่มต้นฉบับย่อของ BiBoard)

[Chapter 3.2.1](https://docs.petoi.com/thai/biboard-v0#3.2.1-set-up-esp32-development-environment)

#### 3.2 Download the ESP32FS plugin

ดาวน์โหลดแพ็คเกจบีบอัดของปลั๊กอิน ESP32FS ได้ที่:

{% embed url="<https://github.com/me-no-dev/arduino-esp32fs-plugin/releases>" %}

![Download ESP32 SPIFFS file system upload plug-in for Arduino IDE](https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQ6a951Q6Jn1Zzt5Ajr%2F-McaOeQy-Lv_6jtGhDNP%2F-McaS8T0CvQA36TWuQsb%2F12_01.png?alt=media\&token=b1bc3cc4-e02f-4535-9f30-56315f62e64e)

ไปที่ไดเรกทอรี "Arduino" และเปิดโฟลเดอร์ "tools"

`C:\Users\{YourUserName}\Documents\Arduino\tools`

คลายซิปโฟลเดอร์ .zip ที่ดาวน์โหลดมาไปยังโฟลเดอร์ Tools คุณควรมีโครงสร้างโฟลเดอร์ที่คล้ายกัน：

`C:\Users\{YourUserName}\Documents\Arduino\tools\ESP32FS\tool\esp32fs.jar`

สุดท้ายให้รีสตาร์ท Arduino IDE

หากต้องการตรวจสอบว่าติดตั้งปลั๊กอินสำเร็จหรือไม่ ให้เปิด Arduino IDE เลือกบอร์ดพัฒนา ESP32 ของคุณ (ESP32 Dev Module) ไปที่ "Tools" จากนั้นตรวจสอบว่ามีตัวเลือก "ESP32 Sketch Data Upload" หรือไม่

<figure><img src="https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2FylvyqFWEQrsOw9UMY3DB%2Fimage.png?alt=media&#x26;token=327727ef-d77f-4799-97eb-b3c1afcc1a8c" alt=""><figcaption></figcaption></figure>

### 4. Upload files using the file system uploader

หากต้องการอัปโหลดไฟล์ไปยังระบบไฟล์ ESP32 ให้ทำตามขั้นตอนด้านล่าง:

* สร้างโครงการ Arduino (เช่น Test.ino) และบันทึก
* หากต้องการเปิดไดเร็กทอรีโครงการ คุณสามารถใช้ตัวเลือก "Sketch - Show Sketch Folder"

<figure><img src="https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2FFMe97QxCXJMinBSXxwrh%2Fimage.png?alt=media&#x26;token=288c2c78-c90a-4a8d-9c5d-9a1805e05ed3" alt=""><figcaption></figcaption></figure>

* ภายในโฟลเดอร์นี้ ให้สร้างโฟลเดอร์ใหม่ชื่อ "data"

!["data" folder in the project directory](https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQ6a951Q6Jn1Zzt5Ajr%2F-McaVOcEWtTW-L194Szk%2F-McaYVC-FSd6eEXB_lHj%2F12_06.png?alt=media\&token=9d3583cb-52f4-4060-bcf8-00bc40b491ab)

* ในโฟลเดอร์ "data" คุณควรใส่ไฟล์ที่คุณต้องการบันทึกลงในระบบไฟล์ SPIFFS เช่น สร้างไฟล์ .txt ที่มีข้อความชื่อ "test\_example" ดังต่อไปนี้:

![Create test sample file with Notepad](https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQ6a951Q6Jn1Zzt5Ajr%2F-McaqVcfHGoZcBG6WbSX%2F-McaqjVzmCT3JUiwFkjh%2F12_07.png?alt=media\&token=a8a16225-f1e8-4231-876f-1fe5078b2c64)

* โปรดคลิก "Tools - ESP32 Sketch Data Upload" ใน Arduino IDE

<figure><img src="https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2FRAebJ5Ts3uVBsfgm17lS%2Fimage.png?alt=media&#x26;token=fa518a44-bd64-4d02-ae2b-94f4bd381ef3" alt=""><figcaption></figcaption></figure>

เมื่อคุณเห็นข้อความแจ้ง  "SPIFFS Image Uploaded" แสดงว่าไฟล์ได้รับการอัปโหลดไปยังพาร์ติชัน SPIFFS เรียบร้อยแล้ว

![The SPIFFS image has been uploaded to the ESP32  board](https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQ6a951Q6Jn1Zzt5Ajr%2F-Mcastd7TT20slg-WJ73%2F-McatHhFSmzX3BQHOX_p%2F12_09.png?alt=media\&token=9402b6db-1337-482d-bae3-df937ceb2b52)

### 5. Demo of how to use the file system

วอย่างของระบบไฟล์ SPIFFS\_Test.ino（`C:\Users\{YourUserName}\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.*\libraries\SPIFFS\examples\SPIFFS_Test`））มาจาก ESP32 อย่างเป็นทางการ โดยไม่ต้องดัดแปลง โค้ดนี้ใช้การดำเนินการพื้นฐานของ "การเพิ่ม การลบ การแก้ไข และการตรวจสอบ" และจัดเตรียมโปรแกรมทดสอบ SPI flash IO

หากจำเป็น ขอแนะนำให้ใช้โค้ดของตัวอย่างโดยตรงเพื่อใช้งาน ESP32 SPIFFS
