У меня есть дешевый беспроводной термометр для бассейна (AcuRite 617 1 ), и я хотел бы перехватить данные о температуре на приемнике и использовать их с компьютеризированной системой регистрации данных.
Удобно, что внутри приемника есть небольшая отрывная плата, которая подключена к антенне и имеет цифровые выводы «V», «G», «D» и «SH»:
Вот сегмент записанных данных с вывода «D» во время передачи (это происходит раз в минуту). Перед этим сегментом есть данные с гораздо более высокой скоростью, но я считаю, что это может быть шум - это начало данных 1,36 кГц / 680 Гц.
Я немного погуглил и не могу найти кодировку, которая выглядит примерно так, но если бы я догадался, что происходит, вот что я думаю:
- первые 4 цикла по 680 Гц предназначены для синхронизации часов, но не содержат данных
- последующие 13 циклов 1,36 кГц (в 2 раза больше начальной частоты), по-видимому, имеют одну из двух форм: они либо падают низко до середины цикла, либо после него - я предполагаю, что одна форма является логической, а другая - другой. это ноль.
- после этого, кажется, есть странный разрыв, но если вы сбрасываете со счетов часть минимума, которая является частью предыдущего «1», то оставшийся разрыв составляет 735 мкс, что является (корректно по фазе!) продолжением Преамбула 680 Гц.
Я правильно смотрю на это? Есть ли название для этой кодировки?
Некоторые дополнительные заметки на доске объявлений:
- плата помечена как «RF211» и выглядит замечательно в соответствии с MICRF211 «3V QwikRadio Receiver общего назначения, который работает на частоте 433,92 МГц» 3
- Лист данных MICRF211 имеет следующий рисунок (с очень небольшим объяснением), который выглядит мучительно как то, что я вижу, за исключением прямоугольной волны с двойной скоростью передачи данных по сравнению с моим захватом:
2016-02-14 Обновление: я повторно посетил этот проект и, похоже, получаю чистый 64-битный поток между 4-тактной преамбулой и 1-тактным «постамблем», после чего плата дисплея выключает RF-модуль потянув ^ SH низко (верхняя строка):
Согласно схеме Micrel "33/66% PWM" (которая больше нигде не появляется в Google), это
-_-_-_-_0000011110011000110000000000000000000000100011101000010010101010-_
Так что теперь я должен начать манипулировать температурой, чтобы декодировать биты. Здесь («x») биты, которые, кажется, изменяются без каких-либо видимых изменений на дисплее:
0000011110011000110000000000000000000000100011101000010010101010
------------------------------------------------x----xxxx----xxx
Я предполагаю, что это либо младшие значащие биты, либо уровень заряда батареи (который отображается как «Низкий», когда он значительно падает).
2016-02-15 Обновление: я беру шоу в дороге, чтобы дать новому стеку "Reverse Engineering" обмен трещиной при определении значения: /reverseengineering/12048/what-is-contained -в-это-передача ВЧ-бассейн-датчик температура основание блок-ре
Ответы:
Микрель называет это схемой ШИМ 33/66%. Похоже, это довольно простой, но специальный протокол.
ШИМ означает широтно-импульсную модуляцию. Существует страница Википедии, которая более детально описана, но вкратце, PWM - это место, где вы сохраняете фиксированный период, поэтому здесь время от переднего фронта до следующего переднего фронта, но вы меняете процент времени, проведенного в максимуме. состояние путем изменения, когда происходит падение фронта. Для этого вы можете видеть, что он равен 33% для «1» и 66% для «0».
Начальные серии импульсов равны высоким и низким временам. Обычно это делается для того, чтобы приемник мог синхронизироваться до получения фактических данных.
См. Http://www.micrel.com/_PDF/App-Notes/an-22.pdf для получения дополнительной информации о том, что они ожидают от модуля.
Типичный способ получить кодирование такого рода - ввести его в вывод захвата таймера микроконтроллера. Или вы можете просто подключиться к общему входу и получить его в 4-5 раз больше периода ШИМ. Алгоритм декодирования не так уж сложен.
В качестве альтернативы, как предлагает Markt, вы можете вернуться обратно к самому датчику температуры. Но, если это аналоговый выходной сигнал, вам придется самостоятельно преобразовать его в цифровой, и при регистрации в нем могут немного отличаться номера от исходного выхода.
источник
Люди моего знакомого обычно называют эту технику кодирования "ШИМ", что, я думаю, является разумным описанием.
Моя первая мысль, глядя на ваш поток данных и предполагая, что вы правильно угадываете полярность битов, заключается в том, что это 12-разрядное чтение АЦП, сначала LSB, с начальным «1» в качестве начального бита. Сначала я расскажу о LSB, потому что начало следующего чтения, по-видимому, показывает однобитное отклонение, и маловероятно, что показание АЦП (пула) температуры будет изменяться на 2 или 3 MSB за такой короткий промежуток времени.
Я бы немного углубился в систему, вернувшись к тому, что генерирует данные (в отличие от передачи), посмотрю, можно ли определить датчик температуры, и поищу некоторую корреляцию между передаваемыми данными и температурой.
источник
Почти все схемы радиочастотной передачи должны иметь несколько характеристик в своих протоколах кодирования данных. Это будет включать:
Удивительный импульс, который вы заметили, скорее всего, является индикатором синхроимпульса.
Кодирование данных, по-видимому, соответствует тому, что я видел, называемому кодированием ширины импульса. Это довольно распространенный метод, при котором одно направление перехода следует за постоянной частотой, что приводит к постоянным значениям битовых ячеек постоянной ширины. Во время битовой ячейки активный импульс представляется как 25% времени битовой ячейки или 75% времени битовой ячейки. Эта схема не является схемой сбалансированного кодирования постоянного тока, подобного манчестерскому кодированию. Это обычная технология с кодированием ширины импульса для обеспечения баланса постоянного тока в протоколе сообщения путем отправки дополнительных битов для создания общего баланса во всем сообщении. В простейшем виде данные отправляются дважды, а вторая копия логически инвертируется.
В вашем примере странно видеть широтно-модулированные данные, появляющиеся перед синхроимпульсом. Однако все еще возможна схема, если алгоритм декодирования данных предназначен для приема принятых данных с синхронизацией в этой позиции. Возможно, что устройство отправляет один тип данных до синхронизации и один после. Разделение может быть между адресом датчика / временными данными ИЛИ истинными данными / инвертированными данными.
Редактировать:
Интересно отметить, что похоже, что передающее устройство использует другой программный алгоритм для формирования положительной ширины импульсов для ячеек данных до шаблона синхронизации, чем для ширины импульса в и после шаблона синхронизации. Это подразумевает, что может быть отдельный блок программного обеспечения, генерирующий более ранний шаблон, чем для последующей части шаблона. Это различие в паттерне может означать, что источник данных в каждом случае требует различной обработки с точки зрения того, как к нему обращались по крупицам. Разница, видимая на временной диаграмме, может быть просто временами команд или двумя отличиями в циклах генерации паттернов.
источник
Я начал декодировать Acurite 617 и вот мои первые наблюдения. Я могу сказать вам, что последний байт - это своего рода «проверочный» байт, а следующие три последних байта содержат температуру. Эти байты также отправляются с использованием 7-го бита для выравнивания четности, и используется только нижняя часть каждого байта. Я написал программу Arduino для сбора данных и видел следующие сообщения / температуру.
40 ce c0 00 00 0c 03 be
(00 0C 03) => 0C3 => 67F
40 ce c0 00 00 0c 84 39
(00 0C 04) => 0C4 => 67F
40 ce c0 00 00 0c 05 b8
(00 0C 05) => 0C5 => 67F
Другие данные / температуры, которые я видел:
E2 => 73F
F5 => 76F
108 => 80F (81 00 88)
109 => 80F
Используя это, вы должны быть в состоянии сделать «прямую линию» (предположение) преобразования.
Поскольку у меня нет хорошего объема (и тот факт, что данные отправляются раз в минуту), я не уверен в моем времени. Я вижу синхронизацию HI и LO как 720 мксек, а биты данных 240 и 480 мксек.
Надеюсь, у меня будет больше информации позже. У меня есть куча таких. Как только они начинают протекать, я вынимаю их из бассейна и высушиваю для использования по дому. Более поздние 617 модулей (с нижним винтом и уплотнительным кольцом), кажется, работают дольше.
Я сделал еще немного расшифровки. Последний байт (контрольный байт) делает XOR всех восьми байтов равным 0FFH. Например, для "40 CE C0 00 00 8D 0C 30", 40 xor CE xor C0 xor 00 xor 00 xor 00 xor 8D xor 0C xor 30 равно 0FF.
Кроме того, я снизил температуру до 34F, и счет составил 10 десятичных знаков (т.е. 00 00 0A), а при 80F счет был 264 десятичных знаков (т.е. 81 00 88 или 108H).
Из этого я использую Temp (F) = 0,1811 * Количество + 32,1889. Я мог бы получить больший промежуток, чтобы получить лучшие данные, если я увижу какую-либо ошибку.
Глядя на строку Роба Старлинга на 2016-02-14:
00000111/10011000/11000000/00000000/00000000/10001110/10000100/10101010 07 98 C0 00 00 8E 84 AA
XOR = FF
Количество = 0E4 или 228
Temp = 73,5F
источник
228
том, что это так22.8C
. Для Фаренгейта, делай как обычноF=C*9/5+32
.