Aide pour l'utilisation du Bluetooth Low Energy

TrolololGames
jeu, 12/31/2015 - 15:09
Bonjour,
Je suis un peu nouveau dans le monde de l' Arduino mais je trouve cela génial et je me suis lancé dans un projet assez conséquent au vu de mes connaissances au début du projet (qui ont du coup pas mal progressé ^^) Mon objectif est de commander électroniquement deux vannes chargé de controler de l' air haute pression.
Bien-sur ça ne se limite pas à ça puisque il me faut enregistrer des variables sur l' EEPROM, il y a un certain programme d'ouverture/fermeture selon des capteurs etc. Mais surtout j' aimerais gérer les variables de temps d' ouverture et autres via mon smartphone.
Le module principale contient donc une carte Adafruit Metro mini, une carte relais pour gérer du 5v 1A (nécessaires aux vannes, solenoids pour les intimes), un module Bluetooth et tout ça alimenté par une batterie 7.4v régulée Mais en faite ma seule question, c' est sur le code et un peu le hardware : Comment faire en sorte que le téléphone envoi une valeur et dise aussi à l' Arduino quelle variable doit prendre cette valeur.
J' avais pensé à ça : -> le téléphone envoi "(les deux initiales de la variable)(la valeur que doit prendre cette variable, un nombre entre 00 et 99)" l' Arduino attribue alors le nombre à la variable et après selon une autre commande sur le smartphone, enregistrer dans l' EEPROM la valeur (ça je sais faire...)
J' étais parti sur le module Bluetooth Adafruit low energy parce que justement : il consomme peu (2-3 mA de moyenne vs 10 mA de moyenne avec un HC-06, en plus ça me permet de tout acheter sur un seul site...) Mais là j' ai deux choix possibles et je ne sais pas trop lequel prendre : UART ou SPI puisqu'il existe deux modules a voir selon vous Dans les deux cas je ne sais pas du tout comment se déroule l' échange avec le smartphone au niveau du code et je ne sais pas du tout ou trouver tutos ou autre, ceux d' Adafruit ne m' aidant pas du tout Donc je vous pose la question à vous ! Merci de me répondre !
Alex
jeu, 12/31/2015 - 16:49
Bonjour et bienvenue sur le site,
Tout d'abord il faut savoir que le Bluetooth 4.0 ou Bluetooth Low Energy (BLE) consomme certes beaucoup moins de courant mais c'est nettement plus difficule à maitriser pour un débutant que le Bluetooth Classic. Il faut d'abord bien maitriser les concepts liés au GAP et au GATT avant de se jeter à l'eau.
Ensuite pourquoi du BLE? Avec un carte Metro et des relais je suis pas certains à 100% que du BTClassic fera une grosse différence dans l'autonomie. A calculer et comparer disons.
Enfin, si tu es certains que du BLE est LA solution qu'il te faut, alors AdaFruit a mis à disposition un getting started assez complet niveau hard et soft. Tu ne devrais pas avoir trop de difficulté pour te lancer. Tu peux développer ton App avec App Inventor comme pour du BTClassic.
UART ou SPI? Ca a très peu d'importance dans ta situation, les deux conviennent parfaitement.
Voici le blog d'une connaissance qui devrait t'aider: electronut
Voici une alternative à considérer en cas de grosses difficultés: redbearlab
Pour info, j'attends de reçevoir la version standalone de Nordic qui est le nRF51822. Je te ferais partager mes travaux.
TrolololGames
ven, 01/01/2016 - 01:39
Alléluia !
Enfin une réponse pertinente...
Le "getting started" d' Adafruit ne m'a absolument pas aidé...
Effectivement je pourrais tenter avec un HC-06 mais dans ce cas une partie du problème reste : Comment puis-je a partir d' un message lire les deux premiers caractères et ensuite placer dans la variable exprimée par les deux premiers caractères les deux caractères suivants comme dans l' exemple plus haut ?
Une autre méthode serais plus simple ?
Merci ! Je fonce voir les liens
Edit:
Bonne année aussi !
Je vais sûrement passer sur HC06, le ble est vraiment pas simple...
Re-edit: en repensant à ce que je voulais faire j' ai re-pensé à la façon dont (avec l' Andruino) tu avais communiqué les données de la PWM en faite c' est presque ça !!
Mais tu pourrais juste m' expliquer plus en détail cette partie du code ? (Réception des données sur la PWM et récupération de la valeur)
Merci !!
TrolololGames
ven, 01/01/2016 - 13:52
C' est presque bon !
Je me suis renseigné et j' ai trouvé la fonction ".indexOf(x,x)" qui fait (d' après ce que j' ai compris) presque tout le boulot !
Du coup pour définir quelle variable il faut modifier je pourrais placer ce genre de condition :
If(MessageRecu.indexOf("DN") != -1)
Jusque-là ça va ?
Après :
{
MessageRecu = MessageRecu.substring(3)
DN = MessageRecu.toInt()
}
Donc : si l' Arduino reçoit "DN26", elle attribuera 26 à DN
Je me trompe quelque part ?
Edit: effectivement il faut transformer la variable String en Int (corrigé)
Alex
ven, 01/01/2016 - 14:30
Dans ce cas si tu ne cherches que ça comme information, regarde le code que j'utilise dans la vidéo sur l'Andruino.
J'utilise les fonctions IndexOf, substring et toInt.
Mais oui, c'est exactement comme ça que j'ai l'habitude de procéder.
TrolololGames
ven, 01/01/2016 - 20:42
Merci ! C' est principalement ce dont j' avais besoin ^^
Bon maintenant je vais m' attaquer au code de l' application Android...
Il est donc fort possible que je revienne poser des questions :-p
TrolololGames
ven, 01/15/2016 - 19:10
Comme prévu plus haut, me voilà pour poser des questions relatives à mon projet... Sur la programmation de AI2, (l' app Android)
1- Quand on met "quand retour est pressé faire : retour à l' écran : X" et là je ne suis pas sûr; à la place de X je doit mettre le nom de l' écran mais dans quel bloc je l' écris ? Un bloc texte normal ?
2- tout le long de l' application, j' ai besoin du Bluetooth, autant en entré qu' en sortie du coup j' ai fait comme ça :
- Écran 1 : on se connecte, une fois fait, on passe à l' écran "menu"
- une fois sur l' écran menu on a trois choix de boutons : déconnexion, options, play
-- play : affiche un certain nombres de fonction envoyant du texte reconnu par l' Arduino (+ voir le 3ème pb)
-- options un peu pareil que "play" mais avec des options différentes...
-- déconnexion : ben... déconnexion quoi x)
Le fait de changer d' écran ne pose pas de pb ? (Connexion etc... si un écran n' à pas le "Bluetooth client" ça déconnecte ?)
3- je souhaite envoyer et recevoir des données depuis l' Arduino, en gros une valeur changera selon l' appui sur un bouton, j' envoi chaque fois une certaine variable au téléphone et cette variable doit pouvoir être affiché via un label à l' utilisateur
Ex :
J' appui sur le bouton,
L' Arduino l' apprend et envoi "1",
Le téléphone reçois "1" et l' affiche dans un certain label
J' appui à nouveau sur le bouton,
L' Arduino envoi "2",
Le téléphone le reçois et remplace "1" par "2"
Etc.
Je ne sais pas si c' est assez clair mais je ne sais pas comment le faire...
Depuis l' Arduino je fait un "HC06.printIn(laVariable)" si j' ai bien compris, mais pour le recevoir depuis AI2 je ne sais pas.
Merci de m' aider !!
Alex
sam, 01/16/2016 - 23:24
Je pense que tu trouveras la réponse à ta question dans ma vidéo sur l'Andruino.
C'est ce procédé que j'utilise pour obtenir la valeur des entrées Analog.
TrolololGames
sam, 01/16/2016 - 23:37
Eh ben justement je ne saisi pas bien le code...
Je veux juste faire une boucle qui vérifie à chaque fois si une donnée arrive de l' HC06, s' il y en a une faire "blablabla..." sinon : rien
Or dans ta vidéo c' est l' app qui envoi une requête en permanence (si je ne me trompe pas) et le module qui répond, ce qui à mon sens consomme de la bande passante pour rien
Dit moi si je me trompe et si tu peux me mettre sur la voie :-x
Alex
mar, 01/19/2016 - 17:27
Oui mais tu n'es pas obligé d'envoyer une requete en permanence.
Est-ce que tu peux me redétailler exactement ce que tu veux faire stp?
TrolololGames
jeu, 01/21/2016 - 09:26
Ok alors je crois avoir trouvé...
Mais au cas où :
Je voudrais récupérer un message que l' Arduino aurais envoyé en BT au téléphone mais seulement quand l' Arduino envoi une donnée, pas comme ton application qui envoyais une demande à chaque Loop...
Je te met un screen ce soir si possible du code que j' ai fait... je ne suis pas sur mais je pense avoir résolu le pb
Merci !