Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
products:laboratory_iot_c:exp43 [2024/12/01 16:14] – labuser30 | products:laboratory_iot_c:exp43 [2024/12/01 17:48] (текущий) – [Программный код эксперимента] labuser30 | ||
---|---|---|---|
Строка 8: | Строка 8: | ||
==== Программный код эксперимента ==== | ==== Программный код эксперимента ==== | ||
+ | <file arduino Exp43.ino[enable_line_numbers=" | ||
+ | #include " | ||
+ | |||
+ | void listDir(String path, bool showPath) { | ||
+ | Serial.println(); | ||
+ | File dir = LittleFS.open(path, | ||
+ | File file = dir.openNextFile(); | ||
+ | while (dir) { | ||
+ | Serial.print(" | ||
+ | if (showPath) Serial.print(file.fullName()); | ||
+ | else Serial.print(file.name()); | ||
- | Для работы с файловой системой необходимо подключить библиотеку: | + | if (file.isDirectory()) Serial.print(", |
- | <code python> | + | else Serial.print(" |
- | import os | + | |
- | </ | + | Serial.print(" |
+ | Serial.println(file.size()); | ||
+ | |||
+ | file = dir.openNextFile(); | ||
+ | } | ||
+ | } | ||
- | После этого можно работать с функциями файловой системы. Для начала получим список файлов: | + | void setup() { |
- | <file python Exp43-1.py[enable_line_numbers=" | + | Serial.begin(9600); |
- | import os | + | |
+ | |||
+ | LittleFS.format(); | ||
+ | LittleFS.begin(); | ||
- | files = os.listdir() | + | File file = LittleFS.open("/ |
+ | file.print(" | ||
+ | file.close(); | ||
+ | listDir("/", | ||
- | for file in files: | + | LittleFS.mkdir("/ |
- | print(file) | + | |
- | </file> | + | |
- | Программы вывела в терминал список файлов. В вашем случае вывод может отличаться. | + | file = LittleFS.open("/ |
- | < | + | file.print(" |
- | boot.py | + | file.close(); |
- | init.mpy | + | |
- | lcd_api.py | + | |
- | esp8266_i2c_lcd.py | + | |
- | mfrc522.mpy | + | |
- | temp_data.csv | + | |
- | </code> | + | |
- | Мы видим список файлов. Однако нам может требоваться допонительная информация, | + | LittleFS.remove("/ |
- | <file python Exp43-2.py[enable_line_numbers="2", | + | LittleFS.rmdir("/ |
- | import os | + | |
+ | |||
+ | LittleFS.rename("/test.txt", "/ | ||
+ | listDir("/", | ||
+ | } | ||
- | files = os.ilistdir() | + | void loop() { |
- | for file in files: | + | } |
- | print(file) | + | </ |
- | </ | + | |
- | Программа выводит список | + | Для |
+ | <code arduino[enable_line_numbers=" | ||
+ | #include " | ||
+ | </ | ||
- | < | + | Для вывода содержимого директории мы написали специальную функцию: |
- | (' | + | < |
- | ('init.mpy', 32768, 0, 225) | + | void listDir(String path, bool showPath) { |
- | (' | + | |
- | (' | + | File dir = LittleFS.open(path, " |
- | (' | + | File file = dir.openNextFile(); |
- | (' | + | while (dir) { |
+ | Serial.print(" | ||
+ | | ||
+ | else Serial.print(file.name()); | ||
+ | |||
+ | | ||
+ | else Serial.print(" | ||
+ | |||
+ | Serial.print(" | ||
+ | Serial.println(file.size()); | ||
+ | |||
+ | file = dir.openNextFile(); | ||
+ | } | ||
+ | } | ||
</ | </ | ||
+ | Она принимает два аргумента: | ||
- | Теперь давайте создадим директорию с именем dir: | + | Создаем объект директории: |
- | '' | + | <code arduino[enable_line_numbers=" |
+ | File dir = LittleFS.open(path, " | ||
+ | </ | ||
- | < | + | Открываем первый файл: |
- | ('boot.py', 32768, 0, 252) | + | < |
- | (' | + | File file = root.openNextFile(); |
- | (' | + | |
- | (' | + | |
- | (' | + | |
- | (' | + | |
- | (' | + | |
</ | </ | ||
- | Как видно, директория dir создалась. | + | Далее |
+ | <code arduino[enable_line_numbers=" | ||
+ | Serial.print(" | ||
+ | if (showPath) Serial.print(file.fullName()); | ||
+ | else Serial.print(file.name()); | ||
+ | </ | ||
- | В файловых системах есть такое понятие как //путь//. Это последовательность вложенных | + | Определяем является ли объект директорией или файлом и печатаем соответствующий текст: |
- | <file python Exp43-3.py[enable_line_numbers=" | + | <code arduino[enable_line_numbers=" |
- | import os | + | if (file.isDirectory()) Serial.print(", |
+ | else Serial.print(" | ||
+ | </ | ||
- | uos.getcwd() | + | Выводим размер объекта (для директории он всегда равен 0): |
- | </file> | + | <code arduino[enable_line_numbers=" |
+ | Serial.print("size: "); | ||
+ | Serial.println(file.size()); | ||
+ | </code> | ||
- | Результат: | + | В конце тела цикла открываем следующий файл в директории: |
- | < | + | < |
- | '/' | + | file = dir.openNextFile(); |
+ | </code> | ||
+ | |||
+ | В следующих строках мы последовательно форматируем файловую систему и инициализируем ее. | ||
+ | <code arduino[enable_line_numbers=" | ||
+ | LittleFS.format(); | ||
+ | LittleFS.begin(); | ||
</ | </ | ||
- | Текущей директорией является / - это значит, | ||
- | <file python Exp43-3.py[enable_line_numbers=" | + | Создаем файл "test.txt", добавляем в него текст "Some text", закрываем файл и выводим содержимое корневой директории файловой системы: |
- | import os | + | <code arduino[enable_line_numbers=" |
+ | File file = LittleFS.open("/ | ||
+ | file.print(" | ||
+ | file.close(); | ||
+ | listDir("/", | ||
+ | </ | ||
- | os.chdir('/dir') | + | Создаем в корневой директории директорию " |
- | uos.getcwd() | + | <code arduino[enable_line_numbers=" |
- | </file> | + | LittleFS.mkdir("/dir"); |
+ | | ||
+ | </code> | ||
- | Результат: | + | Создаем в директории " |
- | < | + | Выводим содержимое директории " |
- | '/dir' | + | < |
+ | file = LittleFS.open(" | ||
+ | file.print(" | ||
+ | file.close(); | ||
+ | listDir("/ | ||
+ | listDir("/ | ||
</ | </ | ||
- | Это значит, что мы перешли в директорию /dir и сейчас она является текущей | + | |
- | Если мы сейчас запросим список файлов, то получим пустой ответ так как в директории /dir у нас нет файлов. Мы можем получить список файлов в корне | + | Удаляем сначала файл " |
- | < | + | < |
- | files = os.listdir('/') | + | |
+ | LittleFS.rmdir("/ | ||
+ | listDir("/", | ||
</ | </ | ||
- | Вернемся обратно в корень файловой системы и удалим директорию dir: | + | Переименовываем файл |
- | <file python Exp43-4.py[enable_line_numbers=" | + | <code arduino[enable_line_numbers=" |
- | import os | + | |
+ | listDir("/", | ||
+ | </ | ||
- | os.chdir('/' | + | Ниже приведен полный вывод программы в последовательный порт: |
- | os.rmdir(' | + | <code> |
- | </file> | + | |
- | Директорию нельзя удалить, | + | name: test.txt type: file, size: 9 |
- | Также мы можем удалить файл | + | name: dir, type: folder, size: 0 |
- | <code python> | + | name: test.txt type: file, size: 9 |
- | uos.remove(' | + | |
- | </code> | + | name: test2.txt type: file, size: 15 |
+ | |||
+ | name: /dir/ | ||
+ | |||
+ | name: test.txt type: file, size: 9 | ||
- | или переименовать файл | + | name: test_new.txt type: file, size: 9 |
- | <code python> | + | |
- | uos.rename(' | + | |
</ | </ | ||
- | <WRAP center round info 60%> | + | Так как программа выполняется |
- | [[https:// | + | |
- | </ | + |