Há cerca de dez anos, na ocasião, comprei uma estação meteorológica simples Oregon Scientific BAR208HG. Ela encantou a família por muito tempo e continua a deliciar até hoje. Com o tempo, comecei a sentir falta de sua funcionalidade e queria expandir minha capacidade de monitorar o clima. E então um fato desagradável ficou claro - a compra de uma estação meteorológica avançada da mesma Oregon Scientific não tornou possível transmitir as leituras de seus sensores para a antiga estação. A versão do protocolo de transferência de dados não corresponde. Na mesma época, eu estava envolvido em uma aventura tão emocionante como a transferência de dados meteorológicos para o serviço do notório People's Monitoring. Já naquela época, a rede tinha muitas informações sobre as próprias estações meteorológicas e sensores do Oregon, sobre o protocolo de transferência de dados e métodos de decodificá-los.Eu encontrei facilmente vários programas e bibliotecas Arduino prontos para receber e decodificar um sinal. Todas essas informações me pareceram insuficientemente sistematizadas, em alguns lugares imprecisas, e os programas deram um resultado satisfatório apenas em distâncias muito curtas. No final, cheguei à velha verdade: "Se você quer fazer algo bem, faça você mesmo." O resultado da pesquisa subsequente foi a redação desta nota, na qual gostaria de compartilhar os conhecimentos e habilidades adquiridos.O resultado da pesquisa subsequente foi a redação desta nota, na qual gostaria de compartilhar os conhecimentos e habilidades adquiridos.O resultado da pesquisa subsequente foi a redação desta nota, na qual gostaria de compartilhar os conhecimentos e habilidades adquiridos.
Versões de protocolo
Todo o ecossistema da Oregon Scientific funciona de acordo com o princípio geral - sensores são transmissores transmitindo em intervalos estritamente definidos. Para minimizar as colisões durante a transmissão, os intervalos de transmissão para todos os sensores são diferentes, por exemplo, para minha estação, os sensores transmitem leituras com um intervalo de 39, 41 e 43 segundos no 1º, 2º e 3º canais, respectivamente. As próprias estações meteorológicas são, por sua vez, apenas receptores. Portanto, o relacionamento é unilateral. O fabricante usa várias versões do protocolo de transferência de dados:
- Versão 1.0. Nesse protocolo, trabalho apenas com os dispositivos que ficaram amarelos há 20 anos. Nunca vi esses aparelhos, seja ao vivo ou mesmo em fotos. Não há absolutamente nada a me dizer sobre eles,
- 2.1. — . , , , , — 30,
- 3.0 — .. "" , , . "" . , , , 100, , , . . - , . "" . , BAR208HG BAR208HGX, 3- .
433. — (On/Off Key), .. "/", . 2048. 2.1 3.0
, . OOK , , . — . . — . , .
, . .
, . . 2.1 4- Fh
, 3.0 — 6- . ? , , () . , , , .
, Ah
. . , .
— 4 . , , . :
- ,
- ,
- , ,
- , .
"" . "" . , , . , , . , , , . , , .
"" :
- 3 (& 4h) . THGN132N, , 1.3.
- 4 (& 8h) 30- . , .
- 1 (& 1h) 30- 60- .
"" . :
" " — . , . ,
5D5314D01510950AC13B529
:
5h + Dh + 5h + 3h + 1h + 4h + Dh + 0h + 1h + 5h + 1h + 0h + 9h + 5h + 0h + Ah + Ch + 1h + 3h = 5Bh
, . , .
CRC8 — . CRC8-CCITT 07h. , "" "". 2.1 3.0 , 2.1 "ID" . , THN132N ( 2.1)
EC401B183520D33F
D6h
CRC8-CCITT( D6h < E < C < 4 < 0 < 1 < 8 < 3 < 5 < 2 < 0 ) = F3h
PCR800 ( 3.0),
29140EC00000279410142E
CRC8-CCITT( 00h < 2 < 9 < 1 < 4 < 0 < E < C < 0 < 0 < 0 < 0 < 0 < 2 < 7 < 9 < 4 < 1 < 0) = E2h
.
. Arduino , . , "" . , . THGN132N .
, , , , , . Oregon , Arduino . , , onde tentei levar em consideração todos os problemas estudados. Deve-se observar que, em minha implementação desse método de processamento de código, uma quantidade significativa de RAM é necessária. Além disso, o programa é sensível ao desvio da frequência do relógio do transmissor, o que acontece, como se viu, não tão raramente devido à má qualidade dos componentes usados nos sensores, incluindo ressonadores de quartzo.