Компактный breakout для DHT температуры и влажности на Raspberry Pi — ATtiny85 и DHT22/DHT11
Аппаратные компоненты: Atmel ATTiny85 × 1, DHT22 Temperature Sensor × 1, DHT11 Temperature & Humidity Sensor × 1, SparkFun Tiny AVR Programmer × 1, Adafruit 4.7K Ω Resistor × 3, Adafruit 10K Ω Resistor × 1, Adafruit 100 Ω Resistor × 1, Adafruit Diffused Blue 3mm LED × 1, Adafruit Tactile Button Switch × 1, Adafruit Break-away 0.1″ 36-pin strip male header 1 piece @ length 6, 1 piece @ length 2 (total 8 pins) × 1, Generic Jumper (0.1″) × 1, Arduino UNO & Genuino UNO Optional – для отладки и тестирования. × 1
Программные приложения и онлайн-сервисы: Microsoft Visual Studio 2015, Microsoft Windows 10 IoT Core, Arduino IDE
ИСТОРИЯ
Введение
Датчики DHT11 и DHT22 популярны благодаря своей точности при очень низкой стоимости. Одна проблема с ними — они работают по проприетарному однопроводному протоколу, требующему точной синхронизации. Эти датчики оказались сложны для чтения на платах с не-реально-временными ОС.
Недавно я публиковал статью «DHT11 /DHT22 Temperature Sensor», демонстрирующую использование Microsoft C++ примера из C# для чтения этих датчиков. Библиотека получала показания, но мне пришлось добавить логику повторных попыток для надёжности. Это работало для большинства, но у некоторых были проблемы с последовательностью.
Учитывая интерес к использованию этих датчиков на Raspberry Pi под Windows 10 IoT Core, я решил создать второй вариант, обеспечивающий очень надёжное чтение при сохранении низкой стоимости.
Обзор
Подход здесь — подключить DHT-датчик к недорогому ATtiny85 и настроить его как I2C-slave устройство. Это достигается с помощью библиотеки TinyWireS и создания набора регистров, которые можно читать и писать для взаимодействия с устройством.
Устройство поддерживает следующие функции:
- Настраиваемый интервал чтения для указания частоты опроса DHT. По умолчанию — каждые 2 секунды.
- Ручной режим, отключающий интервал и берущий показание по запросу.
- Настраиваемые верхний и нижний пороги температуры, триггерящие прерывание при выходе за пределы.
- Режим сохранения конфигурации, позволяющий восстанавливать настройки при включении питания или сбросе.
- Сброс конфигурации к значениям по умолчанию.
- Управление питанием датчика для включения/выключения питания датчика для экономии энергии.
- Программируемый I2C-адрес устройства. По умолчанию 0x26, но можно изменить командой. Устройство запоминает адрес. При сбросе адрес возвращается к 0x26. C# библиотека также включает код для сканирования устройства на I2C-шине, так что не нужно знать адрес для подключения.
- Программируемый выбор модели DHT. Прошивка по умолчанию для DHT22, но можно сменить командой. Модель сохраняется и сохраняется после перезагрузки/цикла питания.
Исходный код
В проекте три набора кода. Основная прошивка платы, Arduino master-скетч для тестирования и демонстрации платы, подключённой к Arduino Uno, и Windows 10 IoT Code приложение, демонстрирующее использование устройства с Raspberry Pi. Весь код доступен в связанном GitHub-репозитории.
Схема устройства/цепи
Схема компактна и использует несколько недорогих компонентов. ATtiny85 можно приобрести у нескольких вендоров. Рекомендую взять несколько — у них много полезных применений.
Схема имеет шестиконтактный разъём для подключения либо к другой схеме, либо напрямую к Raspberry Pi. Пины определены так:
- GND → Подключите к земле вашей схемы или к пину GND на Raspberry Pi.
- RST → Этот пин используется для сброса/перезагрузки устройства. В нормальной работе должен быть подключён к 5В. Для сброса подайте кратковременный LOW-импульс.
- INT → У этого пина две цели. Когда пороги включены, этот пин будет HIGH при превышении порога и LOW иначе. В режиме экономии питания этот пин используется для пробуждения устройства кратковременным HIGH-импульсом.
- SDA → I2C SDA линия.
- SCL → I2C SCL линия.
- 5V → 5V питание.
Также есть двухконтактный разъём, где джампер можно добавить для включения или убрать для выключения onboard LED.
При использовании в большем проекте схема DHT Tiny может быть объединена или встроена в существующую схему проекта. В этом случае хедер-пины и LED опциональны.
Схему также можно собрать на отдельной плате и подключить к Raspberry Pi несколькими проводами или кабелем.
Прошивка ATtiny85
Загрузите скетч DHT_Tiny_Breakout.ino на ATtiny85 с помощью вашего AVR-программатора. Если у вас нет программатора, можно использовать Arduino Uno (или похожую плату). Посмотрите одну или несколько статей ниже для помощи.
- Programming ATtiny85 with Arduino Uno на Hackster.io
- Virtual Workshop: Program an ATTiny85 with Arduino
- Programming an ATtiny w/ Arduino 1.6 (or 1.0)
- Programming an ATtiny w/ Arduino 0022
Я использую SparkFun Tiny AVR Programmer для прошивки ATtiny85.
Я запускаю чип на 16 МГц. См. мою статью «ATtiny @ 16MHz» для инструкций.
При использовании ATtiny85, слейв-скетч требует библиотеку TinyWireS в папке libraries. Её можно скачать с https://github.com/rambo/TinyWire.
Сборка на макетной плате
Первый шаг — запустить DHT Tiny на макетной плате. Используя полуразмерную макетную плату, соберите схему по схематике и диаграммам макетной платы, входящим в проект.
Несколько советов для упрощения:
- Соберите DHT Tiny на отдельной макетной плате, а другую используйте для соединения между DHT Tiny и Uno или Raspberry Pi.
- Рекомендуется использовать хедер-пины — так легче подключать и отключать DHT Tiny как единый блок.
- Если планируете использовать стандартные break-away male хедера на макетной плате, нужно отрегулировать чёрный пластиковый ободок к центру пинов, чтобы они вставали в макетную плату (см. фото ниже). Используйте плоскогубцы для регулировки.
- Если есть extra-long break-away 0.1″ male хедера, используйте их на макетной плате. Для пайки на ПП лучше обычные размеры. Extra-long не рекомендуются для ПП.
- Понадобятся female-female перемычки, если используете хедер-пины на макетной плате. Если их нет, опустите хедер-пины и используйте male-male перемычки между двумя платами.
- Держите провода подальше от чипа, чтобы легче было засунуть пальцы и вытащить чип для перепрошивки.
Ниже несколько фото макетной версии моего DHT Tiny.
Подключение Arduino Uno
Если вас интересует быстрый тест, демонстрация или у вас проблемы с Raspberry Pi, можно подключить DHT Tiny к Arduino Uno (или похожему устройству).
- Подключите GND пин к GND на Uno.
- Подключите 5V пин к 5V на Uno.
- Подключите RST пин к D4 на Uno.
- Подключите SDA пин к A4 на Uno.
- Подключите SCL пин к A5 на Uno.
- Подключите INT пин к D3 на Uno и включите LED через джампер.
Загрузите и запустите скетч DHT_Tiny_Master.ino. Он будет выводить данные в Serial Monitor.
При подключении I2C между двумя платами важно иметь подтягивающие резисторы на SDA и SCL. В этой схеме два резистора 4.7K Ω между пинами и 5V.
Ниже фото DHT Tiny на макетной плате, подключённого к Arduino Uno.
Подключение к Raspberry Pi
Если вас интересует быстрый тест, демонстрация или проблемы с Raspberry Pi, можно подключить DHT Tiny к Arduino Uno (или похожему устройству).
- Подключите GND пин к GND (пин 9) на Raspberry Pi 2/3.
- Подключите 5V пин к 5V (пин 2) на Raspberry Pi 2/3.
- Подключите RST пин к GPIO4 (пин 7) на Raspberry Pi 2/3.
- Подключите SDA пин к SDA (пин 3) на Raspberry Pi 2/3.
- Подключите SCL пин к SCL (пин 5) на Raspberry Pi 2/3.
- Подключите INT пин к GPIO17 (пин 11) и включите LED.
При подключении I2C между платами важно иметь подтягивающие резисторы на SDA и SCL. В этой схеме два резистора 4.7K Ω между пинами и 3V3.
ОЧЕНЬ ВАЖНО! Плата DHT Tiny будет питаться от 5V пина Raspberry Pi, но подтягивающие резисторы должны быть подключены к 3V3 пину Raspberry Pi (3V3 на пинах 1 и 17).
Ниже фото DHT Tiny на макетной плате, подключённого к Raspberry Pi 3.
Запуск Windows 10 приложения
Получите код из GitHub-репозитория (ссылка внизу проекта) и распакуйте к себе. Откройте исходники Universal Application в Visual Studio 2015 и либо задеплойте на Raspberry Pi, запустив из админ-консоли, либо запустите в debug-режиме из Visual Studio.
Если это первый запуск кода из Visual Studio для Windows 10 IoT Core, посмотрите статьи Microsoft:
- Deploying an App with Visual Studio
- Windows Device Portal
Посмотрите видео-демонстрацию ниже, чтобы увидеть приложение в действии на Raspberry Pi 3, подключённом к DHT Tiny.
Основные моменты приложения
Windows 10 UWP приложение — демонстрация, показывающая все фичи DHT Tiny. Код отображает текущую температуру, влажность и другие значения регистров с устройства. UI также позволяет менять конфигурацию устройства, включая адрес устройства.
Библиотека DHT Tiny
Пример кода использует библиотеку для взаимодействия с DHT Tiny. Библиотека готова к использованию и может быть включена прямо во все ваши приложения.
Получение библиотеки из NuGet
Если не хотите включать проект напрямую, просто скачайте библиотеку DHT Tiny из NuGet командой ниже. Откройте Package Manager Console в Visual Studio и введите:
PM> Install-Package IoT.DhtTiny
Сканирование I2C-шины для поиска устройства
Библиотека DHT Tiny включает метод, сканирующий I2C-шину на наличие DHT Tiny устройств и возвращающий список адресов. Этот список можно использовать для инициализации одного или нескольких найденных устройств. Особенно полезно, если вы меняли адрес устройства, но не помните, на что установили. Callback-метод опционален.
// ***
// *** Enumerate the DHT Tiny devices on the i2c bus.
// ***
IEnumerable<byte> address = await DhtTiny.FindAllDhtTinyAsync(this.FindAllDhtTinyCallback);
// ***
// *** Call back method
// ***
private void FindAllDhtTinyCallback(I2cScanEventArgs e) {
int percentComplete = (int)((double)e.CurrentIndex / (double)e.Total * 100.0d);
this.Status = string.Format("Locating devices [0x{0:X2}] [{1}%] [Found = {2:##0}]...", e.CurrentAddress, percentComplete, e.Items.Count());
}
Схемы DHT Tiny Breakout для Raspberry Pi
Демонстрация софта
Это видео демонстрирует Universal Application, работающее на Raspberry Pi 3, подключённом к DHT Tiny на макетной плате.
[VIDEO COMING SOON]
Создание готового устройства
Самый простой и дешёвый способ сделать плату — использовать прототипную плату PCB, например Perma-Proto Quarter-sized Breadboard PCB от Adafruit. На изображении ниже показан breakout с этой прототипной платой. Я использовал дремель, чтобы снять секции питания платы.
See More: DHT Tiny Breakout for the Raspberry Pi
Производственный процесс
- Профессиональный мониторинг температуры на Raspberry Pi с датчиком DS18B20
- Сборка уличной метеостанции на Raspberry Pi 2 и ADS‑WS1
- Чтение аналоговых датчиков на Raspberry Pi без встроенного АЦП
- Подключение ультразвукового датчика HC-SR04 к Raspberry Pi — практическое руководство
- Лучшие аксессуары для раскрытия полного потенциала Raspberry Pi
- Использование АЦП MCP3008 для чтения аналоговых датчиков с Raspberry Pi
- SIGHT: умные очки для слабовидящих на Raspberry Pi
- SparkFun Qwiic HAT для Raspberry Pi: полное руководство по подключению
- Установка Windows 10 IoT Core на Raspberry Pi 3 Model B+: Пошаговое руководство
- Создайте своего робота на Raspberry Pi с набором MonkMakes RRB2 — подробное руководство