Рейтинг@Mail.ru

Чтение данных датчика погоды BL999 с помощью Arduino

автор:
Be the first to comment! Arduino
Print Friendly, PDF & Email
Рассмотрим, как получать и расшифровывать с помощью Arduino метеоданные датчика BL999 от комнатной метеостанции фирмы Ea2.

Нам понадобится:

1Описание метеодатчика BL999 и его информационного протокола

Датчик BL999 – это недорогой датчик температуры и влажности, который используется в комплекте с домашними метеостанциями. Датчик может работать как в комнате, так и на улице. Периодически он передаёт метеостанции по радиоканалу данные измерений и отчёт о своём состоянии. Подобные погодные датчики сейчас очень распространены. Рассматриваемый сенсор BL999 имеет следующие характеристики:

  • диапазон измеряемых температур: −40…+50°C;
  • диапазон измеряемой влажности: 1…99%;
  • период измерений: 30 сек;
  • рабочая радиочастота: 433,325 МГц;
  • число каналов: 3;
  • рабочее расстояние: до 30 м на открытых пространствах.

К одной метеостанции можно подключить до трёх таких датчиков. Номер (канал) датчика устанавливается переключателем, который расположен под съёмной крышкой батарейного отсека (трёхпозиционная кнопка SW1 на фото ниже). Фактически, канал здесь – это просто признак в структуре пакета данных датчика, никакого физического смысла (например, изменение рабочей частоты) он в себе не несёт.

Чтобы лучше понять протокол датчика, с помощью которого он отправляет данные метеостанции, можно попытаться воспользоваться радиоприёмником и разбираться с тем, что приходит из радиоэфира. Но на популярной частоте 433 МГц работает множество бытовых устройств, и приёмник будет ловить большое количество посторонних шумов. Этот факт не позволит нам спокойно изучить протокол датчика.

Внешний вид и внутренности метеодатчика BL999
Внешний вид и внутренности метеодатчика BL999

Поэтому давайте для начала разберём датчик и подключимся осциллографом прямо к выходу, который генерирует цифровой сигнал непосредственно перед отправкой на передающую антенну. Землю можно найти возле «минуса» батареи в отсеке для батарей, а сигнальный провод подключим к верхнему выводу платы, как на фотографии. Для быстрого теста я подключил миниатюрный осциллограф DS203. На осциллограмме видно, что датчик генерирует какой-то сигнал. Далее этот сигнал поступает на передающую антенну и излучается в пространство.

Места подключения щупа осциллографа к метеодатчику BL999
Места подключения щупа осциллографа к метеодатчику BL999

Чтобы изучить генерируемый датчиком сигнал, нужен хороший осциллограф. Данные отправляются пакетами длительностью примерно 500…600 мс. Вот как выглядит типичный пакет с датчика BL999 на экране осциллографа.

Изучение сигнала метеодатчика BL999
Изучение сигнала метеодатчика BL999
Типичный пакет метеодатчика BL999 на экране осциллографа
Типичный пакет метеодатчика BL999 на экране осциллографа

Снимок экрана для этого пакета. Здесь красным цветом показан аналоговый сигнал, а голубым – оцифрованный сигнал, без присущих аналоговым сигналам искажений.

Осциллограмма типичного пакета метеодатчика BL999
Осциллограмма типичного пакета метеодатчика BL999

Вот представлены 4 оцифрованных информационных пакета, сгенерированных датчиком. Эти пакеты пришли друг за другом с разницей в 30 секунд. Именно с такой периодичностью датчик BL999 отсылает свои данные.

Информационные пакеты метеодатчика BL999
Информационные пакеты метеодатчика BL999

Посмотрим на этот сигнал. С первого взгляда бросается в глаза, что:

  • данные передаются пакетами;
  • каждый пакет начинается с короткого импульса, за которым следует относительно длительный промежуток времени с нулевым уровнем;
  • в каждом пакете присутствует 4 группы импульсов, разделённых такими же длительными паузами;
  • в каждой группе содержатся импульсы, следующие друг за другом через короткие или вдвое более длинные паузы;
  • всего имеются 3 вида промежутков между импульсами: самые короткие (условно назовём их типа A), вдвое более длинные (B) и вчетверо более длинные (C);
  • в каждой группе ровно по 37 импульсов;
  • все 4 группы каждого пакета одинаковые (содержат повторяющиеся последовательности импульсов).

Очевидно, что в данном случае применяется некое временное кодирование (скорее всего, фазо-импульсное или частотно-импульсное), когда значимая информация скрыта в длительности пауз между импульсами. В случае датчика BL999 короткая пауза между соседними импульсами (A) означает логический нуль, а длинная (B) – логическую единицу. Изучим сигнал более детально.

Длительность пауз логических нулей и логических единиц
Длительность пауз логических нулей и логических единиц
Длительность между первым импульсом и данными, а также между группами
Длительность между первым импульсом и данными, а также между группами
Длительность всех импульсов одинакова (с допуском на погрешность)
Длительность всех импульсов одинакова (с допуском на погрешность)
Единичный импульс при большем увеличении масштаба по времени
Единичный импульс при большем увеличении масштаба по времени

Как видно, в сигнале присутствует ряд коротких импульсов. Длительность всех импульсов одинакова и равна примерно 486 мкс. Длительность коротких промежутков (логический "0") равна примерно 2,4 мс, длительность средних промежутков (логическая "1") равна примерно 4,5 мс. Продолжительность самых длинных промежутков – около 9,4 мс.

Как уже было упомянуто, в пакете присутствуют 4 группы по 37 импульсов. Этими импульсами закодированы 36 битов, которые можно условно разбить на участки по 9 полубайтов. Следующий рисунок показывает, что закодировано в этих 36-ти битах:

Назначение битов информационного пакета метеодатчика BL999 в одной группе
Назначение битов информационного пакета метеодатчика BL999 в одной группе

Полубайт также называют «ниббл» (англ. nibble) или тетрада. Это единица измерения информации, содержащая четыре бита.

Давайте разберём реальный пример, и на его основе расшифруем закодированные в нём данные. Возьмём одну группу из 36-ти битов из вот такого пакета, пришедшего от датчика BL999:

Пример информационного пакета метеодатчика BL999
Пример информационного пакета метеодатчика BL999

В пакете, согласно схеме, присутствуют следующие части:

ОбозначениеНомера битовОписаниеЗначение из примера
ID35…32, 29…28Это идентификатор датчика. Он задаётся произвольным образом и изменяется при каждом включении. 0101_11 = 23
Chan31…30Номер канала датчика. Кодируется обычным двоичным кодом: "01" – 1, "10" – 2, "11" – 3.01 = 1ый канал
Bat27Уровень заряда батареи: "0" – норма, "1" – низкий заряд.0 = норма
?26…24Нет данных.100
Temperature23…12Данные температуры. Число записано в обратном порядке и умножено на 10. Отрицательные температуры, кроме этого, хранятся в дополнительном коде (*). 0111_1111_0000 обращение 0000_1111_1110 = 254 деление на 10 25,4°C
Humidity11…4Влажность. Записывается как результат вычитания из 100, в дополнительном коде (*). 0000_1101 обращение 1011_0000 инверсия битов 0100_1111=79 +1 =80 вычитание из 100% 100 − 80 = 20%
Checksum3…0Контрольная сумма. Вычисляется как сумма 8-ми полубайтов, записанных в обратном порядке. От получившегося числа берутся 4 младших разряда и также записываются в обратном порядке.0101 0111 0100 0111 1111 0000 0000 1101 0100 1010 + 1110 + 0010 + 1110 + 1111 + 0 + 0 + 1011 = 100_0010 обращаем 0010 0100

(*) Дополнительный код числа – это специальный вид представления чисел, который часто используется в вычислительной технике. Онлайн-калькулятор и хорошая статья на эту тему здесь.

Каждая группа из 36 битов повторяется в пакете по 4 раза, что сделано для повышения надёжности приёма. Если в каком-то из четырёх дублей из-за помех в радиолинии контрольная сумма не сошлась, возьмём тот из четырёх, где с контрольной суммой всё в порядке.

2Приём данных с метеодатчика BL999при помощи Arduino

Для того чтобы мы могли принимать данные с метеодатчика, нам нужен радиоприёмник, работающий на частоте 433 МГц. Прекрасно подойдёт копеечный модуль XY-MK-5V, который работает как раз на этой частоте. Мы уже не раз использовали его в своих проектах. Подключается он элементарно: вывод Data – к любому цифровому выводу Arduino, питание – к +5V Arduino, и земля к земле, соответственно.

Приёмник XY-MK-5V и Arduino Nano принимают сигнал датчика BL999
Приёмник XY-MK-5V и Arduino Nano принимают сигнал датчика BL999

Существует отличная библиотека для Arduino, которая позволяет получать по радиоканалу и декодировать данные датчика BL999. Скачаем библиотеку, распакуем в папку libraries, откроем пример из библиотеки и загрузим в память Arduino. Если поблизости есть датчик BL999, то в мониторе последовательного порта Arduino IDE мы должны увидеть следующее:

Вывод скетча для метеодатчика BL999 в Arduino IDE
Вывод скетча для метеодатчика BL999 в Arduino IDE

Не забудьте настроить монитор порта на скорость 115200 бит/с: именно такая скорость используется автором библиотеки для передачи данных от Arduino.

Демонстрация работы скетча по приёму метеоданных с датчика BL999
Last modified onЧетверг, 25 Июль 2019 21:03 Read 2949 times
Ключевые слова: :

Поделиться

Print Friendly, PDF & Email

Leave a comment

  1. Arduino это...
  2. Arduino это...
  3. Arduino это...
Отличный способ начать знакомство с электроникой, микроконтроллерами и программированием!
Замечательное средство для создания собственных электронных устройств, которые пригодятся в быту или для развлечения!
Уникальный конструктор, для которого разработаны десятки совместимых датчиков и модулей!
next
prev