Il y a environ dix ans, à l'occasion, j'ai acheté une simple station météo Oregon Scientific BAR208HG. Elle a ravi la maison pendant longtemps, et continue de ravir à ce jour. Au fil du temps, j'ai commencé à manquer sa fonctionnalité et j'ai voulu étendre ma capacité à surveiller la météo. Et puis un fait désagréable est devenu clair: l'achat d'une station météo avancée du même Oregon Scientific ne permettait pas de diffuser les lectures de ses capteurs vers l'ancienne station. La version du protocole de transfert de données ne correspond pas. A peu près à la même époque, j'étais impliqué dans une aventure aussi passionnante que le transfert de données météorologiques au service du notoire People's Monitoring. Déjà à cette époque, le réseau disposait de nombreuses informations sur les stations météorologiques elles-mêmes et les capteurs de l'Oregon, sur le protocole de transfert de données et les méthodes de décodage.J'ai facilement trouvé plusieurs programmes et bibliothèques Arduino prêts à l'emploi pour recevoir et décoder un signal. Toutes ces informations me paraissent insuffisamment systématisées, parfois inexactes, et les programmes ne donnent un résultat satisfaisant que sur de très courtes distances. En fin de compte, j'en suis venu à la vieille vérité: «Si vous voulez bien faire quelque chose, faites-le vous-même». Le résultat de recherches ultérieures a été la rédaction de cette note, dans laquelle je voudrais partager les connaissances et compétences acquises.Le résultat de recherches ultérieures a été la rédaction de cette note, dans laquelle je voudrais partager les connaissances et compétences acquises.Le résultat de recherches ultérieures a été la rédaction de cette note, dans laquelle je voudrais partager les connaissances et compétences acquises.
Versions de protocole
L'ensemble de l'écosystème Oregon Scientific fonctionne selon le principe général - les capteurs sont des émetteurs qui diffusent à des intervalles strictement définis. Pour minimiser les collisions lors de la transmission, les intervalles de diffusion pour tous les capteurs sont différents, par exemple, pour ma station, les capteurs transmettent des lectures avec un intervalle de 39, 41 et 43 secondes sur les 1er, 2ème et 3ème canaux, respectivement. Les stations météorologiques elles-mêmes ne sont, quant à elles, que des récepteurs. Ainsi, la relation est à sens unique. Le fabricant utilise plusieurs versions du protocole de transfert de données:
- Version 1.0. Sur ce protocole, je travaille uniquement avec les appareils qui ont viré au jaune il y a vingt ans. Je n'ai jamais vu ces appareils, que ce soit en direct ou même en images. Il n'y a absolument rien à me dire à leur sujet,
- 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 . , , où j'ai essayé de prendre en compte tous les problèmes étudiés. Il convient de noter que dans ma mise en œuvre de cette méthode de traitement du code, une quantité importante de RAM est nécessaire. De plus, le programme est sensible à la déviation de la fréquence d'horloge de l'émetteur, ce qui se produit, comme il s'est avéré, pas si rarement en raison de la mauvaise qualité des composants utilisés dans les capteurs, y compris les résonateurs à quartz.