Go Down

Topic: exemple d'utilisation d'un HM-10 bluetooth LE (Read 14897 times) previous topic - next topic

J-M-L

Nov 12, 2016, 02:06 pm Last Edit: Jun 05, 2018, 08:10 pm by 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.

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 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.bolutek.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.

Code: [Select]

#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.


Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

icare

2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 16.04 LTS

68tjs

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

Merci c'est très clair.

Artouste

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 ! :smiley-mr-green:
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 ?

 

dfgh


Artouste

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 :smiley-mr-green:


 

J-M-L

#6
Dec 08, 2016, 10:36 am Last Edit: Dec 08, 2016, 10:37 am by J-M-L
@Artouste

Quote
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!!!!
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

patg_

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 :)

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

Mes Arduineries: http://breizhmakers.over-blog.com/

Artouste

@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  :smiley-mr-green:   ) 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" :smiley-cool:

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 ... :smiley-cool:
 


J-M-L

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 :)
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

Thierryev

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

J-M-L

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.
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

kilooli

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 : https://forum.arduino.cc/index.php?topic=393655.0

(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

Artouste

#13
Feb 27, 2017, 10:36 pm Last Edit: Feb 27, 2017, 10:47 pm by Artouste
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

el_pablo

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

Go Up