Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:laboratory_iot_c:exp42 [2024/12/01 15:41] – [Программный код эксперимента] labuser30products:laboratory_iot_c:exp42 [2024/12/01 15:59] (текущий) – [Программный код эксперимента] labuser30
Строка 40: Строка 40:
  
 ==== Программный код эксперимента ==== ==== Программный код эксперимента ====
-<file python Exp42.py[enable_line_numbers="2", start_line_numbers_at="1"]>+<file arduino Exp42.ino[enable_line_numbers="2", start_line_numbers_at="1"]>
 #include <OneWire.h> #include <OneWire.h>
 #include <DallasTemperature.h> #include <DallasTemperature.h>
Строка 85: Строка 85:
     lcd.print(temp_inroom, 1);       lcd.print(temp_inroom, 1);  
          
-    Serial.print("."); 
-    File f = LittleFS.open("/temp_data.csv", "a"); 
     String s = String(temp_outodor, 1) + ";" +  String(temp_inroom, 1) + "\n";     String s = String(temp_outodor, 1) + ";" +  String(temp_inroom, 1) + "\n";
     s.replace('.', ',');     s.replace('.', ',');
 +    
 +    File f = LittleFS.open("/temp_data.csv", "a");
     f.print(s);     f.print(s);
     f.close();     f.close();
 +    
 +    Serial.print(".");
     delay(2000);      delay(2000); 
   }   }
Строка 106: Строка 108:
 </file> </file>
  
-По сравнений с прошлой программой мы добавили код для работы с файлом и подготовки данных для записи в него. Рассмотрим эти части подробнее.+По сравнений с прошлой программой мы перенесли код работы с датчиками из бесконечного цикла в конечный, добавили код для работы с файлом и подготовки данных для записи в него. Рассмотрим эти части подробнее.
  
-Переводим температуру из чисел в строки: +Создаем строку из чисел для записи в файл. Строка состоит из температуры в комнате, символа разделителя данных '';'', температуры на улице и символа перехода на новую строку ''\n''. Без ''\n'' всё записывалось бы в одну строку. 
-<code python[enable_line_numbers="2", start_line_numbers_at="49"]> +<code arduino[enable_line_numbers="2", start_line_numbers_at="45"]> 
-    string_inroom_temp str(inroom_temp) +  String s String(temp_outodor, 1+ ";" +  String(temp_inroom, 1+ "\n";
-    string_outodor_temp = str(outodor_temp)+
 </code> </code>
  
-Python использует точку как десятичный разделитель. Однако русские версии программ, вроде Excel и OpenOffice Calc используют запятую. Поэтому, чтобы в дальнейшем работать с файлом в этих программах, нам нужно заменить точку на запятую: +Arduino использует точку как десятичный разделитель. Однако русские версии программ, вроде Excel и OpenOffice Calc используют запятую. Поэтому, чтобы в дальнейшем работать с файлом в этих программах, нам нужно заменить точку на запятую: 
-<code python[enable_line_numbers="2", start_line_numbers_at="52"]> +<code arduino[enable_line_numbers="2", start_line_numbers_at="46"]> 
-    string_inroom_temp = re.sub('\.', ',', string_inroom_temp) +  s.replace('.', ',');
-    string_outodor_temp = re.sub('\.', ',', string_outodor_temp)+
 </code> </code>
  
 Далее идет работа с файлом. Открываем файл. Дескриптор открытого файла оказывается в переменной f.  Далее идет работа с файлом. Открываем файл. Дескриптор открытого файла оказывается в переменной f. 
-<code python[enable_line_numbers="2", start_line_numbers_at="55"]> +<code arduino[enable_line_numbers="2", start_line_numbers_at="48"]> 
-    f = open('temp_data.csv''a')+  File f = LittleFS.open("/temp_data.csv""a");
 </code> </code>
  
Строка 128: Строка 128:
  
 Записываем в файл строку: Записываем в файл строку:
-<code python[enable_line_numbers="2", start_line_numbers_at="56"]> +<code arduino[enable_line_numbers="2", start_line_numbers_at="49"]> 
-    written = f.write(string_inroom_temp + ';' + string_outodor_temp + "\n")+  f.print(s);
 </code> </code>
-Строка состоит из температуры в комнате, символа разделителя данных '';'', температуры на улице и символа перехода на новую строку ''\n''. Без ''\n'' всё записывалось бы в одну строку. 
  
 После записи закрываем файл: После записи закрываем файл:
-<code python[enable_line_numbers="2", start_line_numbers_at="57"]> +<code arduino[enable_line_numbers="2", start_line_numbers_at="50"]> 
-    f.close()+  f.close();
 </code> </code>
  
-Запустим программу и дадим ей некоторое время поработать, чтобы она успела накопить несколько измерений в файле. После чего проверим что в него записалось. Для этого открываем файловый менеджер <span menu> +Далее открываем файл уже в режиме чтения - ''r'', в цикле ''while'' печатаем строки файла в последовательный порт пока файл не закончиться, и закрываем файл.   
-<span menu-item>Device</span+<code arduino[enable_line_numbers="2", start_line_numbers_at="50"]
-<span menu-item>Filemanager</span> +  File f = LittleFS.open("/temp_data.csv", "r"); 
-</spanили иконка {{:products:2020-05-04_15-35-38.png?nolink|}} +  while(f.available()) Serial.write(f.read()); 
- +  f.close(); 
-Открывается окно файлового менеджера: +</code>
-{{ :products:esp-iot:2020-05-23_16-12-37.png?nolink |}}+
  
-Выбираем наш файл и нажимаем ''Download...''. Указываем место для сохранения и сохраняем. Для просмотра содержимого откроем файл с помощью обычного Блокнота:+Запустим программу и дождемся ее выполнения. Это займет 1 минуту, после чего записанные в файл данные будут выведены в последовательный порт.
  
-{{ :products:esp-iot:2020-05-23_16-17-59.png?nolink |}}+К сожалению при использовании Arduino IDE отсутствует удобный способ скачать созданный файл на компьютерПоэтому предлагаем создать с помощью блокнота текстовый файл, скопировать в него выведенные в последовательный порт данные и сохранить файл с расширением .csv.  
  
-В файле видим то, чего и ожидали. Данные о температуре в формате CSV. Читать такие данные достаточно неудобно, поэтому откроем их с помощью Excel:+Читать такие данные достаточно неудобно, поэтому откроем их с помощью Excel:
  
 {{ :products:esp-iot:2020-05-23_16-20-37.png?nolink |}} {{ :products:esp-iot:2020-05-23_16-20-37.png?nolink |}}