Go Down

Topic: Les balises Bluetooth Low Energy (Beacons) (Read 821 times) previous topic - next topic

nico78

May 31, 2020, 01:34 pm Last Edit: May 31, 2020, 01:41 pm by nico78
On trouve très peu d'information et de code pour les nouvelles cartes Arduino avec le Bluetooth Low Energy intégré, contrairement aux cartes ESP32, je mets donc à disposition les différents codes de tests et toutes informations utiles.


Présentation et cas d'utilisation:

Un beacon est une petite balise bluetooth low energy permettant d'interagir avec un utilisateur possédant un smartphone et l'application adéquate afin de proposer différents types de services publicitaires, notamment de proposer des offres pertinentes de coupons, de promotions ou d'informations liées à des enseignes.
Leur usage est principalement commerciale même s'il peuvent être utilisés à d'autres fins.
La technologie Beacon nécessite la gestion d'une base de donnée afin de traiter les informations issues de ces balises et leur donner un sens, sauf dans le cas des URL (Eddystone, type de trame URL, anciennement URIBeacon) qui génère un lien web.


4 types de Beacons:

iBeacon (Propriétaire APPLE) - 1 seul type de trame, très répandu [2013]
AltBeacon (Ouvert Radius Network, compatible APPLE) - 1 seul type de trame, peu répandu [2014]
Eddystone (Ouvert Google) - 4 types de trames URL, UID, TLM et EID - récent se développe, différent des formats précédents [2015]
GeoBeacon (Ouvert Tecno-World) Géolocalisation exclusivement, utilise le format NAC-Adress (Natural Area Coding System)  [2017]

Le beacon diffuse de l'information (en Broadcast) sans avoir a se connecter (donc tout le monde y a accès), on peut changer l'information suivant une heure donnée, arrêter la diffusion, la reprendre etc.., différents exemples seront donnés pour le iBeacon et le AltBeacon, il n'est pas possible d'utiliser le format Eddystone sans modifier la librairie ArduinoBLE car le type de données 0x03 n'est pas pris en charge.

La librairie actuelle permet donc de créer des iBeacons ainsi que des altBeacons avec la fonction setManufacturerData mais elle ne permet pas de les lire, il faudra impérativement un smartphone pour les tests.
Une demande a été faite pour l'ajout de cette fonction de lecture des données.

Lien de la librairie sur Github: https://github.com/arduino-libraries/ArduinoBLE


Plus d'explication sur les Beacons ici:

https://www.ubidreams.fr/beacons/ [FR - Présentation]

https://www.mokosmart.com/fr/beacon-infrastructure/ [FR - Présentation]

https://en.wikipedia.org/wiki/Types_of_beacons [EN]



Sites officiels:

https://developer.apple.com/ibeacon/ [EN - iBeacon]

https://altbeacon.org/ [EN - AltBeacon]

https://developers.google.com/beacons/eddystone [EN - Eddystone]

https://github.com/Tecno-World/GeoBeacon [EN - GeoBeacon]



Format et structure des balises Beacons (données techniques):

https://os.mbed.com/blog/entry/BLE-Beacons-URIBeacon-AltBeacons-iBeacon/ [EN]

https://os.mbed.com/teams/Bluetooth-Low-Energy/code/BLE_EddystoneBeacon_Service/file/5a2a104a21a8/main.cpp/ [EN]

https://austinblackstoneengineering.com/ble-beacons-ibeacon-altbeacon-uribeacon-and-derivatives/ [EN]



En pièce jointe, les différents codes de test dans un dossier zippé (Beacons.zip):

A titre d'info, l'application android 'Beacon Scanner' a été utilisé pour les tests.

BLE_IBEACON_1.ino
BLE_IBEACON_2.ino
BLE_ALTBEACON_1.ino
BLE_ALTBEACON_2.ino
BLE_BEACON_EDDYSTONE_URL.ino
Les balises Bluetooth Low Energy (Beacons).docx


al1fch

#1
May 31, 2020, 01:58 pm Last Edit: May 31, 2020, 02:19 pm by al1fch
Bonjour

merci pour ce 'tour de la question' !

Petit complément : les modules HM-10 'en solo' peuvent être configurés en balise iBeacon,
Le courant moyen d'alimentation est très faible, (<200µA)
Méthode décrite en #17 vers la fin de ce tutoriel de J-M-L https://forum.arduino.cc/index.php?topic=434951.0

un HM-10 tout seul configuré en Ibeacon avec un réveil tt les 7s tient plus d'un an sur une pile CR2032, l'ESP32, a lui une consommation anormalement élevée en BLE du moins avec la librairie actuelle.
On est très loin (en matière de consommation d'énergie) des performances des puces de Nordic Semiconductor
 




nico78

Merci pour le lien, ces modules sont très intéressants en effet pour réaliser cette fonction; je précise que les codes que je présente sont essentiellement pour l'expérimentation et l'utilisation des fonctions de la librairie ArduinoBLE par l'exemple, cela dit ça pourra toujours servir.

Vous m'avez donné l'envie d'essayer sur un JDY-18 que je possède,  ça marche très bien et c'est relativement simple à mettre en place si on dispose de la documentation des commandes AT, qui est un peu différente du HM10.

Une page sur les spécifications: http://myosuploads3.banggood.com/products/20190515/20190515050356JDY-18-V1.5Englishmanual.pdf

Les modules JDY semblent moins cher que les HM en général, je ne sais pas ce qui est le mieux.


al1fch

#3
May 31, 2020, 08:48 pm Last Edit: May 31, 2020, 09:05 pm by al1fch
je ne sais pas non plus , mais pour les 'vrais HM-10', ceux de Jinan Huamao,  j'apprécie le suivi et les améliorations  successives du firmware ainsi que la facilité de mise à jour (par une commande AT) :
http://www.jnhuamao.cn/index_en.asp?ID=1
http://www.jnhuamao.cn/download_rom_en.asp?id=1

je n'ai pas testé le courant de deepsleep du dernier firmware (0,1µA annoncés !!)
Code: [Select]
-Add deep sleep mode
  AT+IMME1 and AT+SLEEP (or AT+PWRM0), let module into 0.1uA deep sleep mode.

V707
 -Modify AT+ADDR<P1> command
  AT+ADDR<P1> command used to change module MAC.
  Query command AT+ADDR?
  Setup command AT+ADDR<P1>
  P1: 12 Bytes, MAC string.
 
V706
 -Add AT+UART command
  AT+UART<P1> command used to switch UART wake function when module in sleep mode.
  P1: 1 Byte, possible value ?, 0, 1
      ?: Query
      0: Open UART wake function (default value)
      1: Close UART wake function.









Go Up