Comment utiliser le module HM-10 sur les ports RX et TX d'un arduino?

Bonjour,

Je reviens vers vous pour un autre sujet :slight_smile:
J'avance sur mon petit projet de hexa... quadripod. Il fonctionne en autonome mais maintenant je souhaite pouvoir le commander avec mon Iphone via un module BLE HM10.

Alors sur un petit tuto, j'ai réussi a le brancher pour le faire discuter avec l'IPhone mais en le branchant sur les ports 2 et 3 de mon arduino.
Mais pour l'intégrer à mon projet, je ne peux pas utiliser ces ports déjà occupés. Je voulais utiliser les ports RX et TX (ou 0 et 1) mais rien n'y fait ! je n'arrive pas a faire communiquer.

Alors j'ai cherché pas mal sur le web mais ils parlent souvent de cas de contrefaçon, et de comment flasher ou je sais pas trop ... sinon tous les projets et tutos, ils les branchent sur des ports autre que RX et TX :frowning:
et en regardant les docs technique du module ... bah clairement je comrpends rien :confused:

Sauriez-vous m'orienter vers un site, un tuto, un post ? ou m'expliquer en 2 mots comment (si c'est possible) je peux faire communiquer mon module HM10 avec mon arduino en le branchant sur les RX et TX du arduino ?

Merci par avance pour votre aide !

Martyn Currey est une référence dans le domaine :
http://www.martyncurrey.com/hm-10-bluetooth-4ble-modules/

Bonsoir @fasstoch
+1

Autre référence : un tutoriel de J-M-L sur le sujet

Utiliser les Rx et TX est susceptible de poser des problèmes de conflit avec un composant déjà relié à ces deux bornes sur de nombreuses cartes ARduino, le circuit intégré d'interface USB... d'ou le raccordement quasi systématique sur d'autre Entrées/Sorties

....faire communiquer mon module HM10 avec mon arduino

Ton Arduino est de quel type UNO, MEGA, NANO, LEONARDO........?

Hello,

Merci pour vos retours !
C'est du arduino Nano.

Alors, j'avais deja vu ces 2 liens...
le tutoriel de @J-M-L , il manque plein de lien d'image, et ca n'aide pas des masses du coup.
Et pour Martyn Currey, ce qu'il explique est vraiment détaillé et j'avoue ne pas tout comprendre ... et surtout je vois nulle part une explication qui permettrait d'utiliser les ports RX et TX d'un arduino Nano ou qui expliquerait pourquoi on ne pourrait pas le faire :confused:
D'ailleurs il utilise les PIN 8 et 9 (je ne comprends pas pourquoi) et dans un tuto que j'ai trouvé par ailleurs, ils utilisent les PIN 2 et 3 ... mais jamais d'explication ni d'information dans le code qui me permettrait de comprendre le pourquoi de ces PIN.
Un spécialiste qui pourrait m'aider ?
Merci

Bonjour fasstoch

Pourrais tu mettre, en ligne, ce programme qui tourne.
As-tu une liste des ordres provenant de ton smartphone et devant être traités pas l'Arduino?
J'ai une méthode assez simple pour interpréter ces ordres.

On utilise des pin toutes autres que 0 et 1 (ce que tu désires), pour la bonne raison que 0 et 1 sont les pin de communication du port USB de l'Arduino


c'est par là que transite le programme que tu télécharges. Donc, connecter un module, en parallèle, peut gêner le téléchargement de ton programme, par sécurité, il faudrait déconnecter le Tx de ton module avant chaque téléchargement, donc pas pratique.
Cela dit, il n'y a aucune raison que tu ne puisses pas faire communiquer ton module sur 0 (Rx Arduino et Tx module) et 1 (Tx Arduino et Rx module).

Cordialement
jpbbricole

le changement de forum avait mis le bazar dans les images, elles étaient toutes regroupées à la fin...

J'ai remis de l'ordre, le post doit ĂŞtre OK maintenant

@J-M-L , un grand merci pour ta MAJ ! :slight_smile:
mais je dois etre vraiment trop nul :frowning: je n'arrive meme pas Ă  faire un "AT " qui me donne un "OK" :confused: mais j'utilise peut etre pas les bons outils ...
je branche ainsi :
HM10 - GND <--> GND - arduino UNO
VCC <--> 5V
RX <--> 1K, 2K R pour réduire le voltage <--> TX
TX <--> RX
Et dans le Terminal du IDE, le AT me donne rien :frowning:

Merci pour ton retour @jpbbricole ,

Le seul truc qui marche et qui me permet de confirmer que mon IPhone communique avec le Arduino via le HM10 est le code suivant :

/*  Hey guys! So the wiring here is really easy.  Your bluetooth module 
    wiring is as follows: Vcc goes to 5v, GND goes to GND, Tx goes to 
    D2, and RX goes to D3. 
*/

#define CUSTOM_SETTINGS
#define INCLUDE_GAMEPAD_MODULE
#include <Dabble.h>
int enR = 3;   //These are the pins for our motor driver IC
int inAR = 4;
int inBR = 5;
int enL = 6;
int inAL = 7;
int inBL = 8;

void setup() 
{
  pinMode(enR, OUTPUT);
  pinMode(inAR, OUTPUT); 
  pinMode(inBR, OUTPUT);
  pinMode(enL, OUTPUT);
  pinMode(inAL, OUTPUT); 
  pinMode(inBL, OUTPUT);
  Serial.begin(250000);    // Set your Serial Monitor is set at 250000
  Dabble.begin(9600);      // This is the baude rate of the HM-10
}

void loop() {
Dabble.processInput();  // This line is crucial in grabbing our data  
  
  if (GamePad.isUpPressed())       
  {
    Serial.println("Forward");
    analogWrite(enR, 255);
    digitalWrite(inAR, LOW);
    digitalWrite(inBR, HIGH);
    analogWrite(enL, 255);
    digitalWrite(inAL, LOW);
    digitalWrite(inBL, HIGH);
  }

  else if (GamePad.isDownPressed())
  {
    Serial.println("Backward");
    analogWrite(enR, 255);
    digitalWrite(inAR, HIGH);
    digitalWrite(inBR, LOW);
    analogWrite(enL, 255);
    digitalWrite(inAL, HIGH);
    digitalWrite(inBL, LOW);
  }

  else if (GamePad.isLeftPressed())
  {
    Serial.println("Left");
    analogWrite(enR, 255);
    digitalWrite(inAR, LOW);
    digitalWrite(inBR, HIGH);
    analogWrite(enL, 255);
    digitalWrite(inAL, HIGH);
    digitalWrite(inBL, LOW);
  }

  else if (GamePad.isRightPressed())
  {
    Serial.println("Right");
    analogWrite(enR, 255);
    digitalWrite(inAR, HIGH);
    digitalWrite(inBR, LOW);
    analogWrite(enL, 255);
    digitalWrite(inAL, LOW);
    digitalWrite(inBL, HIGH);
  }
  else 
  {
    Serial.println("Stopped");
    analogWrite(enR, 0);
    digitalWrite(inAR, LOW);
    digitalWrite(inBR, LOW);
    analogWrite(enL, 0);
    digitalWrite(inAL, LOW);
    digitalWrite(inBL, LOW);
  }
}

Et coté IPhone, j'utilise l'application "Dabble" (que je viens de découvrir) . Il y a un menu "Gamepad" qui interagit avec le code.
image

Lorsque j'appuie sur les touches "Haut", "Bas", "Droite", "Gauche" du Gamepad sur l'IPhone, je vois bien les valeurs changer dans le Terminal de l'IDE :

...

Sinon, je devrais réussir à me débrouiller avec ce bout de code à adapter pour la suite de mon projet par contre, comme je devrais sacrifier les PIN 2 et 3 pour communiquer, savez-vous comment je pourrais faire pour utiliser 2 autres PIN ? ou étendre mes PIN ?
Puisque j'utilisais tous mes PIN de 2 Ă  13 ... (besoin de 12 PIN pour les servos moteurs)

Bonjour fasstoch

Pas forcément, je vais faire des essais sur 0 et 1 et j'adapterai mon programme pour l'adapter aux ordres du Gamepad. Tu est bien sur un Nano?

A+
Cordialement
jpbbricole

Oui sur un arduino Nano

Bonsoir fasstoch

Je crains que tu ne puisses pas outrepasser l'usage des pin 2 et 3 pour Dabble, voire leur site. En plus, dans Dabbkle.h il y a:
Pour:
Dabble.begin(9600);
void begin(long baudRate=115200,int rx=2,int tx=3); :cry:

Pour étendre les pin, dans un projet qui a autant de servo, l'idéal est l'incontournable PCA9685


Qui te donne 16 canneaux PWM en ne "consommant" que 2 fils,
image
(i2c SDA ou A4 et SCL ou A5)

Cordialement
jpbbricole

top ! je vais etudier cela :slight_smile:
merci !

Cette écriture où l'on propose des valeurs aux paramètres ça veut dire que si on ne précise rien lors de l'appel, alors les valeurs par défaut sont 2 et 3.

On doit pouvoir faire Dabble.begin(9600, 6,7); si on veut et ça sera pris en compte au lieu de 2 et 3.

avec un Arduino ou un adaptateur USB / Série ?

Yep ! j'ai testé, ca marche :slight_smile: mais pas avec 0 et 1 bien sur :wink:

Un arduino Uno

expliquez le montage alors et le code que vous avez mis dans le UNO

montage :
HM10 - GND <--> GND - arduino UNO
VCC <--> 5V
RX <--> 1K, 2K R pour réduire le voltage <--> TX
TX <--> RX

(mais j'ai testé aussi avec les PIN 2 et 3, au cas ou)

code :
je met pas de code particulier, je laisse le squelette par défaut !? il faut charger un programme particulier pour lancer les commandes dans le terminal ?