{"id":292,"date":"2021-03-27T21:15:25","date_gmt":"2021-03-27T20:15:25","guid":{"rendered":"https:\/\/rfhyper.wordpress.com\/?p=292"},"modified":"2021-03-27T21:15:25","modified_gmt":"2021-03-27T20:15:25","slug":"decouverte-du-protocole-bluetooth-low-energy-ble-par-la-pratique","status":"publish","type":"post","link":"https:\/\/leblogrf.fr\/index.php\/2021\/03\/27\/decouverte-du-protocole-bluetooth-low-energy-ble-par-la-pratique\/","title":{"rendered":"D\u00e9couverte du protocole Bluetooth Low Energy (BLE) par la pratique"},"content":{"rendered":"\n<p>Le but de cet article est d&rsquo;analyser le protocole sans fil BLE \u00e0 l&rsquo;aide d&rsquo;un capteur de temp\u00e9rature Xiaomi Mi Home et d&rsquo;une application pour smartphone puis d&rsquo;un dongle USB. L&rsquo;objectif \u00e9tant d&rsquo;arriver \u00e0 r\u00e9cup\u00e9rer des informations du capteur sans passer par l&rsquo;application officielle Xiaomi.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Mat\u00e9riel n\u00e9cessaire<\/h2>\n\n\n\n<p>Tout d&rsquo;abord, il faut acheter au minimum dongle USB avec le composant CC2540 et avec un c\u00e2ble de programmation :<br>L&rsquo;original du fabricant TI \u00e0 la r\u00e9f\u00e9rence CC2540EMK-USB, mais il en existe des similaires sur des sites comme Amazon, AliExpress<br><a rel=\"noreferrer noopener\" href=\"https:\/\/www.amazon.fr\/AILOVA-D%C3%A9bogage-dInterface-Broche1Mbps-Renifleur\/dp\/B07Y858TDF\/\" target=\"_blank\">https:\/\/www.amazon.fr\/AILOVA-D%C3%A9bogage-dInterface-Broche1Mbps-Renifleur\/dp\/B07Y858TDF\/<\/a><br><a href=\"https:\/\/fr.aliexpress.com\/item\/1005001847937687.html\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/fr.aliexpress.com\/item\/1005001847937687.html<\/a><\/p>\n\n\n\n<p>Ensuite, un programmateur CC DEBUG :<br><a rel=\"noreferrer noopener\" href=\"https:\/\/www.amazon.fr\/gp\/product\/B07FP5XHPM\" target=\"_blank\">https:\/\/www.amazon.fr\/gp\/product\/B07FP5XHPM<\/a><br>et le capteur Xiaomi Mi Temperature and Humidity Monitor 2<br>Mod\u00e8le : LYWSD03MMC<br>Il est compatible Bluetooth Low Energy BLE 4.2<br>on peut le trouver chez Boulanger ou sur sur AliExpress pour moins de 10\u20ac<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/leblogs.cluster029.hosting.ovh.net\/wp-content\/uploads\/2021\/03\/imagecapteur.png?w=192\" alt=\"\" class=\"wp-image-298\" width=\"221\" height=\"156\" \/><\/figure>\n\n\n\n<p>Il n&rsquo;est pas n\u00e9cessaire d&rsquo;avoir une passerelle Xiaomi, le capteur peut se connecter directement \u00e0 un smartphone.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Test avec l&rsquo;application nRF Connect<\/h2>\n\n\n\n<p>T\u00e9l\u00e9charger l&rsquo;application nRF Connect sur un smartphone Android ou Apple<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"132\" height=\"132\" src=\"http:\/\/leblogs.cluster029.hosting.ovh.net\/wp-content\/uploads\/2021\/03\/icon_nrfconnect.png?w=132\" alt=\"\" class=\"wp-image-299\" \/><\/figure>\n\n\n\n<p>Mettre le capteur de temp\u00e9rature \u00e0 proximit\u00e9 du smartphone et lancer un scan.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/leblogs.cluster029.hosting.ovh.net\/wp-content\/uploads\/2021\/03\/2021-03-13_16-25-50_000.png\" alt=\"\" class=\"wp-image-300\" width=\"188\" height=\"334\" srcset=\"https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/2021-03-13_16-25-50_000.png 750w, https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/2021-03-13_16-25-50_000-169x300.png 169w, https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/2021-03-13_16-25-50_000-576x1024.png 576w\" sizes=\"auto, (max-width: 188px) 100vw, 188px\" \/><\/figure>\n\n\n\n<p>Vous allez voir appara\u00eetre une ligne avec \u00ab\u00a0LYWSD03MMC\u00a0\u00bb. Avec l&rsquo;application, on peut se connecter au capteur et lire plusieurs informations.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Lecture des paquets avec le dongle USB CC2540 de TI<\/h2>\n\n\n\n<p>Installer le logiciel SmartRF Flash programmer de Texas Instruments. Ne pas utiliser la version V2 qui n&rsquo;est pas compatible avec le CC DEBUGGER. Par exemple la version 1.12.8 du 31 Mai 2016.<br>Le logiciel est gratuit, mais il faut avoir un compte TI pour le t\u00e9l\u00e9charger.<br><a rel=\"noreferrer noopener\" href=\"https:\/\/www.ti.com\/tool\/FLASH-PROGRAMMER\" target=\"_blank\">https:\/\/www.ti.com\/tool\/FLASH-PROGRAMMER<\/a><br>Ensuite, il faut installer le driver pour le CC DEBUGGER :<br><a rel=\"noreferrer noopener\" href=\"https:\/\/www.ti.com\/lit\/zip\/swrc212\" target=\"_blank\">https:\/\/www.ti.com\/lit\/zip\/swrc212<\/a><br>Apr\u00e8s avoir install\u00e9 le driver, connecter le CC DEBUGGER au PC. V\u00e9rifier que le debugger est bien reconnu en ouvrant le \u00ab\u00a0Gestionnaire de P\u00e9riph\u00e9riques\u00a0\u00bb de Windows. Le debugger devrait apparaitre comme un \u00ab\u00a0Cebal controlled device\u00a0\u00bb<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"280\" height=\"183\" src=\"http:\/\/leblogs.cluster029.hosting.ovh.net\/wp-content\/uploads\/2020\/09\/image.png?w=280\" alt=\"\" class=\"wp-image-221\" \/><figcaption>V\u00e9rification du driver du CC DEBUGGER<\/figcaption><\/figure><\/div>\n\n\n\n<p>Si le driver, n&rsquo;est pas install\u00e9 correctement, vous pouvez installer le driver manuellement.<br>T\u00e9l\u00e9charger et installer le logiciel PACKET-SNIFFER :<br><a rel=\"noreferrer noopener\" href=\"https:\/\/www.ti.com\/tool\/PACKET-SNIFFER\" target=\"_blank\">https:\/\/www.ti.com\/tool\/PACKET-SNIFFER<\/a><br>(Ne pas utiliser SmartRF Packet Sniffer 2, il n&rsquo;est pas compatible avec le CC2540) prendre par exemple la version v2.18.1 du 30 Juin 2014)<br>R\u00e9cup\u00e9rer le fichier C:\\Program Files (x86)\\Texas Instruments\\SmartRF Tools\\Packet Sniffer\\bin\\general\\firmware\\sniffer_fw_cc2540_usb.hex<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Connecter le CC DEBUGGER<\/h2>\n\n\n\n<p>Brancher le CC DEBUGGER \u00e0 un port USB du PC puis au dongle CC2540 qui lui m\u00eame doit \u00eatre connect\u00e9 \u00e0 un autre port USB du PC, comme sur la figure ci-dessous :<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/leblogs.cluster029.hosting.ovh.net\/wp-content\/uploads\/2020\/09\/2020-09-13_16-27-43_335-1.jpeg?w=1024\" alt=\"\" class=\"wp-image-224\" width=\"569\" height=\"426\" \/><figcaption>Branchements<\/figcaption><\/figure><\/div>\n\n\n\n<p>Appuyer sur le bouton RESET du CC DEBUGGER, la LED devrait s&rsquo;allumer en vert.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4.Programmation<\/h2>\n\n\n\n<p>Ex\u00e9cuter le logiciel Flash Programmer, dans la section Flash image, s\u00e9lectionnez le fichier sniffer_fw_cc2540_usb.hex<br>Cliquer sur \u00ab\u00a0Perform actions\u00a0\u00bb<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"938\" height=\"757\" src=\"http:\/\/leblogs.cluster029.hosting.ovh.net\/wp-content\/uploads\/2021\/03\/flash.png?w=938\" alt=\"\" class=\"wp-image-302\" srcset=\"https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/flash.png 938w, https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/flash-300x242.png 300w, https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/flash-768x620.png 768w\" sizes=\"auto, (max-width: 938px) 100vw, 938px\" \/><figcaption>TI Flash Programmer<\/figcaption><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">4. Lecture des trames<\/h2>\n\n\n\n<p>Ex\u00e9cuter le logiciel <strong>SmartRF Packet Sniffer<\/strong>, s\u00e9lectionner le protocole \u00ab\u00a0Bluetooth Low Energy\u00a0\u00bb et cliquer sur \u00ab\u00a0Start\u00a0\u00bb<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/leblogs.cluster029.hosting.ovh.net\/wp-content\/uploads\/2021\/03\/packet-sniffer.png?w=807\" alt=\"\" class=\"wp-image-307\" width=\"605\" height=\"444\" srcset=\"https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/packet-sniffer.png 807w, https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/packet-sniffer-300x220.png 300w, https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/packet-sniffer-768x563.png 768w\" sizes=\"auto, (max-width: 605px) 100vw, 605px\" \/><figcaption>Logicel TI SmartRF Packet Sniffer<\/figcaption><\/figure>\n\n\n\n<p>V\u00e9rifier que le dongle est bien reconnu et cliquer sur le bouton \u00ab\u00a0Play\u00a0\u00bb :<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1035\" height=\"909\" src=\"http:\/\/leblogs.cluster029.hosting.ovh.net\/wp-content\/uploads\/2021\/03\/packet-sniffer2.png?w=1024\" alt=\"\" class=\"wp-image-313\" srcset=\"https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/packet-sniffer2.png 1035w, https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/packet-sniffer2-300x263.png 300w, https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/packet-sniffer2-1024x899.png 1024w, https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/packet-sniffer2-768x675.png 768w\" sizes=\"auto, (max-width: 1035px) 100vw, 1035px\" \/><figcaption>SmartRF Packet Sniffer d\u00e9marrage<\/figcaption><\/figure>\n\n\n\n<p>Les premi\u00e8res trames devraient appara\u00eetre. Il peut y en avoir beacoup car il y a de plus en plus d&rsquo;\u00e9metteur Bluetooth autour de nous ! <br>Mettre le capteur proche du dongle et observer la valeur RSSI. C&rsquo;est la puissance du signal re\u00e7ue. La valeur la plus \u00e9lev\u00e9e sera probablement celle du capteur.<br>Ici on voit -34dBm. Noter la valeur AdvA qui est l&rsquo;adresse du capteur. Ici 0xA4C1388F4833<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1547\" height=\"1030\" src=\"http:\/\/leblogs.cluster029.hosting.ovh.net\/wp-content\/uploads\/2021\/03\/packet-sniffer3.png?w=1024\" alt=\"\" class=\"wp-image-314\" srcset=\"https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/packet-sniffer3.png 1547w, https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/packet-sniffer3-300x200.png 300w, https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/packet-sniffer3-1024x682.png 1024w, https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/packet-sniffer3-768x511.png 768w, https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/packet-sniffer3-1536x1023.png 1536w\" sizes=\"auto, (max-width: 1547px) 100vw, 1547px\" \/><figcaption>Affichage des trames BLE<\/figcaption><\/figure>\n\n\n\n<p>Maintenant, on va filtrer les trames.<br>Dans le menu \u00ab\u00a0Display filter\u00a0\u00bb, s\u00e9lectionner le \u00ab\u00a0Field Name\u00a0\u00bb = ADV_IND AdvA et appuyer sur le bouton \u00ab\u00a0First\u00a0\u00bb, puis entrer l\u2019adresse AdvA r\u00e9cup\u00e9r\u00e9 plus haut dans le champ \u00ab\u00a0Filter condition\u00a0\u00bb&nbsp;: AA1=0xA4C1388F4833, cliquer sur Add, puis \u00ab\u00a0Apply filter\u00a0\u00bb.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1547\" height=\"1030\" src=\"http:\/\/leblogs.cluster029.hosting.ovh.net\/wp-content\/uploads\/2021\/03\/packet-sniffer4.png?w=1024\" alt=\"\" class=\"wp-image-316\" srcset=\"https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/packet-sniffer4.png 1547w, https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/packet-sniffer4-300x200.png 300w, https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/packet-sniffer4-1024x682.png 1024w, https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/packet-sniffer4-768x511.png 768w, https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/packet-sniffer4-1536x1023.png 1536w\" sizes=\"auto, (max-width: 1547px) 100vw, 1547px\" \/><figcaption>Filtrage les trames BLE<\/figcaption><\/figure>\n\n\n\n<p>On va chercher \u00e0 retrouver le nom du capteur.<br>On peut constater que toutes les trames ADV_IND sont identiques, c&rsquo;est des trames d'\u00a0\u00bbADVERTISEMENT\u00a0\u00bb. Les donn\u00e9es sont dans AdvData, mais on ne trouve pas le nom du capteur.<br>Donc cela doit \u00eatre dans une autre trame. En effet, il est possible d\u2019envoyer une trame ADV_SCAN_REQ et le capteur r\u00e9pondra par une trame ADV_SCAN_RSP on va donc rechercher ces trames.<br>Dans le menu \u00ab\u00a0Display filter\u00a0\u00bb, s\u00e9lectionner \u00ab\u00a0Field Name\u00a0\u00bb = \u00ab\u00a0ADV_SCANRSP AdvA\u00a0\u00bb<br>Cliquer sur le bouton \u00ab\u00a0First\u00a0\u00bb, puis entrer l\u2019adresse AdvA r\u00e9cup\u00e9r\u00e9 plus haut dans le champ \u00ab\u00a0Filter condition\u00a0\u00bb\u00a0: AA5=0xA4C1388F4833<br>Cliquer sur Add, puis sur Apply filter.<br>Au bout d\u2019un certain temps une trame va apparaitre\u00a0:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1547\" height=\"1030\" src=\"http:\/\/leblogs.cluster029.hosting.ovh.net\/wp-content\/uploads\/2021\/03\/packet-sniffer5.png?w=1024\" alt=\"\" class=\"wp-image-322\" srcset=\"https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/packet-sniffer5.png 1547w, https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/packet-sniffer5-300x200.png 300w, https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/packet-sniffer5-1024x682.png 1024w, https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/packet-sniffer5-768x511.png 768w, https:\/\/leblogrf.fr\/wp-content\/uploads\/2021\/03\/packet-sniffer5-1536x1023.png 1536w\" sizes=\"auto, (max-width: 1547px) 100vw, 1547px\" \/><figcaption>Trame ADV_SCANRSP<\/figcaption><\/figure>\n\n\n\n<p>Dans cette trame, on peut analyser les donn\u00e9es \u00ab\u00a0ScanRspData\u00a0\u00bb et observer que le code hexad\u00e9cimal convertit en caract\u00e8res ASCII correspond bien au nom du capteur :<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">4C<\/td><td class=\"has-text-align-center\" data-align=\"center\">59<\/td><td class=\"has-text-align-center\" data-align=\"center\">57<\/td><td class=\"has-text-align-center\" data-align=\"center\">53<\/td><td class=\"has-text-align-center\" data-align=\"center\">44<\/td><td class=\"has-text-align-center\" data-align=\"center\">30<\/td><td class=\"has-text-align-center\" data-align=\"center\">33<\/td><td class=\"has-text-align-center\" data-align=\"center\">4D<\/td><td class=\"has-text-align-center\" data-align=\"center\">4D<\/td><td class=\"has-text-align-center\" data-align=\"center\">43<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">L<\/td><td class=\"has-text-align-center\" data-align=\"center\">Y<\/td><td class=\"has-text-align-center\" data-align=\"center\">W<\/td><td class=\"has-text-align-center\" data-align=\"center\">S<\/td><td class=\"has-text-align-center\" data-align=\"center\">D<\/td><td class=\"has-text-align-center\" data-align=\"center\">0<\/td><td class=\"has-text-align-center\" data-align=\"center\">3<\/td><td class=\"has-text-align-center\" data-align=\"center\">M<\/td><td class=\"has-text-align-center\" data-align=\"center\">M<\/td><td class=\"has-text-align-center\" data-align=\"center\">C<\/td><\/tr><\/tbody><\/table><figcaption>D\u00e9codage nom du capteur en ASCII<\/figcaption><\/figure>\n\n\n\n<p>Dans un autre article, on apprendra \u00e0 d\u00e9coder les trames BLE et voir si il est possible de d\u00e9coder les donn\u00e9es de temp\u00e9rature et d&rsquo;humidit\u00e9 du capteur.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le but de cet article est d&rsquo;analyser le protocole sans fil BLE \u00e0 l&rsquo;aide d&rsquo;un capteur de temp\u00e9rature Xiaomi Mi Home et d&rsquo;une application pour smartphone puis d&rsquo;un dongle USB. L&rsquo;objectif \u00e9tant d&rsquo;arriver \u00e0 r\u00e9cup\u00e9rer des informations du capteur sans passer par l&rsquo;application officielle Xiaomi. 1. Mat\u00e9riel n\u00e9cessaire Tout d&rsquo;abord, il faut acheter au minimum &hellip; <a href=\"https:\/\/leblogrf.fr\/index.php\/2021\/03\/27\/decouverte-du-protocole-bluetooth-low-energy-ble-par-la-pratique\/\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">D\u00e9couverte du protocole Bluetooth Low Energy (BLE) par la pratique<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":295,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-292","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ble"],"_links":{"self":[{"href":"https:\/\/leblogrf.fr\/index.php\/wp-json\/wp\/v2\/posts\/292","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/leblogrf.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/leblogrf.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/leblogrf.fr\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/leblogrf.fr\/index.php\/wp-json\/wp\/v2\/comments?post=292"}],"version-history":[{"count":0,"href":"https:\/\/leblogrf.fr\/index.php\/wp-json\/wp\/v2\/posts\/292\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/leblogrf.fr\/index.php\/wp-json\/wp\/v2\/media\/295"}],"wp:attachment":[{"href":"https:\/\/leblogrf.fr\/index.php\/wp-json\/wp\/v2\/media?parent=292"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/leblogrf.fr\/index.php\/wp-json\/wp\/v2\/categories?post=292"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/leblogrf.fr\/index.php\/wp-json\/wp\/v2\/tags?post=292"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}