Различия

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

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

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