This project* is a Network Attached Storage (NAS) device I built using a ESP32 development board as the server with a SD card module for file storage. It currently has the following functionalities and features:
Upload files
Download files
Open files directly online1
Delete files2
Independent of your home Wi-Fi network3
Supports Over-the-Air (OTA) updates4
In addition, the project also comes with a webpage for diaplsying information and taking user inputs. However, should anyone want to make their own webpage or application to integrate with the sketch, they may find reading the source code helpful. The exchange of information between the client and server is mainly done via JSON strings, which are easy to parse and construct using JavaScript.
For any issues, questions, and suggestions, please feel free to mention them on GitHub or reply to this topic directly. You may also make improvements to the code on GitHub. Thank you for checking out this project.
Footnotes: *Original project proposal can be found here. 1Currently only supports a limited number of formats. 2Currently only supports the deletion of indevidual files. 3The NAS operates as an Access Point (AP). 4Both the webpage and sketch can be updated via OTA.
Status Update (1/3/2023, Happy New Year!):
I have updated my session management library to increase the compatibility with different webserver libraries. The code is organised in a library-fashion now, making it usable for all.
All past changes have now been merged into the master branch, please feel free to check it out.
In the foreseeable future, I am planning to:
Rewrite certain functions with std::optional when C++20 is supported*.
Enable saving sessions information to SD card filesystem to save RAM.**
Status Update (1/16/2023) I started anew project, which is a continuation of the NAS project.
This project aims to not only act as a storage device, but also a hub to connect IoT nodes and interact with online services in an extendable manner using flexible API.
The new project, while retaining all the features of its predecessor, makes improvements in terms of code organisation and extends its functionalities.
This project is planned to gradually replace and surpass its predecessor as features and functionalities are being ported. The predecessor will no longer be actively maintained or developed but will still be available for to the public for reference.
Advice and opinions are very welcomed!
1Still in progress, but all essential ones are already available. 2Uses 2 SD cards, each on a separate SPI bus, they will not interfere with each other, and should allow concurrent access from different threads. 3Uses session manager as a base, highly customisable.