КОРЗИНА
магазина
8 (499) 500-14-56 | ПН. - ПТ. 12:00-18:00
ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"

Датчик температуры и влажности, FLASH-I2C (Trema-модуль), подключаем к Raspberry

Общие сведения:

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")

Ссылки:




Обсуждение

Гарантии и возврат Используя сайт Вы соглашаетесь с условями