Un beacon de publicite simple ne repond qu’a une question : “ou est ce tag ?”. Ajoutez un capteur — temperature, humidite, acceleration, lumiere — et le meme materiel devient un noeud de mesure distribue qui repond “quel est l’etat ici, et quelque chose a-t-il change ?”. Cet article couvre les decisions d’ingenierie derriere les beacons a capteur : comment interfacer les capteurs, comment compresser les lectures dans la charge utile de 31 octets, comment la cadence d’echantillonnage pilote la duree de vie de la batterie, et comment la logique de seuil sur appareil transforme un emetteur stupide en detecteur de peripherie.

1. Pourquoi les beacons a capteur sont differents

Un beacon de position seule transmet une charge utile fixe a un intervalle fixe. Sa consommation est deterministe et son firmware est trivial. Un beacon a capteur doit :

1. Reveiller le capteur du sommeil (ou le maintenir en mode echantillonnage basse consommation)

2. Acquerir une lecture via I2C/SPI, ce qui prend des millisecondes et consomme le courant de repos du capteur

3. Traiter la valeur (filtrage, calibration, verification de seuil)

4. Decider quoi envoyer — la valeur brute, un delta, ou rien

5. Encoder et publier le resultat

Chaque etape ajoute latence et courant. Le probleme de conception est l’equilibre entre fidelite de mesure et duree de vie de la batterie, car le sous-systeme capteur — pas la radio — domine generalement le budget des qu’on echantillonne plus de quelques fois par heure.

2. Interfaces capteur et consommation de courant

La plupart des capteurs de beacon pendent a un bus numerique. Les deux choix courants :

Interface Vitesse Courant capteur typique Latence reveil Notes
I2C 100-400 kHz 1-15 µA repos, 100-500 µA actif 1-5 ms 2 fils, limite par adresse, facile a partager
SPI 1-8 MHz 2-20 µA repos, 200-800 µA actif 0,1-1 ms 4 fils, plus rapide, latence plus faible

Pour un beacon a pile bouton, le cout dominant n’est pas le courant actif mais l’energie par echantillon = (latence_reveil + temps_conversion) × courant_moyen. Un capteur d’humidite qui prend 10 ms a 300 µA coute 3 µC par lecture. A 1 echantillon/h cela fait 3 µC/h ≈ 0,83 µA moyen — negligeable. A 1 echantillon/minute c’est 50 µA moyen — desormais en competition avec la radio.

2.1 Capteurs courants et leurs empreintes

Capteur Piece typique Bus Courant actif Temps conversion Plage sortie
Temperature TMP117 I2C 3,5 µA 15,5 ms (moy) -0,1 a 0,2 °C
Humidite HDC2080 I2C 300 µA 1,2 ms ±2 % HR
Accel 3 axes LIS2DH12 I2C/SPI 4 µA (bas conso) 1 ms ±2/4/8/16 g
Lumiere ambiante OPT3001 I2C 1,8 µA 100-800 ms 0,01-83k lux
Pression LPS22HB I2C/SPI 25 µA 13 µs (ODR) ±0,025 hPa
CO2 (NDIR) SCD40 I2C 18 mA (impulsion) 0,5-5 s 0-40000 ppm

Le capteur CO2 se distingue : a 18 mA il est 1000× le courant de sommeil de la radio et ne peut fonctionner en continu sur pile bouton. C’est l’exemple canonique de pourquoi le choix du capteur contraint l’architecture de puissance — un beacon CO2 necessite une pile plus grosse ou une alimentation filaire.

3. Encodage des donnees capteur en 31 octets

Un paquet de publicite BLE transporte une charge utile de 31 octets (legacy) divisee en structures AD : 1 octet de longueur, 1 octet de type, puis donnees. iBeacon utilise 25 octets de donnees fabricant ; Eddystone-URL en utilise ~20. Il reste peu de place pour les capteurs.

3.1 La regle “ajouter, ne pas remplacer”

Conservez le cadre d’identite (iBeacon / Eddystone-UID) intact pour les systemes de position, et ajoutez un cadre de publicite secondaire portant les donnees capteur. BLE permet a un beacon de basculer entre plusieurs cadres de publicite (en alternant a chaque evenement). Une passerelle qui scanne les 3 canaux pendant quelques secondes capture les deux.

3.2 Eddystone-TLM : le canal de telemetrie integre

Eddystone-TLM est la facon standardisee de transporter la telemetrie :

Champ Octets Contenu
Version 1 0x00
Tension batterie 2 1 mV unites, 0-65535
Temperature beacon 2 virgule fixe 8.8, °C
Compte PDU 4 compteur de paquets vie
Temps marche 4 0,1 s unites

TLM est propre mais limite : une valeur de temperature, batterie seule, pas d’humidite/acceleration. Pour des donnees plus riches vous avez besoin d’un cadre de donnees fabricant (MSD) personnalise.

3.3 Exemple d’encodage MSD personnalise

Une disposition compacte pour un beacon multi-capteur (little-endian) :

Octet 0 :    Company ID LSB (0x4C pour Apple, ou votre CID)

Octet 1 : Company ID MSB

Octet 2 : Type cadre = 0x50 (cadre capteur vendeur)

Octet 3 : Bitmap capteur (bit0 temp, bit1 hum, bit2 accel, bit3 lum, bit4 batt)

Octet 4-5 : Temperature, virgule fixe 8.8, signee (×256)

Octet 6-7 : Humidite, virgule fixe 8.8 (×256)

Octet 8-9 : Lumiere, echelle log 10 bits (0-1023 → 0,01-100k lux log)

Octet 10-11: Batterie mV (0-65535)

Octet 12-13: Amplitude acceleration, 8.8 fixe (g × 256)

Octet 14 : Statut / drapeaux (mouvement detecte, seuil declenche)

Octet 15 : Numero sequence (boucle 0-255)

Ce cadre de 16 octets coexiste avec un cadre d’identite iBeacon avec de la marge. La bitmap permet a un beacon d’omettre les capteurs absents, reduisant la charge utile. Un beacon temp-seul envoie les octets 0-7 (8 octets) ; un noeud capteur complet envoie les 16.

3.4 Astuces de compression

  • Encodage delta : publiez le changement depuis la derniere lecture, pas l’absolu. Une temperature derivant de 0,1 °C/h tient dans un delta 8 bits signe (±127 × 0,01 °C) au lieu d’un absolu 16 bits.
  • Virgule fixe plutot que flottant : 8.8 virgule fixe coute 2 octets pour ±127,99 avec resolution 0,004 °C — suffisant pour le monitoring environnemental.
  • Lumiere echelle log : `encoded = round(1023 × log10(lux/0,01) / log10(100000/0,01))` compacte 5 decades en 10 bits.
  • Saut run-length : si rien n’a change au-dela du plancher de bruit, envoyez un cadre heartbeat tous les N cycles au lieu de chaque cycle.

4. Strategie d’echantillonnage et budget de puissance

Le plus grand levier sur la duree de vie de la batterie est la frequence d’echantillonnage. Trois strategies :

4.1 Echantillonnage periodique fixe

Le plus simple : echantillonnez toutes les T secondes, publiez chaque lecture.

Courant moyen ≈ I_radio_adv × duty_adv + I_capteur_moy × (t_ech / T)

Pour T = 60 s, t_ech = 5 ms, I_capteur_moy = 200 µA : contribution capteur = 200 µA × 5ms/60s = 0,017 µA — negligeable. La radio (ex. sommeil 1 µA, 3 ms a 15 mA chaque 1 s) domine a ~45 µA. Donc a 1/min d’echantillonnage, le capteur est gratuit ; poussez a 1/s et le cout capteur monte a ~1 µA — encore petit mais plus negligeable.

4.2 Echantillonnage adaptatif / a la demande

Echantillonnez lentement (ex. toutes les 5 min) pour le cadre d’identite, mais laissez l’interruption de l’accelerometre reveiller le MCU au mouvement. L’accelerometre en mode wake-on-motion consomme ~1-4 µA en continu mais elimine l’activite radio jusqu’a ce que quelque chose arrive. Pour le suivi d’actifs ou le mouvement est rare, cela reduit le courant moyen de 10-100×.

4.3 Rafale declenchee par seuil

Le beacon reste silencieux (sommeil profond, <1 µA) jusqu’a ce qu’une valeur depasse une limite — congelateur au-dessus de 0 °C, vibration au-dessus de 2 g, porte ouverte. Au declenchement :

1. Reveil complet

2. Capture une rafale de N echantillons a cadence elevee (pour caracteriser l’evenement)

3. Publie un cadre alerte avec valeur pic + horodatage

4. Retour au sommeil profond

C’est le modele d’intelligence de peripherie : le beacon decide *si* il parle, pas seulement *quoi* dire. Le courant moyen s’effondre au plancher de sommeil plus l’energie de rafale rare.

4.4 Exemple de budget de puissance

Pile bouton CR2032 = 225 mAh = 810 C. Duree visee 2 ans = 17,5 k heures.

Composant Courant Duty Moyen
nRF52 sommeil 0,6 µA 99,9% 0,6 µA
Radio adv (3 ms @ 15 mA, 1/2 s) 15 mA 0,6% 90 µA*
Echantillon capteur (5 ms @ 200 µA, 1/min) 200 µA 0,0008% 0,017 µA
Accel wake-on-motion 2 µA 100% 2 µA
Total (periodique) ~92,6 µA
Total (seuil, 99% silencieux) ~2,6 µA

*La radio domine le mode periodique. Basculer sur le declenchement par seuil reduit le courant total de 35×, prolongeant la duree de ~2,5 ans a des decennies (l’auto-decharge de la pile devient la limite).

5. Filtrage sur appareil et logique de declenchement

Envoyer chaque lecture brute gaspille bande passante et batterie. Le beacon doit filtrer :

  • Bande morte : publiez seulement si |valeur − dernier_envoye| > Δ (ex. 0,3 °C). Supprime le bruit de chatiere.
  • Moyenne mobile : moyennez 4-8 echantillons pour tuer les pics isolés avant comparaison a la bande morte.
  • Taux de changement : declenchez si d(valeur)/dt depasse une pente (ex. temp chute 5 °C/min = compresseur en defaillance).
  • Hysteresis : utilisez des seuils d’entree/sortie separes (ex. alerte a >0 °C, effacement a <-0,5 °C) pour eviter le flottement d'alerte a la limite.

Une machine a etats minimale :

etat : IDLE

au tic horloge :

v = lire_capteur()

v_f = passe_bas(v)

if |v_f - dernier_envoye| > bande_morte :

publier(v_f) ; dernier_envoye = v_f

if v_f > seuil_haut and etat == IDLE :

etat = ALERTE ; publier_alerte(v_f, raison=HAUT)

if etat == ALERTE and v_f < seuil_bas :

etat = IDLE ; publier_effacement()

Cette logique tourne en <1 ms sur le nRF52 et coute un courant negligeable face a la radio.

6. Modeles de deploiement reels

6.1 Monitoring chaine du froid

Un beacon temp+humidite dans un refrigerateur a vaccins. Echantillonnez toutes les 5 min, publiez sur bande morte (0,2 °C) ou seuil (>8 °C alerte, <-0,5 °C effacement avec hysteresis). La passerelle journalise la serie temporelle ; une violation declenche une notification push. Batterie : CR2477 (1000 mAh) tient 3+ ans a 5 min d’echantillonnage.

6.2 Vibration maintenance predictive

Un beacon accelerometre visse sur un moteur. En wake-on-motion, il capture des rafales de vibration 1 kHz seulement quand le moteur tourne. L’acceleration RMS sur une fenetre indique l’usure des roulements. Comparer les tendances RMS semaine a semaine (calculees a la passerelle) predit la panne avant la casse. Puissance : les 2 µA de repos de l’accelerometre dominant ; CR2032 tient 1-2 ans.

6.3 Occupation batiment intelligent

Un beacon lumiere+PIR (ou mmWave) dans chaque piece. Niveau de lumiere + IR passif donne la presence sans camera. Le beacon publie seulement les changements d’etat d’occupation (entree/sortie), pas le lux continu. Courant moyen domine par le repos PIR ~5 µA — un pack AA tient des annees.

7. Considerations cote passerelle

La passerelle doit comprendre le cadre MSD personnalise. Points pratiques :

  • Scanner les 3 canaux : les cadres capteur alternent avec les cadres d’identite ; capturer les deux necessite une permanence multicanaux ≥2-3 intervalles de publicite.
  • Parser la bitmap : decodez seulement les capteurs presents ; ignorez gracefulment les types de cadre inconnus.
  • Gerer les numeros de sequence : detectez les cadres manques (trou dans seq) pour marquer les liens non fiables.
  • Stocker la serie temporelle : ecrire dans InfluxDB/TimescaleDB ; le beacon lui-meme ne garde pas d’historique.
  • Offset calibration : appliquez les constantes de calibration par appareil cote serveur (chaque capteur a un biais).

8. Pieges

  • Verrouillage bus I2C : un capteur manquant une horloge peut maintenir SDA bas et geler le bus. Ajoutez une sequence de recuperation (basculer SCL 9×, envoyer STOP) a chaque reveil.
  • Offset demarrage a froid : TMP117 a besoin de 15,5 ms de conversion moyenne ; echantillonner trop vite renvoie des donnees obsoletes. Respectez t_conv.
  • Tension batterie comme proxy temperature : beaucoup de beacons reportent V_batt, mais sous charge la tension chute — mesurez la batterie seulement apres une periode de repos pour la precision.
  • Condensation HR : HDC2080 lit 100 % HR si condensation se forme ; la passerelle doit marquer 100 % HR soutenu comme defaut, pas comme lecture valide.
  • Collision publicite : ajouter un cadre capteur double le temps d’air ; a haute densite de beacons cela augmente la probabilite de collision (voir article collision). Gardez le cadre capteur court et sur un intervalle de publicite separe si possible.

9. Checklist de conception

  • [ ] Choisissez des capteurs dont le courant tient dans la pile (evitez CO2 18 mA sur bouton)
  • [ ] Utilisez un cadre de publicite secondaire ; gardez le cadre identite pour la position
  • [ ] Compressez avec virgule fixe + bitmap ; encodez en delta la derive lente
  • [ ] Definissez bande morte + hysteresis pour supprimer le bruit
  • [ ] Preferez seuil/wake-on-motion a un echantillonnage fixe rapide
  • [ ] Ajoutez la recuperation bus I2C a chaque reveil
  • [ ] Documentez la disposition MSD pour que la passerelle puisse la parser
  • [ ] Verifiez le modele batterie contre le courant sommeil mesure, pas le typ datasheet

10. Conclusion

Un beacon a capteur est un appareil de peripherie, pas seulement un emetteur. La valeur d’ingenierie est dans les decisions prises sur appareil : quand echantillonner, quand se taire, et quels octets minimaux envoyer. Avec le packing virgule fixe, la charge utile pilotee par bitmap, le filtrage bande morte et les rafales declenchees par seuil, un beacon a pile bouton peut reporter l’etat environnemental pendant des annees tout en parlant seulement quand cela compte.

La radio n’a jamais ete le goulot d’etranglement — le courant capteur et la cadence d’echantillonnage le sont. Concevez la logique de reveil d’abord ; l’encodeur de publicite est la partie facile.

Comments

No comments yet. Why don’t you start the discussion?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *