Общие сведения:
Trema модуль - Датчик температуры и влажности, I2C-flash - является цифровым датчиком способным возвращать значение температуры окружающей среды в °C и значение относительной влажности воздуха в %.
Модуль относится к серии «Flash», а значит к одной шине I2C можно подключить более 100 модулей, так как их адрес на шине I2C (по умолчанию 0x09), хранящийся в энергонезависимой памяти, можно менять программно.
Модуль можно использовать в большинстве проектов где требуется следить за метеоданными.
Видео:
Спецификация:
- Напряжение питания: 3,3 В или 5 В (постоянного тока).
- Потребляемый ток: до 5 мА.
- Диапазон измерений температуры окружающей среды: от -40,0 до +125,0 °С.
- Диапазон измерений относительной влажности воздуха: от 0,0 до 100,0%.
- Интерфейс: I2C.
- Скорость шины I2C: 100 кбит/с.
- Адрес на шине I2C: устанавливается программно (по умолчанию 0x09).
- Уровень логической 1 на линиях шины I2C: 3,3 В (толерантны к 5 В).
- Рабочая температура: от -20 до +70 °С.
- Габариты: 30 х 30 мм.
- Вес: 4 г.
Все модули линейки "Trema" выполнены в одном формате
Подключение:
По умолчанию все модули FLASH-I2C имеют установленный адрес 0х09.
— Перед подключением 1 модуля к шине I2C настоятельно рекомендуется изменить адрес модуля.
— При подключении 2 и более FLASH-I2C модулей к шине необходимо в обязательном порядке предварительно изменить адрес каждого модуля, после чего уже подключать их к шине.
Более подробно о том, как это сделать, а так же о многом другом, что касается работы FLASH-I2C модулей, вы можете прочесть в этой статье.
Модуль подключается к шине I2C.
Для удобства подключения, предлагаем воспользоваться Trema+Expander Hat.
Модуль удобно подключать 2 способами, в зависимости от ситуации:
Способ - 1: Используя провода и Raspberry Pi
В этом случае необходимо питать модуль от 3,3 В Raspberry, как на рисунке ниже
Используя провода «Мама — Мама», подключаем напрямую к Raspberry Pi, согласно следующей таблице:
Вывод модуля | Вывод Raspberry |
---|---|
Vcc | 3.3V |
GND | GND |
SDA | GPIO 23 |
SCL | GPIO 24 |
Способ - 2: Используя Trema+Expander Hat
Подключаем к Trema+Expander Hat:
Питание:
Входное напряжение питания модуля 3,3В или 5В постоянного тока (поддерживаются оба напряжения питания), подаётся на выводы Vcc и GND.
Подробнее о модуле:
Модуль построен на базе микроконтроллера STM32F030F4 и снабжен собственным стабилизатором напряжения. Модуль самостоятельно считывает значения с датчика температуры и влажности, обрабатывает их, и возвращает запрошенные результаты.
Модуль позволяет:
- Менять свой адрес на шине I2C.
- Получать относительную влажность воздуха.
- Получать температуру окружающей среды.
- Реагировать на изменение влажности с заданным порогом чувствительности.
- Реагировать на изменение температуры с заданным порогом чувствительности.
- Задать период обновления показаний влажности и температуры.
Примеры:
Специально для работы с Trema модулем - Датчик температуры и влажности, I2C-flash, нами разработана библиотека pyiArduinoI2Csht которая позволяет реализовать все функции модуля.
Для работы с модулем необходимо включить шину I2C.
Для подключения библиотеки необходимо сначала её установить. Сделать это можно в менеджере модулей в Thonny или в терминале Raspberry, в виртуальной среде, командой:
pip install pyiArduinoI2Csht
Подробнее об установке библиотек можно узнать в этой статье.
Смена адреса модуля на шине I2C:
# Подключаем библиотеку для работы с датчиком температуры и влажности from pyiArduinoI2Csht import * import sys # Объявляем объект sht для работы с функциями и методами библиотеки pyiArduinoI2Csht. # Если при объявлении объекта указать адрес, например, sht = pyiArduinoI2Csht(0x09), # то пример будет работать с тем модулем, адрес которого был указан. sht = pyiArduinoI2Csht(auto = NO_BEGIN, bus = "/dev/i2c-3") # Если сценарию не были переданы аргументы if len(sys.argv) < 2: # Назначаем модулю адрес (0x07 < адрес < 0x7F). newAddress = 0x09 # Иначе else: # Новый адрес - первый аргумент newAddress = int(sys.argv[1]) # Если датчик найден if sht.begin(): print("Найден датчик %#.2x" % sht.getAddress()) # Если адрес удалось изменить if sht.changeAddress(newAddress): print("Адрес изменён на %#.2x" % sht.getAddress()) else: print("Адрес не изменён!") else: print("Датчик не найден!")
Для работы данного примера, на шине I2C должен быть только один датчик влажности и температуры.
Данный сценарий демонстрирует не только возможность смены адреса на
указанный в переменной newAddress
, но и обнаружение, и
вывод текущего адреса модуля на шине I2C.
Чтение всех значений модуля:
# Подключаем библиотеку для работы с датчиком температуры # и влажности I2C-flash (Sensor Humidity and Temperature). from pyiArduinoI2Csht import * from time import sleep # Объявляем объект sht для работы с функциями и методами библиотеки pyiArduinoI2Csht. # Если при объявлении объекта указать адрес, например, sht = pyiArduinoI2Csht(0x09), # то пример будет работать с тем модулем, адрес которого был указан. sht = pyiArduinoI2Csht(bus = "/dev/i2c-3") while True: # Выводим текущую температуру и влажность воздуха print("Температура = %.1f °C" % sht.getTem(), end='') print(", влажность = %.1f %%" % sht.getHum()) sleep(.5)
После запуска данного примера, в stdout будут появляться все параметры, которые может вернуть модуль: температура и влажность.
Чтение значений модуля при их изменении:
# Подключаем библиотеку для работы с датчиком температуры # и влажности I2C-flash (Sensor Humidity and Temperature). from pyiArduinoI2Csht import * from time import sleep # Объявляем объект sht для работы с функциями и методами библиотеки pyiArduinoI2Csht. # Если при объявлении объекта указать адрес, например, sht = pyiArduinoI2Csht(0x09), # то пример будет работать с тем модулем, адрес которого был указан. sht = pyiArduinoI2Csht(bus = "/dev/i2c-3") # Указываем фиксировать изменение температуры окружающей среды более чем на 0.1°С. sht.setTemChange(0.1) # Указываем фиксировать изменение влажности воздуха более чем на 1%. sht.setHumChange(1.0) while True: # Если температура окружающей среды изменилась более чем # на значение указанное в функции setTemChange(), то ... if sht.getTemChanged(): # Выводим текущую температуру окружающей среды, от -40 до +125°С. print("Температура = %.1f" % sht.getTem(), "°С.") # Если влажность воздуха изменилась более чем на значение # указанное в функции setHumChange(), то ... if sht.getHumChanged(): # Выводим текущую влажность воздуха, от 0 до 100%. print("Влажность = %.1f" % sht.getHum(), "%.") sleep(0.1)
После запуска данного примера, в stdout будут появляться показания температуры и(или) влажности, если эти показания изменились.
Описание функций библиотеки:
В данном разделе описаны функции библиотеки pyiArduinoI2Csht для работы с Trema модулем - Датчик температуры и влажности, I2C-flash.
Подключение библиотеки:
- Если адрес модуля известен (в примере используется адрес 0x09):
# Подключаем библиотеку для работы с модулем. from pyiArduinoI2Csht import * # Создаём объект sht для работы с функциями и методами библиотеки pyiArduinoI2Csht, указывая адрес модуля на шине I2C. sht = ipyiArduinoI2Csht(address = 0x09, bus ="/dev/i2c-3")
- Если адрес модуля неизвестен (адрес будет найден автоматически):
# Подключаем библиотеку для работы с модулем. from pyiArduinoI2Csht import * # Создаём объект sht для работы с функциями и методами библиотеки pyiArduinoI2Csht. sht = ipyiArduinoI2Csht(bus = "/dev/i2c-3")
При создании объекта без указания адреса, на шине должен находиться только один модуль.
Функция begin()
- Назначение: Инициализация работы с модулем.
- Синтаксис: begin()
- Параметры: Нет.
- Возвращаемое значение: результат инициализации (True или False).
- Примечание: По результату инициализации можно определить наличие модуля на шине, автоматически выполняется в конструкторе класса, для предотвращения автоматического выполнения можно передать в конструктор класса второе значение, отличное от 0 или константу NO_BEGIN. Например sht = pyiArduinoI2Csht(None, NO_BEGIN) или sht = pyiArduinoI2Csht(0x09, NO_BEGIN).
- Пример:
if sht.brgin(): print("Модуль найден и инициирован!" ) else: print("Модуль не найден на шине I2C" )
Функция reset()
- Назначение: Перезагрузка модуля.
- Синтаксис: reset()
- Параметры: Нет.
- Возвращаемое значение: результат перезагрузки (True или False).
- Пример:
if sht.reset(): print("Модуль перезагружен") else: print("Модуль не перезагружен")
Функция changeAddress()
- Назначение: Смена адреса модуля на шине I2C.
- Синтаксис: changeAddress( АДРЕС );
- Параметры:
- АДРЕС - новый адрес модуля на шине I2C (целое число от 0x08 до 0x7E)
- Возвращаемое значение: результат смены адреса (True или False).
- Примечание: Текущий адрес модуля можно узнать функцией getAddress().
- Пример:
if sht.changeAddress(0x12): print("Адрес модуля изменён на 0x12") else: print("Не удалось изменить адрес")
Функция getAddress()
- Назначение: Запрос текущего адреса модуля на шине I2C.
- Синтаксис: getAddress()
- Параметры: Нет.
- Возвращаемое значение: АДРЕС - текущий адрес модуля на шине I2C (от 0x08 до 0x7E)
- Примечание: Функция может понадобиться если адрес модуля не указан при создании объекта, а обнаружен библиотекой.
- Пример:
print("Адрес модуля на шине I2C = %#.2X" % sht.getAddress())
Функция getVersion()
- Назначение: Запрос версии прошивки модуля.
- Синтаксис: getVersion()
- Параметры: Нет
- Возвращаемое значение: ВЕРСИЯ - номер версии прошивки от 0 до 255.
- Пример:
print("Версия прошивки модуля =", sht.getVersion())
Функция getTem()
- Назначение: Запрос текущей температуры окружающей среды в °C.
- Синтаксис: getTem()
- Параметры: Нет.
- Возвращаемое значение: температура окружающей среды от -40.0 до +125.0 °С.
- Пример:
print( "Температура =", sht.getTem(), "°С")
Функция getHum()
- Назначение: Запрос текущей относительной влажности воздуха в процентах.
- Синтаксис: getHum()
- Параметры: Нет.
- Возвращаемое значение: относительная влажность воздуха от 0.0 до 100.0%.
- Примечание:
- Пример:
print("Влажность =", sht.getHum(), "%");
Функция getTemChanged()
- Назначение: Запрос подтверждения изменения температуры.
- Синтаксис: getTemChanged()
- Параметр: Нет.
- Возвращаемое значение: подтверждение изменения температуры (True или False).
- Примечание:
- Функция возвращает положительный результат
True
, если с момента последнего положительного результата, температура изменилась на значение указанное функциейsetTemChange()
.
- Функция возвращает положительный результат
Функция setTemChange();
- Назначение: Установка порога чувствительности фиксации изменения температуры.
- Синтаксис: setTemChange( ПОРОГ )
- Параметры: ПОРОГ - значение от 0,1 до 25,5 °C.
- Возвращаемое значение: результат применения новых настроек (True или False).
- Примечание:
- Данная функция определяет, как сильно должна измениться температура,
чтоб функция
getTemChanged()
вернулаTrue
.
- Данная функция определяет, как сильно должна измениться температура,
чтоб функция
- Пример:
sht.setTemChange(2.0); # Указываем реагировать на изменения в 2°С. while True: # if sht.getTemChanged(): # Если температура изменилась, то ... print( "Температура =", # sht.getTem(), # Выводим текущую температуру. "°C.") #
Функция getHumChanged()
- Назначение: Запрос подтверждения изменения влажности.
- Синтаксис: getHumChanged()
- Параметр: Нет.
- Возвращаемое значение: подтверждение изменения влажности (True или False).
- Примечание:
- Функция возвращает положительный результат
True
, если с момента последнего положительного результата, влажность изменилась на значение указанное функциейsetHumChange()
.
- Функция возвращает положительный результат
Функция setHumChange()
- Назначение: Установка порога чувствительности фиксации изменения влажности.
- Синтаксис: setHumChange( ПОРОГ )
- Параметры: ПОРОГ - значение от 0,1 до 25,5 %.
- Возвращаемое значение: результат применения новых настроек (True или False).
- Примечание:
- Данная функция определяет, как сильно должна измениться влажность,
чтоб функция
getHumChanged()
вернулаTrue
.
- Данная функция определяет, как сильно должна измениться влажность,
чтоб функция
- Пример:
sht.setHumChange(5.0); # Указываем реагировать на изменения в 5%. while True: # if sht.getHumChanged(): # Если влажность изменилась, то ... print("Влажность =", # sht.getHum()) # Выводим текущую влажность.
Функция setPeriod()
- Назначение: Установка периода обновления данных модуля.
- Синтаксис: setPeriod( ВРЕМЯ )
- Параметр:
- ВРЕМЯ - значение от 0,2 до 25,5 секунд.
- Возвращаемое значение: результат сохранения настроек (True или False).
- Примечание:
- Период обновления данных модуля определяет, как часто модуль должен обновлять данные своих датчиков. Значение по умолчанию 0,5 секунд.
- Увеличение времени между обновлениями данных может сократить энергопотребление модуля.
- Не рекомендуется устанавливать период обновления данных ниже 0,5 секунд.
- Пример:
sht.setPeriod(1.0)
Функция changeBus()
- Назначение: Установка шины I2C
- Синтаксис: changeBus( ПУТЬ К ФАЙЛУ ШИНЫ )
- Параметр:
- ПУТЬ К ФАЙЛУ ШИНЫ - строка
- Возвращаемые значения: Нет.
- Примечание:
- Пример:
# Меняем шину sht.changeBus("/dev/i2c-3")
Обсуждение