Приветствую читателей Habr! В этой статье расскажу вам о своём очередном zigbee проекте беспроводного датчика. Проект называется Efekta THP_LR THP, это небольшой датчик измерения температуры и влажности воздуха на чипе СС2530. Есть несколько модификаций датчика, в одном из вариантов датчик дополнительно измеряет атмосферное давление. Ещё в одном варианте датчик работает на радиомодуле СС2530 с усилителем сигнала. В этом варианте возможна установка радиомодуля с печатной антенной или с выносной. Все модификации датчика работают на батарейках ААА, это обеспечивает длительный срок работы на одном комплекте батареек. Датчик предназначен для работы в сетях Zigbee. Проект с открытым исходным кодом.
Идея разработки этого датчика базировалась на потребности в недорогом датчике температуры для размещения на улице. Опыт использования готовых датчиков с Алиэкспресс на улице показал, что есть несколько нюансов, которые было бы здорово решить.
- Батарейки, которые используются в готовых датчиках, очень плохо держат заряд при минусовых температурах.
- Дальность передачи данных при использовании на улице тоже чаще недостаточна, приходилось где-то в доме и недалеко от уличного датчика размещать роутер.
- Также очень важным моментом при разработке собственного diy датчика является софтовая часть, тут я сам могу решать, что, как и c каким временным интервалом датчик будет читать сенсоры и отправлять данные.
Плата датчика разрабатывалась в программе DipTrace, разработка заняла несколько дней. Плата датчика получился в размерах 29мм х 67мм. Место под напайку радиомодуля сделал универсальным, для возможности установки нескольких видов радиомодулей: EBYTE E18-MS1-PCB(200м), EBYTE E18-MS1PA2-PCB (800м), EBYTE E18-2G4Z27SI IPEX (2500м).
- Рабочая частота: 2400~2480 MHz;
- Мощность передатчика: 4 dBm, с усилителем 20 dBm;
- Чувствительность приёмника: -96.4 dBm, с усилителем -98 dBm;
- Скорость передачи данных: 250kbps;
- Протокол: ZigBee;
- Энергонезависимая память: 256 KB;
- Энергозависимая память: 8 KB;
- Ядро: Микроконтроллер 8051;
- Напряжение питания: 2.0 — 3.6V;
- Потребление при передаче: 28mA, с усилителем 98mA;
- Потребление при приёме: 27mA, с усилителем 36mA;
- Потребление во сне: 1.2μA, с усилителем 2μA;
- Диапазон рабочей температуры -40 — +85℃.
Для удобства сборки все электронные компоненты располагаются на одной стороне платы, за исключением держателя батарейки, который напаивается на обратную сторону платы. В проекте использовались цифровые сенсоры BME280, BMP280 и SHTC3. В первом варианте датчика использовался сенсор bme280, но из-за кризиса производства полупроводников и, как следствие, роста цен в дальнейшем в проект был добавлен сенсор BMP280. Это самый недорогой вариант, стоимость bmp280 на Али экспресс составляет примерно 40 рублей. Но данный сенсор измеряет только атмосферное давление и температуру, а хотелось ещё и влажность, поэтому позднее в проект был добавлен сенсор SHTC3.
BME280 (Bosch)
- Напряжение питания: 1.71V – 3.6V;
- Интерфейс обмена данными: I2C или SPI;
- Диапазон измерения атмосферного давления: 300hPa – 1100hPa (Arp ±0.12hPa), что эквивалентно диапазону от -500 до 9000 м над уровнем моря;
- Диапазон измерения температуры: -40°С … +85°С (At ±0.5°С);
- Диапазон измерения влажности: 0% … 100% (Arh ±3%);
- Энергопотребление: режим измерений: 340 — 714uА; в спящий режим: — 0.1 uА.
BMP280 (Bosch)
- Напряжение питания: 1.71V – 3.6V;
- Интерфейс обмена данными: I2C или SPI;
- Диапазон измерения атмосферного давления: 300hPa – 1100hPa (Arp ±0.12hPa), что эквивалентно диапазону от -500 до 9000 м над уровнем моря;
- Диапазон измерения температуры: -40°С … +85°С (At ±0.5°С);
- Энергопотребление: режим измерений: 325 — 720uА; в спящий режим: — 0.1 uА.
SHTC3 (Sensorion)
- Напряжение питания: 1.62V – 3.6V;
- Интерфейс обмена данными: I2C;
- Диапазон измерения температуры: -40°С … +125°С (At ±0.2°С);
- Диапазон измерения влажности: 0% … 100% (Arh ±2%);
- Энергопотребление: режим измерений: 270 — 430uА нА; в спящий режим: — 0.3 uА.
На плате установлен светодиод для индикации режимов работы: вход в сеть, выход из сети, отправка данных, две кнопки: кнопка сброса и пользовательская кнопка(вход в сеть, выход из сети, чтение и отправка данных не по расписанию), порт программирования.
Датчик получился простой и лёгкий в изготовлении, время сборки датчика при ручной пайке составляет 10-15 минут, схема датчика состоит всего из 10 элементов, включая радиомодуль.
Убедиться в этом вы можете, изучив схему проекта.
Программная часть этого проекта доступна на моём github в виде исходного кода, а также в виде уже скомпилированной прошивки. Прошивка скомпилирована для варианта датчика с самым простым и дешёвым радио модулем EBYTE E18-MS1-PCB. Установлен интервал чтения сенсора один раз в минуту и отправка данных при изменении значений на 0.33 градуса для температуры, на 2.5 процента для влажности и на 1 единицу для атмосферного давления. Отправка информации об уровне заряда батареек происходит один раз в 6 часов.
Для загрузки прошивки в радиомодуль может понадобиться СС Debager, или SmartRF04EB это такая не очень догорая платка которую можно купить на Али экспресс.
Впрочем, прошить можно и через ардуино/есп, для этих целей написан удобный и бесплатный онлайн-сервис ZESP_multitool. Заходите на сайт, выбираете тип модуля, который планирует прошить, в нашем случае TI CCХХХХ. Справа в интерфейсе будет картинка с тем, что, как и куда подключать. Подключаете вашу ESP к USB порту, в интерфейсе сервиса выбираете make adapter и кликаете esp32adapter.json. Далее выбираете самый нижний пункт слева в интерфейсе — local и выбираете на своём компьютере прошивку, которую требуется загрузить в датчик.
Исходные файлы проекта EFEKTA THPTHPLR OutdoorIndoor sensor находятся папке /PROJECT SOURCE, это может быть интересно тем, кто хочет изменить какие-либо параметры работы датчика или, например, скомпилировать прошивку для радиомодуля с усилителем сигнала. Для такой настройки проекта необходимо переконфигурировать настройки проекта в файле /PROJECT SOURCE/THP/Source/preinclude.h, нужно закомментировать или, наоборот, раскомментировать нужные вам #define и в #define APP_REPORT_DELAY указать нужные вам значения времени в миллисекундах.
//#define OUTDOOR_LONG_RANGE
//#define BMP
//#define SHTC3
#ifdef OUTDOOR_LONG_RANGE
#define APP_REPORT_DELAY ((uint32) 300000) //5 minutes
#else
#define APP_REPORT_DELAY ((uint32) 60000) //1 minute
#endif
Корпус для датчика был разработан под печать на FDM принтере, модели корпуса также доступны на моём гитхабе в папке /ENCLOUSER/. В корпусе предусмотрено место для вывода внешней антенны, в этом месте толщина стенок тоньше, если необходим вариант с внешней антенной, то в этом месте нужно будет высверлить отверстие.
Проект уже не новый, первую публикацию о проекте я разместил 1 ноября 2021 года на площадке hackaday.io. С того времени проект пережил несколько ревизий дизайна платы, был протестирован при минусовых температурах(до -20С) на улице, в помещении, и даже в морозильной камере (-24С). Датчик работает очень стабильно. Информация о датчике уже добавлена в проект z2m, так что внешний конвертер не нужен, также датчик отлично работает в zha.
{
zigbeeModel: ['EFEKTA_THP_LR'],
model: 'EFEKTA_THP_LR',
vendor: 'Custom devices (DiY)',
description: 'DIY outdoor long-range sensor for temperature, humidity and atmospheric pressure',
fromZigbee: [fz.temperature, fz.humidity, fz.pressure, fz.battery],
toZigbee: [tz.factory_reset],
configure: async (device, coordinatorEndpoint, logger) => {
const endpoint = device.getEndpoint(1);
await reporting.bind(endpoint, coordinatorEndpoint, [
'genPowerCfg', 'msTemperatureMeasurement', 'msRelativeHumidity', 'msPressureMeasurement']);
const overides = {min: 0, max: 64800, change: 0};
await reporting.batteryVoltage(endpoint, overides);
await reporting.batteryPercentageRemaining(endpoint, overides);
await reporting.temperature(endpoint, overides);
await reporting.humidity(endpoint, overides);
await reporting.pressureExtended(endpoint, overides);
await endpoint.read('msPressureMeasurement', ['scale']);
},
exposes: [e.battery(), e.temperature(), e.humidity(), e.pressure()],
},
Гербер файлы проекта размещены в каталоге проектов на сервисе по заказу плат pсbway.com, сейчас (04.2022) это, наверное, единственный доступный сервис.
Чтобы не потеряться, подписывайтесь на мой профиль на Habr и на Youtube канал. Также приглашаю в телеграмм чат DIYDEV, где можно почитать, как заказывать PCB в апреле 2022 года, как легче всего их оплачивать не потеряв лишних денег и как приобрести уже готовые мои датчики, если по какой-то из причин вы не сможете их самостоятельно собрать.
Ссылки:
- Github проекта Efekta THP_LR THP
- Радиомодули EBYTE E18-MS1-PCB, EBYTE E18-MS1PA2-PCB, EBYTE E18-2G4Z27SI IPEX
- Сенсоры: BME280, BMP280, SHTC3
- Онлайн-сервис ZESP_multitool
- Каталог zigbee проектов Efekta, поддерживаемых в zigbe2mqtt
Всем добра!
Автор:
Berkseo