exemple d'utilisation d'un HM-10 bluetooth LE

Bonjour à tous

j'ai commandé il y a quelques temps des composants bluetooth HM-10 et je les ai reçus. je voulais jouer un peu avec et quitte à y passer un peu de temps, autant partager quelques infos si ça peut servir.

les HM-10 ont l'avantage d'être "BLE" ou "Bluetooth Low Energy". Il sont principalement destiné aux objets pour lesquels le besoin en débit de transmission de données est faible ou l’autonomie cruciale ainsi qu’aux équipements nomades tels que les smartphones. La portée effective se compte en quelques dizaines de mètres. il sont compatibles aussi avec le BT classique.

bon - si vous lisez les spécifications ils vous monteront qu'il y a des faux en circulation

et... c'est ce que j'ai commandé sans trop faire attention. mais bon, je me suis dit que ça doit quand même pouvoir servir pour de la communication série de base. Je voulais voir comment les utiliser simplement pour faire communiquer entre eux deux arduino, ou un arduino et un ordinateur sans fil et ce sans librairie, juste en paramètrant correctement les 2 composants.


Voici quelques éléments d'information si vous avez acheté les même composants et que vous voulez les faire discuter:

1. il faut d'abord les configurer
pour cela j'ai pris un adaptateur FTDI que j'ai directement connecté à mon module

attention le composant est souvent en 3.3V - les miens cependant s'alimentent en 3.3 ou 5V et bien qu'ils soient déclarés pour du 3.3V pour Tx et Rx, ils supportent sans pb le 5V. j'ai donc connecté tout cela sans adaptation de tension, mais assurez vous de ne pas griller les vôtres.

Pour ce faire vous pouvez utiliser un te291 level shifter par exemple, il en existe à 2, 4, 8 entrées.

par exemple celui ci a 4 entrées

4

et je l'utilise dans un montage comme cela

Ensuite il suffit de connecter un câble USB sur l'adaptateur FTDI, et utiliser sur votre Mac/PC un programme d'émulation de terminal (j'aime bien CoolTerm) ou simplement la fenêtre de l'IDE de l'arduino, régler la vitesse de connexion pour moi c'était 9600 bauds par défaut.

vous pouvez taper AT et validez et vous devez recevoir en réponse si tout va bien OK de la part de votre module (avec un passage à la ligne)

si vous tapez AT+HELP votre module vous donnera la liste des commandes supportées. Sur les miens j'obtiens

********************************************************************
  Command             Description
  ----------------------------------------------------------------
  AT                  Check if the command terminal work normally
  AT+RESET            Software reboot
  AT+VERSION          Get firmware, bluetooth, HCI and LMP version
  AT+HELP             List all the commands
  AT+NAME             Get/Set local device name
  AT+PIN              Get/Set pin code for pairing
  AT+BAUD             Get/Set baud rate
  AT+LADDR            Get local bluetooth address
  AT+ADDR             Get local bluetooth address
  AT+DEFAULT          Restore factory default
  AT+RENEW            Restore factory default
  AT+STATE            Get current state
  AT+PWRM             Get/Set power on mode(low power)
  AT+POWE             Get/Set RF transmit power
  AT+SLEEP            Sleep mode
  AT+ROLE             Get/Set current role.
  AT+PARI             Get/Set UART parity bit.
  AT+STOP             Get/Set UART stop bit.
  AT+INQ              Search slave model
  AT+SHOW             Show the searched slave model.
  AT+CONN             Connect the index slave model.
  AT+IMME             System wait for command when power on.
  AT+START            System start working.
  AT+UUID             Get/Set system SERVER_UUID .
  AT+CHAR             Get/Set system CHAR_UUID .
  -----------------------------------------------------------------
  Note: (M) = The command support master mode only.
  Copyright@2013 www.[color=blue]bolutek[/color].com. All rights reserved.
********************************************************************

c'est un module bolutek et une rapide recherche me donne un lien vers la doc AT

si je fais un AT+VERSION il me répond +VERSION=Firmware V3.0.6,Bluetooth V4.0 LE le firmware est donc assez vieux... je n'avais pas envie de jouer à mettre à jour le firmware (on ne sait jamais trop ce que l'on télécharge des sites chinois, mais si les coeur vous en dit vous pouvez lire ce post

voilà donc la base des outils pour connecter sans fil, en émulation de port série 2 "ordinateurs".

imaginons que vous ayez 2 HM-10, que l'on appelle A et B

1/ sur le composant A et B faire un

AT+RENEW

pour les remettre au défaut d'usine.

2/ sur le composant B:

On peut demander son adresse:

AT+ADDR
+ADDR=00:15:83:00:83:C5

je mets le composant B en mode esclave

AT+ROLE0
+ROLE=0
OK

3/ sur le composant A

je mets le composant A en mode maître

AT+ROLE1
+ROLE=1
OK

je lui demande de trouver quels sont les composants esclaves dispo

AT+INQ
+INQS
+INQ:1 0x0015830083C5
+INQE
Devices Found 1

je remarque qu'en position 1 j'ai bien l'adresse de mon composant B.
je lui demande de se connecter au composant B, 1er de la liste:

AT+CONN1    /// connect to device #1
+Connecting  0x0015830083C5
+Connected  0x0015830083C5

et voilà maintenant mes 2 HM-10 sont connectés comme des ports séries distants. Tout ce qui arrive sur le Rx de l'un est envoyé sur le Tx de l'autre et inversement.

maintenant il n'y a rien d'autre à faire, tant que vous ne coupez pas le courant ils resteront connectés.

Sur mon Arduino mega j'ai par exemple écrit ce petit code en connectant un HM-10 sur Serial2 et j'utilise le port Serial standard à travers USB en me connectant à un premier ordinateur.

#define hm10 Serial2 // pour faciliter la lecture.

void setup() {
  Serial.begin(115200);
  hm10.begin(9600);
}

void loop() {
  while (Serial.available()) {
    int c = Serial.read();
    if (c != -1) hm10.write((byte) c);
  }

  while (hm10.available()) {
    int c = hm10.read();
    if (c != -1) Serial.write((byte) c);
  }
}

ce code est tout simple, il permet de taper quelque chose dans la console série de l'arduino, configurée à 115200 bauds, et de l'envoyer à l'arduino qui le transmet au HM-10 et tout ce que reçoit le HM-10 est ensuite envoyé à la console série par le port Serial.

de l'autre côté j'ai connecté mon petit montage FTDI + HM10 directement par USB à un autre ordinateur (mais vous pouvez le mettre sur un second port USB du même) et ouvert CoolTerm en me connectant sur le bon port à 9600 bauds.

côté FTDI je tape les commandes pour mettre ce module en mode esclave - cf plus haut.

côté MEGA, je tape les commandes AT pour passer en mode maître puis trouver les esclaves et me connecter à celui trouvé.

et voilà maintenant tout ce que je tape côté MEGA apparaît côté FTDI et tout ce que je tape côté FTDI apparaît côté MEGA.

Bonjour,
Sympa comme partage

C'est bien la première fois que je commence à comprendre quelque chose au Bluetooth :grin:
Je vais peut-être quitter mes fils et me mettre à la radio.

Merci c'est très clair.

J-M-L:
Bonjour à tous

j'ai commandé il y a quelques temps des composants bluetooth HM-10 et je les ai reçus. je voulais jouer un peu avec et quitte à y passer un peu de temps, autant partager quelques infos si ça peut servir.

Bonsoir
Sympa d'avoir débroussaillé le terrain ! :grin:
Je n'ai pas encore utilisé de BT 4.0 ou BLE avec arduino
Ma femme a acheté recemment une balance BT BLE , ça va peut etre etre le moment de jouer avec.

tu t'es approvisionné où ?
quel tarif ?

hello
partage fort sympathique
merci

bonjour
Reçu les modules BT BLE
à priori ce sont exactement les memes que JML
+VERSION=Firmware V3.0.6,Bluetooth V4.0 LE
pour test avec un FTDI en 3.3V alim module en 5V
Il trouve sans problème le BT BLE de la balance
connexion sans problème.

Je m'attendais à du plus compliqué comme dialogue
pour ceux qui seraient interessés

la balance sort une trame seconde sous cette forme Hexa
E7 58 01 MM LL
les 3 premiers octets sont invariable
MM et LL est un entier représentant le poids à la résolution de 50 grammes.

Je pense que pour les fêtes je vais faire une balance avec sirène d'alarme en cas de dépassement :grin:

@Artouste

tu t'es approvisionné où ?
quel tarif ?

J'achète mes gadgets sur eBay en Asie - ils mettent longtemps à venir mais comme c'est pour explorer et se challenger les neuronnes ça ne me gêne pas... je passe une commande de trucs tous les 3/4 jours et comme cela j'ai un flot de nouveaux trucs à Explorer qui arrive en permanence :).... bon les tiroirs commencent être un peu pleins va falloir que je m'organise un peu

Super pour la balance!!!!

J-M-L:
je passe une commande de trucs tous les 3/4 jours et comme cela j'ai un flot de nouveaux trucs à Explorer qui arrive en permanence :).... bon les tiroirs commencent être un peu pleins va falloir que je m'organise un peu

Ah, merci , je me sens moins seul :slight_smile:

Ma factrice doit se demander ce que peuvent être ces colis libellés en Chinois que je reçois très régulièrement.

J-M-L:
@Artouste

J'achète mes gadgets sur eBay en Asie - ils mettent longtemps à venir mais comme c'est pour explorer et se challenger les neuronnes ça ne me gêne pas... je passe une commande de trucs tous les 3/4 jours et comme cela j'ai un flot de nouveaux trucs à Explorer qui arrive en permanence :).... bon les tiroirs commencent être un peu pleins va falloir que je m'organise un peu

Super pour la balance!!!!

bonsoir
Un peu pareil , je commande (trop :grin: ) régulièrement "ASIA" ,
Pour du plus rapide , je passe par les "comptoirs" implantés en europe.

Le surcout est généralement faible en rapport (pour du DIY).
Le delai est beaucoup plus court (typiquement une "grosse semaine")
Mais bon , ça ne reste là que du "ludique" :sunglasses:

Pour la balance , je finalise actuellement l’intégration du HM10 avec un ESP8266.

La suite logique devrait etre juste un ESP32 , mais pour l'instant ... :sunglasses:

patg_:
Ma factrice doit se demander ce que peuvent être ces colis libellés en Chinois que je reçois très régulièrement.

Mon facteur m'a posé la question :slight_smile:

Bjr JML et merci pour le partage :stuck_out_tongue:
as-tu essayé de faire tourner les BLE à 115200 bps ?
moi je n'y arrive pas sans perdre en fiabilité :cry:

Oui mais pas avec software serial - Avec un port série "hardware"

Ensuite ça dépend bien sûr aussi bcp de l'environnement dans lequel vous opérez (distance, perturbation,...) ainsi que de là qualité de l'alimentation du module.

Bonsoir à tous.

J'ai besoin d'un peu d'aide:

J'essaye d'envoyer via Bluetooth 4.0 des messages textes à un ensemble de matrices à leds (librairie PAROLA , super cool), le tout piloté par un Arduino Uno.

Je me sers d'un iPhone (ou iPad) avec l'application gratuite "HM10 Bluetooth serial"

L'idée est d'avoir un message défilant dont je peux changer le contenu par BT avec l'iPhone.

J'ai essayé 2 modules différents:
-Le HM-10 original
-sa copie CC41

Tout deux fonctionnent, mais me "brident" les messages à 90 caractères. Pas un de plus.
Si j'en mets plus, le nouveau message est ignoré.

J'ai même flashé le firmware du HM-10 dans le CC41 (+ MAJ du dernier FW (V546)

voir procédure ici : How to flash genuine HM-10 firmware on CC2541 (make genuine HM-10 from CC41) - Networking, Protocols, and Devices - Arduino Forum

(Super tuto , ça a fonctionné super facilement), mais résultat identique.

Je souhaiterais vraiment envoyer des messages plus longs.
En passant par le moniteur série USB de l'Arduino, je peux mettre un peu plus de 400 caractères (limite de mémoire pour le buffer dans l'Arduino dans mon programme)

Donc, ça n'est pas un problème lié au programme ou à l'Arduino.

Auriez-vous une idée pour lever cette limitation 90 bytes?

D'avance, merci

Bonsoir
Pose ta question dans la section generale
Mais de memoire il me semble que le profil SPP en BLE est limité à 90 bytes/paquet.
La limitation vient "surement" de ton appli qui n'envoie qu'un paquet.
fais un test de liaison simple avec tes 2 HM-10/CC41

Bonjour,

J'ai un shield HM-10 que je me suis procurer sur Amazon. J'ai réussi à le connecter sur mon ordi sous Windows 8 (je sais...). Toutefois, contrairement à un BT classique, celui-ci ne montre aucun port série de disponible.

Comment faites-vous pour faire apparaître un port "COM" sous Windows?

Merci

J'ai réussi à le connecter sur mon ordi sous Windows 8

ça veut dire quoi?

Bonjour

Comment faites-vous pour faire apparaître un port "COM" sous Windows?

pas de profil SPP en BLE, donc pas de port COM virtuel !!

Certains fabricants de puces BLE ou modules proposent des solutions 'maison' pour de la transmission série par BLE
ces définitions 'propriétaires' ne sont pas actuellement connues des systèmes d'exploitations de PC et nécessitent des softs spécifiques ....à développer.

Sous Android on trouve quelque applis , dont Serial Bluetooth permettant une connection en terminal avec un HM-10 ou une puce BLE avec la config (service/caractéristique) 'UART' de nrf

HM-10 (solo) en balise iBeacon

plutôt que créer un fil spécifique j'opte pour un prolongement de celui de J-M-L

La manip' décrite içi permet de configurer un module HM-10 en balise iBeacon se réveillant toutes les 7 secondes puis passant en mode sommeil (180 µA) . OK sur une pile CR2032 pendant plus de deux ans !!

Ainsi configuré le HM-10 , en solo sans carte Arduino, devient une balise iBeacon.

L'iBeacon HM-10 est identifiée comme telle par un scanner de balises tournant sous Android :
iB HM10.jpg

Tenant compte des recommendations de J-M-L dans son message initial j'ai opté pour un 'vrai' HM-10 avec présence des deux quartz/oscillateurs à quartz.

L'achat a été effectué début avril à la boutique ALL ELECTRONICS MALL d'Aliexpress

A réception j'ai découvert que le firmware n'est pas le 'Bolutek' décrit par J-M-L mais un firmware récent(6.03) de 'HMSoft'. Il semble posséder des commandes AT supplémentaires. (je joins le pdf)
La commande HELP ne donne pas le liste des commandes AT mais un lien vers le site du fabricant où il est possible de trouver docs, outils et firmwares.

Pour passer en mode iBeacon voici les commandes envoyées au module :

AT+RENEW
AT+RESET
AT+ADVIF
AT+ADTY3
AT+IBEA1
AT+DELO2
AT+PWRM0
AT+RESET

La commande AT+ADVI permet de définir l'intervalle entre deux activités de l'iBeacon (F est la valeur maximale et correspond à 7 secondes)

D'autres commandes permettraient de redéfinir la totalité de l'UUID ainsi que les valeurs de 'Major' et 'Minor'

N'ayant pas d'autre HM-10 sous la main pur servir de scanner d'iBeacon j'ai testé avec des scanners Android et avec un ESP32 doté du programme de scanner de beacons joint, (ce programme sait identifier les iBeacons (proposées par Apple, et 2 autres types de beacons : Eddystone URL et Eddystone TLM (proposés par Google)

Voilà le retour de l'ESP32 en scanner :

Scan done! Devices found: 1

Advertised Device: Name: , 
Address: 3c:a3:08:a0:49:9c, 
manufacturer data: 4c00021574278bdab64445208f0c720eaf05993507e201acc5 

iBeacon Frame
ID: 004C Major: 2018 Minor: 428 
UUID: 359905af-0e72-0c8f-2045-44b6da8b2774 Power: -59

içi les valeurs de 'Major' et 'Minor' avaient été redéfinies par des commandes AT+MARJ et AT+MINO

En fait l'essentiel de l'information est dans la trame :

4c00021574278bdab64445208f0c720eaf05993507e201acc5

4c00    02   15   74 27 8b da b6 44 45 20 8f 0c 72 0e af 05 99 35   07e2 01ac c5
Apple   iB   ln   ---------------------UUID----------------------   Maj  Min  dbm

L'identifiant 0x004C utilisé permet à ce HM-10 d'être vu comme produit Apple par l'utilitaire nrfConnect (Android)
iB nrfConnect.jpg

HM-DataSheet_V2017-07.pdf (846 KB)

ESP32_BLE_beaconscan.zip (5.04 KB)

Merci - addition utile au post !!

Bonjour

Le fabricant du 'vrai HM-10' Jinan Huamao Technology fait évoluer ses modules en publiant des mises à jour de firmwares. Une version 7.01 pour CC2541 vient de sortir en ce début janvier 2019 avec des ajouts intéressants pour le BLE (voit le fichier joint).

Je trouve içi mes HM-10 ils ont une puce CC2541 et étaient livrés avec le firmware Jinan Huamo 6.06,
firmware apparement plus complet que ceux d'autres module 'HM-10' et bien documenté.
+Un bootloader est intégré permettant la mise à jour facile par port série USB.

readme.txt (14.3 KB)