Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
| products:laboratory_iot:exp42 [2020/05/23 15:50] – создано labuser29 | products:laboratory_iot:exp42 [2024/12/01 14:13] (текущий) – labuser30 | ||
|---|---|---|---|
| Строка 4: | Строка 4: | ||
| CSV (от англ. Comma-Separated Values — значения, | CSV (от англ. Comma-Separated Values — значения, | ||
| - | Одна строка файла будет соответствовать одному измерению температуры. Первым числом | + | Одна строка файла будет соответствовать одному измерению температуры. Первым числом будет температура в комнате, |
| < | < | ||
| Строка 11: | Строка 11: | ||
| 24,1;13,2 | 24,1;13,2 | ||
| </ | </ | ||
| + | |||
| + | Формат CSV имеет широкое распространение, | ||
| + | |||
| + | ==== Схема эксперимента ==== | ||
| + | Схема эксперимента остается неизменной | ||
| + | {{ : | ||
| + | // | ||
| + | |||
| + | ==== Программный код эксперимента ==== | ||
| + | <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() | ||
| + | |||
| + | Bcoef = 3950 | ||
| + | R1 = 10000 | ||
| + | Rtnom = 10000 | ||
| + | T0 = 273.15 | ||
| + | |||
| + | adc = machine.ADC(0) | ||
| + | ow = onewire.OneWire(Pin(12)) | ||
| + | ds = ds18x20.DS18X20(ow) | ||
| + | |||
| + | |||
| + | DEFAULT_I2C_ADDR = 0x3F # Или 0x27 в зависимости от модели микросхемы на плате | ||
| + | |||
| + | |||
| + | i2c = I2C(scl=Pin(5), | ||
| + | lcd = I2cLcd(i2c, DEFAULT_I2C_ADDR, | ||
| + | lcd.backlight_on() | ||
| + | |||
| + | |||
| + | while True: | ||
| + | value = adc.read() | ||
| + | |||
| + | R = (-R1 * value)/ | ||
| + | temp = 1 / (math.log(R / Rtnom) / Bcoef + 1/(25+T0)) -T0 | ||
| + | outodor_temp = round(temp, | ||
| + | |||
| + | roms = ds.scan() | ||
| + | ds.convert_temp() | ||
| + | temp = ds.read_temp(roms[0]) | ||
| + | inroom_temp = round(temp, | ||
| + | |||
| + | print(" | ||
| + | print(' | ||
| + | | ||
| + | lcd.clear() | ||
| + | lcd.putstr(" | ||
| + | lcd.move_to(0, | ||
| + | lcd.putstr(" | ||
| + | |||
| + | string_inroom_temp = str(inroom_temp) | ||
| + | string_outodor_temp = str(outodor_temp) | ||
| + | |||
| + | string_inroom_temp = re.sub(' | ||
| + | string_outodor_temp = re.sub(' | ||
| + | |||
| + | f = open(' | ||
| + | written = f.write(string_inroom_temp + ';' | ||
| + | f.close() | ||
| + | |||
| + | time.sleep(5) | ||
| + | </ | ||
| + | |||
| + | По сравнений с прошлой программой мы добавили код для работы с файлом и подготовки данных для записи в него. Рассмотрим эти части подробнее. | ||
| + | |||
| + | Переводим температуру из чисел в строки: | ||
| + | <code python[enable_line_numbers=" | ||
| + | string_inroom_temp = str(inroom_temp) | ||
| + | string_outodor_temp = str(outodor_temp) | ||
| + | </ | ||
| + | |||
| + | Python использует точку как десятичный разделитель. Однако русские версии программ, | ||
| + | <code python[enable_line_numbers=" | ||
| + | string_inroom_temp = re.sub(' | ||
| + | string_outodor_temp = re.sub(' | ||
| + | </ | ||
| + | |||
| + | Далее идет работа с файлом. Открываем файл. Дескриптор открытого файла оказывается в переменной f. | ||
| + | <code python[enable_line_numbers=" | ||
| + | f = open(' | ||
| + | </ | ||
| + | |||
| + | Файл открывается с помощью оператора '' | ||
| + | |||
| + | Записываем в файл строку: | ||
| + | <code python[enable_line_numbers=" | ||
| + | written = f.write(string_inroom_temp + ';' | ||
| + | </ | ||
| + | Строка состоит из температуры в комнате, | ||
| + | |||
| + | После записи закрываем файл: | ||
| + | <code python[enable_line_numbers=" | ||
| + | f.close() | ||
| + | </ | ||
| + | |||
| + | Запустим программу и дадим ей некоторое время поработать, | ||
| + | <span menu-item> | ||
| + | <span menu-item> | ||
| + | </ | ||
| + | |||
| + | Открывается окно файлового менеджера: | ||
| + | {{ : | ||
| + | |||
| + | Выбираем наш файл и нажимаем '' | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | В файле видим то, чего и ожидали. Данные о температуре в формате CSV. Читать такие данные достаточно неудобно, | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | Excel автоматически распознал формат CSV и занес данные с " | ||
| + | <span menu> | ||
| + | <span menu-item> | ||
| + | <span menu-item> | ||
| + | </ | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | Датчик DS18B20 измерял у нас температуру в комнате, | ||