Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:laboratory_iot_c:exp43 [2024/12/01 16:40] – [Программный код эксперимента] labuser30products:laboratory_iot_c:exp43 [2024/12/01 17:48] (текущий) – [Программный код эксперимента] labuser30
Строка 13: Строка 13:
 void listDir(String path, bool showPath) { void listDir(String path, bool showPath) {
   Serial.println();   Serial.println();
-  File root = LittleFS.open(path, "r"); +  File dir = LittleFS.open(path, "r"); 
-  File file = root.openNextFile(); +  File file = dir.openNextFile(); 
-  while (file) {+  while (dir) {
     Serial.print("name: ");     Serial.print("name: ");
     if (showPath) Serial.print(file.fullName());     if (showPath) Serial.print(file.fullName());
Строка 22: Строка 22:
     if (file.isDirectory()) Serial.print(", type: folder, ");      if (file.isDirectory()) Serial.print(", type: folder, "); 
     else Serial.print(" type: file, ");      else Serial.print(" type: file, "); 
 +    
     Serial.print("size: ");     Serial.print("size: ");
     Serial.println(file.size());     Serial.println(file.size());
-    file = root.openNextFile();+     
 +    file = dir.openNextFile();
   }   }
 } }
Строка 49: Строка 51:
   listDir("/dir/", true);   listDir("/dir/", true);
  
 +  LittleFS.remove("/dir/test2.txt");
 +  LittleFS.rmdir("/dir");
 +  listDir("/", false);
 +  
   LittleFS.rename("/test.txt", "/test_new.txt");   LittleFS.rename("/test.txt", "/test_new.txt");
-  listDir("/", false); 
- 
-  LittleFS.remove("/test_new.txt"); 
   listDir("/", false);   listDir("/", false);
 } }
Строка 59: Строка 62:
 } }
 </file>  </file> 
- 
  
 Для работы с файловой системой необходимо подключить библиотеку: Для работы с файловой системой необходимо подключить библиотеку:
-<code python+<code arduino[enable_line_numbers="2", start_line_numbers_at="1"]
-import os+#include "LittleFS.h"
 </code> </code>
  
-После этого можно работать с функциями файловой системы. Для начала получим список файлов+Для вывода содержимого директории мы написали специальную функцию
-<file python Exp43-1.py[enable_line_numbers="2", start_line_numbers_at="1"]> +<code arduino[enable_line_numbers="2", start_line_numbers_at="3"]> 
-import os+void listDir(String path, bool showPath) { 
 +  Serial.println(); 
 +  File dir = LittleFS.open(path, "r"); 
 +  File file = dir.openNextFile(); 
 +  while (dir) { 
 +    Serial.print("name: "); 
 +    if (showPath) Serial.print(file.fullName()); 
 +    else Serial.print(file.name()); 
  
-files os.listdir()+    if (file.isDirectory()) Serial.print(", type: folder, ");  
 +    else Serial.print(" type: file, ");  
 +     
 +    Serial.print("size: "); 
 +    Serial.println(file.size()); 
 +     
 +    file dir.openNextFile()
 +  } 
 +
 +</code> 
 +Она принимает два аргумента: первый — путь к директории, содержимое которой нужно вывести, второй - определяет нужно ли при выводе названия файла указывать полный путь к нему.
  
-for file in files+Создаем объект директории
-    print(file+<code arduino[enable_line_numbers="2", start_line_numbers_at="5"]> 
-</file>+  File dir = LittleFS.open(path, "r"); 
 +</code>
  
-Программы вывела в терминал список файлов. В вашем случае вывод может отличаться. +Открываем первый файл: 
-<code> +<code arduino[enable_line_numbers="2", start_line_numbers_at="6"]
-boot.py +  File file = root.openNextFile(); 
-init.mpy +
-lcd_api.py +
-esp8266_i2c_lcd.py +
-mfrc522.mpy +
-temp_data.csv+
 </code> </code>
  
-Мы видим список файлов. Однако нам может требоваться допонительная информация, например размер файлов. Для этого есть функция ''ilistdir()'' +Далее в цикле ''While'' сначала выводим в зависимости от аргумента showPath имя файла/директории с указанием пути или без:  
-<file python Exp43-2.py[enable_line_numbers="2", start_line_numbers_at="1"]> +<code arduino[enable_line_numbers="2", start_line_numbers_at="8"]> 
-import os+    Serial.print("name: "); 
 +    if (showPath) Serial.print(file.fullName()); 
 +    else Serial.print(file.name());  
 +</code>
  
-files os.ilistdir() +Определяем является ли объект директорией или файлом и печатаем соответствующий текст: 
-for file in files+<code arduino[enable_line_numbers="2", start_line_numbers_at="12"]> 
-    print(file) +    if (file.isDirectory()) Serial.print(", typefolder, ");  
-</file>+    else Serial.print(" type: file, "); 
 +</code
  
-Программа выводит список файлов: Имя, тип (файл или директория), 0, размер файла в байтах +Выводим размер объекта ля директории он всегда равен 0): 
 +<code arduino[enable_line_numbers="2", start_line_numbers_at="15"]> 
 +    Serial.print("size: "); 
 +    Serial.println(file.size()); 
 +</code> 
  
-<code> +В конце тела цикла открываем следующий файл в директории: 
-('boot.py', 32768, 0, 252+<code arduino[enable_line_numbers="2", start_line_numbers_at="15"]
-('init.mpy'32768, 0, 225) +    file = dir.openNextFile(); 
-('lcd_api.py', 32768, 0, 6882) +</code>  
-('esp8266_i2c_lcd.py', 32768, 0, 3293+ 
-('mfrc522.mpy', 32768, 0, 2392) +В следующих строках мы последовательно форматируем файловую систему и инициализируем ее. 
-('temp_data.csv', 32768, 0, 820)+<code arduino[enable_line_numbers="2"start_line_numbers_at="26"]> 
 +  LittleFS.format(); 
 +  LittleFS.begin();
 </code> </code>
  
-Теперь давайте создадим директорию с именем dir: +Создаем файл "test.txt", добавляем в него текст "Some text", закрываем файл и выводим содержимое корневой директории файловой системы:  
-''os.mkdir('dir')''. Если такая директория уже есть, то получим сообщение об ошибке. Если все в порядке, то директория будет создана. Теперь повторим вывод функции ilistdir()+<code arduino[enable_line_numbers="2", start_line_numbers_at="29"]> 
 +  File file = LittleFS.open("/test.txt", "w")
 +  file.print("Some text"); 
 +  file.close(); 
 +  listDir("/", false); 
 +</code> 
  
-<code> +Создаем в корневой директории директорию "dir" и снова выводим содержимое коневой директории:   
-('boot.py', 32768, 0, 252) +<code arduino[enable_line_numbers="2", start_line_numbers_at="34"]
-('init.mpy', 32768, 0, 225+  LittleFS.mkdir("/dir"); 
-('lcd_api.py', 32768, 0, 6882) +  listDir("/"false);
-('esp8266_i2c_lcd.py', 32768, 0, 3293) +
-('mfrc522.mpy', 32768, 0, 2392) +
-('temp_data.csv', 32768, 0, 820) +
-('dir', 16384, 00)+
 </code> </code>
  
-Как виднодиректория dir создалась.+Создаем в директории "dir" файл "test2.txt", добавляем в него текст и закрываем. 
 +Выводим содержимое директории "dirсначала без отображения пути файла, после с отображением:    
 +<code arduino[enable_line_numbers="2", start_line_numbers_at="37"]> 
 +  file = LittleFS.open("/dir/test2.txt", "w"); 
 +  file.print("Some other text"); 
 +  file.close(); 
 +  listDir("/dir/", false); 
 +  listDir("/dir/", true); 
 +</code>
  
-В файловых системах есть такое понятие как //путь//. Это последовательность вложенных директорий от корня файловой системы до какого-либо файла или директорииДавайте посмотрим путь до текущей директории: +Удаляем сначала файл "test2.txt" в директории "dir", после саму директориюПосле выводим содержимое корневой папки:   
-<file python Exp43-3.py[enable_line_numbers="2", start_line_numbers_at="1"]> +<code arduino[enable_line_numbers="2", start_line_numbers_at="43"]> 
-import os+  LittleFS.remove("/dir/test2.txt"); 
 +  LittleFS.rmdir("/dir"); 
 +  listDir("/", false); 
 +</code>
  
-uos.getcwd() +Переименовываем файл "test.txt" в "test_new.txt" и выводим содержимое корневой директории   
-</file> +<code arduino[enable_line_numbers="2", start_line_numbers_at="47"]
- +  LittleFS.rename("/test.txt", "/test_new.txt"); 
-Результат: +  listDir("/", false);
-<code> +
-'/'+
 </code> </code>
-Текущей директорией является / - это значит, что мы находимся в корне файловой системы. Давайте перейдем в недавно созданную нами директорию dir и повторно выведем текущую директорию 
  
-<file python Exp43-3.py[enable_line_numbers="2", start_line_numbers_at="1"]> +Ниже приведен полный вывод программы в последовательный порт:
-import os +
- +
-os.chdir('/dir'+
-uos.getcwd() +
-</file> +
- +
-Результат:+
 <code> <code>
-'/dir' 
-</code> 
-Это значит, что мы перешли в директорию /dir и сейчас она является текущей директорией. 
-Если мы сейчас запросим список файлов, то получим пустой ответ так как в директории /dir у нас нет файлов. Мы можем получить список файлов в корне или в другой директории, если укажем конкретный путь, например: 
-<code python> 
-files = os.listdir('/') 
-</code> 
  
-Вернемся обратно в корень файловой системы и удалим директорию dir: +nametest.txt type: filesize: 9
-<file python Exp43-4.py[enable_line_numbers="2"start_line_numbers_at="1"]> +
-import os+
  
-os.chdir('/') +name: dir, type: folder, size: 0 
-os.rmdir('dir'+name: test.txt type: file, size: 9
-</file>+
  
-Директорию нельзя удалить, если в ней есть вложенные файлы или директорииСначала нужно удалить их. Если все в порядке — директория удалится. Если сейчас запросить список файлов в корнето увидим, что директории dir больше нет.+name: test2.txt type: filesize: 15
  
-Также мы можем удалить файл +name: /dir/test2.txt type: file, size: 15 
-<code python> + 
-uos.remove('filename'+name: test.txt type: file, size: 9
-</code>+
  
-или переименовать файл +name: test_new.txt type: filesize: 9
-<code python> +
-uos.rename('old_name''new_name')+
 </code> </code>
  
-<WRAP center round info 60%> +Так как программа выполняется очень быстро для того, чтобы увидеть вывод в последовательный необходимо открыть вкладку последовательного порта и нажать кнопку "Reset" на лаборатории. 
-[[https://docs.micropython.org/en/latest/library/uos.html|Подробная информация о работе с файловой системой]] +
-</WRAP>+