Показаны различия между двумя версиями страницы.
Следующая версия | Предыдущая версия | ||
products:laboratory_iot_c:exp42 [2024/12/01 14:14] – создано labuser30 | products:laboratory_iot_c:exp42 [2024/12/01 15:59] (текущий) – [Программный код эксперимента] labuser30 | ||
---|---|---|---|
Строка 19: | Строка 19: | ||
// | // | ||
- | ==== Программный код эксперимента ==== | + | ===== Эксперимент |
- | <file python Exp42.py[enable_line_numbers=" | + | |
- | from machine import Pin, I2C | + | |
- | from esp8266_i2c_lcd import I2cLcd | + | |
- | import time | + | |
- | import math | + | |
- | import onewire | + | |
- | import ds18x20 | + | |
- | import re | + | |
- | _init() | + | Добавим функцию записи данных в файл. Для записи выберем формат файла CSV. |
+ | CSV (от англ. Comma-Separated Values — значения, | ||
- | Bcoef = 3950 | + | Одна строка файла будет соответствовать одному измерению температуры. Первым числом будет температура в комнате, |
- | R1 = 10000 | + | |
- | Rtnom = 10000 | + | |
- | T0 = 273.15 | + | |
- | adc = machine.ADC(0) | + | < |
- | ow = onewire.OneWire(Pin(12)) | + | 23,2;12,0 |
- | ds = ds18x20.DS18X20(ow) | + | 24,2;13,0 |
+ | 24,1;13,2 | ||
+ | </ | ||
+ | Формат CSV имеет широкое распространение, | ||
- | DEFAULT_I2C_ADDR | + | ==== Схема эксперимента ==== |
+ | Схема эксперимента | ||
+ | {{ : | ||
+ | //Рисунок 1. Монтажная | ||
+ | ==== Программный код эксперимента ==== | ||
+ | <file arduino Exp42.ino[enable_line_numbers=" | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
- | i2c = I2C(scl=Pin(5), | + | #define ACD_PIN A0 |
- | lcd = I2cLcd(i2c, DEFAULT_I2C_ADDR, | + | #define BUS_PIN 12 |
- | lcd.backlight_on() | + | #define DEFAULT_I2C_ADDR 0x3F // Или 0x27 в зависимости от твоей платы IoT |
+ | const int Bcoef = 3950; | ||
+ | const int R1 = 10000; | ||
+ | const int Rtnom = 10000; | ||
+ | const float T0 = 273.15; | ||
- | while True: | + | OneWire oneWire(BUS_PIN); |
- | value = adc.read() | + | DallasTemperature sensors(& |
+ | LCDI2C_Generic lcd(DEFAULT_I2C_ADDR, | ||
- | R = (-R1 * value)/ | + | void setup() { |
- | | + | Serial.begin(9600); |
- | outodor_temp = round(temp, | + | Serial.println(); |
+ | sensors.begin(); | ||
+ | lcd.init(); | ||
+ | lcd.setBacklight(0); | ||
+ | |||
+ | LittleFS.format(); | ||
+ | LittleFS.begin(); | ||
+ | |||
+ | Serial.print(" | ||
+ | |||
+ | for(int i = 0; i < 30; i++) { | ||
+ | int value = analogRead(ACD_PIN); | ||
+ | float R2 = (-R1 * value) / (value - 1023); | ||
+ | | ||
- | | + | |
- | | + | |
- | temp = ds.read_temp(roms[0]) | + | |
- | inroom_temp = round(temp, | + | |
- | print(" | + | |
- | print('In room: ' + str(inroom_temp)) | + | lcd.print(" |
+ | lcd.println(temp_outodor, | ||
+ | | ||
+ | lcd.print(temp_inroom, | ||
| | ||
- | | + | |
- | lcd.putstr("Outodor: | + | |
- | | + | |
- | | + | File f = LittleFS.open("/ |
- | + | f.print(s); | |
- | | + | f.close(); |
- | | + | |
+ | | ||
+ | | ||
+ | } | ||
- | string_inroom_temp = re.sub(' | + | Serial.println(); |
- | | + | |
- | | + | File f = LittleFS.open("/temp_data.csv", " |
- | | + | |
- | f.close() | + | f.close(); |
+ | } | ||
- | time.sleep(5) | + | void loop() { |
+ | } | ||
</ | </ | ||
- | По сравнений с прошлой программой мы добавили код для работы с файлом и подготовки данных для записи в него. Рассмотрим эти части подробнее. | + | По сравнений с прошлой программой мы перенесли код работы с датчиками из бесконечного цикла в конечный, |
- | Переводим температуру из чисел в строки: | + | Создаем строку из чисел для записи |
- | < | + | < |
- | | + | |
- | string_outodor_temp = str(outodor_temp) | + | |
</ | </ | ||
- | Python | + | Arduino |
- | < | + | < |
- | | + | s.replace(' |
- | string_outodor_temp = re.sub(' | + | |
</ | </ | ||
Далее идет работа с файлом. Открываем файл. Дескриптор открытого файла оказывается в переменной f. | Далее идет работа с файлом. Открываем файл. Дескриптор открытого файла оказывается в переменной f. | ||
- | < | + | < |
- | f = open('temp_data.csv', 'a') | + | |
</ | </ | ||
Строка 104: | Строка 128: | ||
Записываем в файл строку: | Записываем в файл строку: | ||
- | < | + | < |
- | | + | f.print(s); |
</ | </ | ||
- | Строка состоит из температуры в комнате, | ||
После записи закрываем файл: | После записи закрываем файл: | ||
- | < | + | < |
- | f.close() | + | f.close(); |
</ | </ | ||
- | Запустим программу и дадим ей некоторое время поработать, | + | Далее открываем файл уже в режиме чтения - '' |
- | <span menu-item> | + | <code arduino[enable_line_numbers=" |
- | <span menu-item> | + | File f = LittleFS.open(" |
- | </span> или иконка {{: | + | while(f.available()) Serial.write(f.read()); |
- | + | f.close(); | |
- | Открывается окно файлового менеджера: | + | </code> |
- | {{ : | + | |
- | Выбираем наш файл | + | Запустим программу и дождемся ее выполнения. Это займет 1 минуту, |
- | {{ : | + | К сожалению при использовании Arduino IDE отсутствует удобный способ скачать созданный файл на компьютер. Поэтому предлагаем создать с помощью блокнота текстовый файл, скопировать в него выведенные в последовательный порт данные и сохранить файл с расширением .csv. |
- | В файле видим то, чего и ожидали. Данные о температуре в формате CSV. Читать такие данные достаточно неудобно, | + | Читать такие данные достаточно неудобно, |
{{ : | {{ : |