échanges fichiers via modules bluetooth arduino

cyril.fire27
dim, 05/27/2018 - 21:53
Bonjour,
Ayant un projet nécessitant l'envoie de fichier (vidéo photo texte etc) entre deux ordinateur ou entre un smartphone et un ordinateur avec l'emploie de modules Bluetooth HC05 et des arduinos UNO, je me suis lancé dans divers programmes et montages sur plaque test afin d'obtenir ce que je souhaite. Malheureusement jusqu'ici je suis dans l'échec.
Voici un schéma de ce que j'aimerai réaliser:
Comme vous pouvez le voir il n'y a aucun branchement car je ne sais pas trop ou brancher tous ca ni même si je sais comment brancher les HC05, de plus je ne sais pas si toute les pièces ici sont indispensable. De plus sur le schéma on voit que les fichiers envoyés sont des fichiers compressés mais si cela n'est pas possible des fichier vidéos photo et texte et des fichier .exe .iso me suffiront. Si c'est possible j'aimerai aussi que chaque arduino puisse émettre et recevoir (pas forcément simultanément).Si ce n'est pas possible je me contenterai d'un role par arduino. Je ne cherche pas la rapidité de transfert je sais que ce sera long.
Il y a peu j'ai travailler sur un projet de main robotique utilisant deux hC05 (un émetteur qui envoyait des valeur analogique grâce a des flex sensor et un récepteur qui lisait les données et faisait bouger des servomoteur) et ça ma beaucoup appris dans le domaine du bluetooth cependant ca ne suffit pas et jusqu'ici je n'ai toujours pas de résultat me faisant avancer.
Donc je me tourne vers vous en espérant que vous pourrez m'aider. je ne m'attend pas à un truc tout cuit mais la moindre piste m'intéresse.Bien entendu je vous tiendrai au courant de mes avancées.
Cordialement,
Cyril.
cyril.fire27
dim, 05/27/2018 - 22:36
Bonjour merci de la réponse rapide,
Les deux ordinateurs sont indépendants.Je sais que l'on peux envoyer des fichiers TXT avec des modules bluetooth. Alors j'ai envisagé deux options : prendre les fichiers sur le pc et les envoyer OU mettre les fichiers sur la carte SD du shield ethernet car je sais que l'arduino peut envoyer,lire les fichiers qui sont dessus malheureusement je ne sais pas comment. Et derrière j'aimerai que soit les fichier reçu soit enregistré sur la carte sd du shield récepteur ou bien que ce soit enregistré sur l'ordinateur.
Pour la solution avec le shield ethernet je sais que c'est possible (grâce à des vidéo forum et qui en parle mais ne disent pas comment ils ont fait) mais je n'ai pas assez de connaissances pour savoir comment.
cyril.fire27
dim, 05/27/2018 - 23:05
1/ J'aimerai pouvoir créer des relais plus tard pour de longue distance et j'aimerai pouvoir les faires moi même.
2/Pour le défi.
3/Pour créer un réseau privé que j'ai conçu moi même.
4/ J'adore les arduino et c'est ce que j'ai décider d'utiliser dans mon projet mon but est de créer pas de prendre un truc déjà intégrer/fait dans mon pc.
5/ Et je sais que c'est possible et j'adore apprendre et je déteste ne pas apprendre des choses sur quelque chose qui a attiré mon attention.
J'espère que je répond à ta question ;)
cyril.fire27
lun, 05/28/2018 - 11:43
Bonjour,
Alors le but est de juste transféré un fichier . Je ne vois pas où placer ce serveur.
De plus comme je l'ai dit précédemment je peux me passer des ordinateurs d'où les carte ethernet qui possède une carte sd . Donc tous le développement sur plusieurs systèmes d'exploitation est inutile dans ce cas . Je ne cherche pas compliqué j'ai juste un cahier des charges à tenir avec certaines conditions à respecter et je sais que c'est possible avec les Arduino avec des facon plus simple qu'un serveur. Mais merci pour ton commentaire j'en prends note . Mais je cherche juste à créer un réseau bluetooth et avec des arduino et qu'il puissent envoyer des fichiers de tous types ou du moins le plus possible.
Merci beaucoup je vous tiendrai au courant de mes avancées mais j'espère que l'un d'entre vous pourra m'aider .
Walter
lun, 05/28/2018 - 12:18
Bonjour,
J'ai du mal à saisir ce que tu veux vraiment faire.
Si je ne me trompe pas les shield HC-05 permettent de simuler une liaison séries sur le bluetooth.
Tu peux donc comme n'importe quelle liaison série faire passer des donner binaire entre tes deux arduinos.
Par contre comment tes arduinos savent ce qu'il doivent faire, quel fichier transférer pour "l'émetteur" et ou le mettre pour "le récepteur"?
Qui actionne tes arduinos?
Si le but finale est de transférer sur un ordi, il faut que celui-ci communique avec l'arduino(USB via liaison série).
cyril.fire27
lun, 05/28/2018 - 13:15
Non les HC05 permettent de communiquer.
Dans les détails :
plan 1 : J'aimerais mettre des fichiers sur une carte sd que l'arduino le convertisseur en ascii ou autre pour qu'il puisse être envoyé par le module hc05 puis reçu par un autre module hc05 puis que les données reçu soit de nouveau convertis en fichier originelle. Puis enregistrer sur la carte sd .
Plan 2: j'aimerais que je puisse mettre des fichiers sur la carte sd du shield ethernet qu'il soit convertis en ascii ou autre puis envoyé via le module hc05 puis reçu par un autre hc05 puis reconvertis en fichier originelle et enregistrer dans le dossier d'un ordinateur.
Plan 3: je place des fichiers dans un dossier précis d'un ordinateur . L'arduino le récupère le convertis en fichier ascii ou autre et l'envoie via un module hc05 puis un autre hc05 les reçois l'arduino le reçois le convertis en fichier originelle et l'enregistre sur un deuxième ordinateur.
Je maîtrise à peu près les envoies bluetooth mais pas vraiment le reste .
Walter
lun, 05/28/2018 - 14:19
Pour le HC-05 pourquoi non, la liaison série est pour la communication ?
d'après le datasheet suivant https://www.gme.cz/data/attachments/dsh.772-148.1.pdf
on connecte bien le shield sur les connecteur de la liaison série de l'arduino.
Ou l'exemple d'utilisation suivant https://www.gotronic.fr/pj2-guide-de-mise-en-marche-du-module-bluetooth-...
Après peu importe si ti sais communiquer à travers le shield, il ne reste qu'a utiliser la bibliothèque SD, pour lire et écrire sur la carte SD de tes shields Ethernet et envoyer/recevoir les données au HC-05.
Je ne l'ai pas tester moi même, mais d'après les documentations que j'ai vu sur ce shield, cela est géré par cette bibliothèque fournis en standard.
Si tu n'a pas encore de shield ethernet, peut être que quelque chose comme le lien suivant serait plus rentable
https://www.amazon.fr/SODIAL-Lecteur-Memoire-memoire-Bouclier/dp/B00YMJV...
Pour l'utilisation avec un PC, je pense que cela sera un peu plus compliqué, car pour moi tu devrais passer par la liaison série connecteur TX/RX de l'arduino, qui sont déjà utilisée par le shield HC-05 si je ne me trompe pas ?
Le shield ethernet/SD lui étant piloté par SPI, cela ne devrait pas poser de problème.
Walter
lun, 05/28/2018 - 15:48
Merci Brossden, content d'être parmi vous.
Ha oui, j'ai déjà vu l'utilisation de cette librairie dans des exemples de codes, mais jamais eut l'occasion de l'utiliser.
Si elle permet d'avoir plusieurs flux série sur la même carte arduino, je le note, ca me sera sûrement utile prochainement.
Oui comme toi j'ai beaucoup de mal à voir comment les événements sont censés s'enchaîner et par qui ils sont déclenchés?
Walter
lun, 05/28/2018 - 17:09
Ha ok, merci pour l'information
cyril.fire27
lun, 05/28/2018 - 20:40
Bonjour merci pour toute ces informations .
Je vais essayer d'être un peu plus clair du coup .
En gros pour l'instant j'essaie de me consacrer au côté fonctionnel . Le déclenchement de ferai dès que la carte serai alimenter et les module bluetooth appairer au départ. Puis j'intègrerai sûrement un bouton qui lancera l'envoie je suppose mais je ne pense pas que ce sera le plus compliqué. En gros j'aimerais qu'on me donne des pistes surtout pour la conversion de n'importe lequel des fichiers ou du moins le plus possible en un code que je peux envoyer par bluetooth (ascii par exemple mais je sais qu'il y en as d'autres ) et que derrière je puisse retransformer ce code en fichier .
Zip --> code --> envoie bluetooth --> code --> Zip
Ici j'ai donne l'exemple pour le Zip mais j'aimerais que ça marche pour tout type d'extension ou du moins le plus possible.
Tout d'abord j'aimerais essayer sans pc et si ça marche pourquoi pas essayer avec . Une difficulté à la fois.
Ensuite je peux brancher le hc05 sur n'importe quel pin du moment que je change les pin TX et rx dans le programme donc derrière ça ne posera pas de problème . Et j'ai une carte ethernet (pas encore deux) deux module hc05 et deux uno. J'ai même plus que deux carte Arduino si il le faut mais j'aimerais être économique. À vrai dire c'est plutôt sur la convertion que je bloqué et ensuite à la reconstitution du fichier . Il me faudrait aussi d'avantage de connaissances dans l'utilisation du lecteur sd de la carte ethernet et comment enregistrer ou prelever des donnees. Voilà hésitez pas si vous souhaitez d'autre précision. J'espère avoir été clair cette fois .
Et encore merci pour votre aide .
cyril.fire27
lun, 05/28/2018 - 20:44
Après je ne me suis jamais posé la question si l'arduino ne convertissait pas automatiquement les fichiers et les envoyait sans besoin de rien . Mais cela me paraît trop simple . Je sais que par exemple dans le projet robotique que j'avais fait il fallait modifier la façon d'envoyer les données pour pouvoir envoyer des données analogique .
Après si je me trompe dites le moi mais ça me paraît beaucoup trop simple au vue de ce que j'ai déjà connu
Walter
mar, 05/29/2018 - 10:03
d'après la documentation de ta carte ethernet/SD, tu la pilote en SPI via la librairie SD (https://www.arduino.cc/en/Reference/SD) , la fonction open pour ouvrir le fichier que tu veux et read pour charger une partie du fichier dans un buffer.
Tu peux alors envoyer ce buffer sur ton shield HC-05 avec la fonction print (le buffer doit faire moins de 64 byte)
Normalement tu devrait recevoir ce buffer tel quel de l'autre coté, tu n'a pas besoin de faire de conversion en soit.
Ce n'est pas simple d'expliqué en quelques phrases, les différents types de transfert possible, surtout ne connaissant pas ton niveau de compréhension/connaissance.
En gros le "problème" va être de faire la différence entre les données de ton fichier et ses attributs(nom, date, propriétaire, ...), il y a deux méthode binaire/texte:
En binaire tu passe une structure fixe ou modulaire: avec un champs buffer de taille fixe ou définit dans un champ précédent.
En texte tu dois transformer le binaire en caractères visible (pas de caractères de contrôle comme le /n ou /t), le plus simple est alors de l'encoder en base64 le tout dans une structure XML.
Ma préférence va à la première méthode, car consomme moins de donnée de contrôle et aucun temps de transformation, ce qui est des denrée rare sur de l'embarqué.
Je pense que tu devrais appréhender étape par étape
- transfert de donnée en bluetooth, buffer texte, puis buffer binaire (mélanger par exemple donnée représentant des entiers, flottants et texte).
- lecture d'un fichier texte (.TXT), d'une image (PNG) bicolore (8x8, https://fr.wikipedia.org/wiki/Portable_Network_Graphics#Structure_d'un_fichier_PNG pour vérifier les headers) ou tu peux afficher le contenu en hexadécimal sur la sortie standard.
Une fois cela bien maîtrisé, tu pourra passer à l'étape comment passer un fichier quelconque sur ton bluetooth sans ordre particulier, puis avec des informations sur le fichier passé, puis avec des ordres si nécessaire.
cyril.fire27
mar, 05/29/2018 - 13:47
Merci pour les informations je vais essayer de faire un programme. Cependant une idée de comment vérifier sans avoir le deuxième shields ethernet si mon programme marche ? Mon shield arrive dans 3 semaines donc c'est embêtant d'attendre aussi longtemps. Sinon j'attendrais.
Walter
mar, 05/29/2018 - 14:40
Tu imprime ce que tu reçois sur la sortie standard en hexa.
si cela correspond à ce que tu as dans ton fichier, c'est tout bon.
Prends en un comme indiqué pour commencer un fichier texte et un fichier PNG très simple ou équivalent.
cyril.fire27
mar, 05/29/2018 - 14:47
bon voila le programme de l'émetteur et du récepteur:
émission:
réception:
Voila j'attend vos commentaires. Merci d'avance.
cyril.fire27
mar, 05/29/2018 - 14:50
ok merci Walter ;)
Walter
mar, 05/29/2018 - 17:06
Tu essaye de tout faire d'un coup ca me parait plus compliquer à appréhender du coup.
En émission, pourquoi "open" tout seul?
je te remet la doc https://www.arduino.cc/en/Reference/SDopen
c'est plutôt >> myFile = SD.open("test.txt", FILE_WRITE);
du coup une fois ton fichier ouvert et l'objet myFile récupéré, tu l'utilise pour lire le contenu du fichier.
Un exemple fournis avec la doc https://www.arduino.cc/en/Tutorial/ReadWrite.
Après tu mélange dans le même flux tes commandes et le contenu du fichier, tes commandes ce résumé à un seul caractère, ca ne posera pas de soucis directement, mais sinon commande avec un nombre de caractère variable, comment sais tu ou il faut s'arrêter ?
De même avec le contenu du fichier comment sait tu que tu es arrivé à la fin de l'envoi ?
Il faudra que tu structure tes messages, pour être capable de les interpréter correctement.
cyril.fire27
mar, 05/29/2018 - 18:02
Je retente alors mais malgré la doc sur le site d'arduino j'ai du mal a comprendre comment cela marche car je n'ai jamais utilisé de shield ethernet :
Cependant j'aimerai savoir si ce serai possible de faire ca avec des module hc06 au lieu d'hc05? c'est une simple question ?
Deuxième version de l'émission:
pour l'émission j'ai compris qu'il fallait faire ce genre de modification. Si ce n'est pas ce que vous vouliez expliquer pouvez vous écrire un exemple parce que sinon je ne vois vraiment pas.
Walter
mer, 05/30/2018 - 09:11
Pour le HC-06, je ne suis pas expert, mais a priori, c'est un module exclusivement esclave, donc tu peux remplacer l'un des deux modules, mais pas les deux, La liaison étant maître/esclave.
Non ce n'est toujours pas bon :)
Je réitère mon conseil/avis, il est très difficile de faire ce que tu veux faire, sans maîtriser aucun des éléments qui le constitue!
Il serait beaucoup plus bénéfique pour toi d'étudier les éléments séparément pour comprendre ce que tu manipule.
lorsque l'on cherche à lire un fichier(ou une liaison série, TCP/IP, de la mémoire, ...), on utilise un flux(stream).
Le principe du flux c'est d'ouvrir une sorte de tuyau avec un WRITER et un READER de chaque coté.
Le READER ne connaissant pas d'avance la quantité d'information à récupérer, il va donc attraper les données par petite partie (un read dans une boucle).
Je t'ai déjà donné un exemple!
Il y a tout ce qu'il faut pour faire la lecture et l'écriture, que veux tu de plus?
https://www.arduino.cc/en/Tutorial/ReadWrite.
Donc tant que tu n'a pas un code se rapprochant de ça, ça ne peut pas être bon!!!
cyril.fire27
mer, 05/30/2018 - 19:17
ok merci je vais regarder tous ça je vous donnerai mes prochaine tentative bientôt.
Cependant j'ai eu une dernière réflexion et j'aimerai savoir si ça pourrait faciliter le transfert avec un pc avec le module usb2serial, voici le schéma:
j'attend vos réponses avec impatience.
cyril.fire27
mer, 05/30/2018 - 23:11
Bonsoir gael
Je sais envoyer des données analogique de 5 capteurs (potentiomètre ou flex sensor) pour faire bouger 5 doigt d'une main robotique entre deux hc05.
Pour les hc06 j'utilise souvent appinventor .
Quand au module W5100 je l'ai acquis récemment donc très peu de chose .
En réalité ce projet est une partie d'un plus gros projet et franchement j'en ai besoin pour une utilité très spécifique. Alors même si je comprend que ce serai plus bénéfique d'étudier chaque composant, je cherche la rapidité pour la création de ce système. Je veux certes apprendre mais étudier chaque fonction de tous les composants est tout simplement impossible niveau temps pour moi. Si j'avais un peu plus de temps pour finir ce projet ce serai avec plaisir mais j'ai un timing serré. Je ne demande pas de faire mon travail loin de là mais une ligne guide et des conseils pour ce développement sont les bienvenue évidemment. J'espère que vous comprendrez ma situation. Juste pour information je dois terminer l'intégralité de ce projet pour le 3 Août et il me reste le coté esthétique de ce système précis à faire et la fin du développement du logiciel qui est la dernière pierre a l'édifice.Et je dois finir tous ça en comptant la phase de test et de béta afin de supprimer les différents bug et enfin vérifier l'intégralité du projet en 3 mois. En gros je suis a 98% de mon projet en deux ans de développement. Donc il ne me reste pas grand chose mais ca reste beaucoup de travail a faire seul. Au moins vous savez tout ;)
Walter
jeu, 05/31/2018 - 12:13
Je ne veux pas forcément en rajouter une couche, mais je n'ai pas l'impression que tu as compris ce que je voulais dire.
Etudier les composants séparément n'implique pas de connaître et avoir tester toutes les fonctionnalités.
Et au contraire passer un peu de temps pour comprendre de quoi tu parle et comment fonctionne en gros un composant, permet de gagner beaucoup de temps lors de la phase de mise au point / correction de bug.
Dans cette phase, tous les composants peuvent bugger en même temps, si tu n'a pas compris comment cela marche, il te faudra énormément de temps pour démêler tout ça.
Alors que passer 3/4 heure sur chaque composant, pour comprendre en gros de quoi on parle, ne me parait pas non plus une perte de temps incommensurable?
Sans vouloir être méchant, il me semble que je t'ai donné plus que des lignes guides, mais la documentation et des exemples fonctionnels directement copier/collable et tu n'a pas du tout compris comment l'appliquer à ton projet.
Mais ton avis sur la méthode à suivre semble forgé!
Pour finir je comprend très bien ta situation, c'est pourquoi j'aurais tendance à te redonner deux fois plus les mêmes conseils que précédemment :)
cyril.fire27
jeu, 05/31/2018 - 21:18
Walter je comprend très bien. Quand je parlais des bugs à résoudre ce n'étais pas sur cette partie. celle la soit ca marche et je passe a la vérification totale soit ca ne marche pas et je ne passe pas à l'étape suivante.
Je suis en première année d'école d'ingénieur (ptsi) et franchement même si j'ai le temps de faire ce projet en plus de mes études passer 12h sur l'étude de 3 composants me semblent vraiment compliqué. Franchement cette partie n'est pas celle qui m'intéresse le plus mais j'en ai besoin.
Après je te remercie pour ton aide mais j'ai plus l'habitude de programmer des pic que des arduino mais c'est dans mon cahier des charge et l'utilisation des arduino est justifié par de nombreux aspects. Alors j'ai plutôt du mal a comprendre comment fonctionne la création d'un programme (topographie). J'ai utilisé des arduino une fois et ca m'a prit un bout de temps (6mois) avant d'avoir ce que je voulais. et je n'ai pas 6 mois :) En fait je n'arrive a voir comment écrire le programme pour que tous fonctionne correctement ensemble et lier les différent module entre eux. Après je vais voir pour étudier les modules indépendamment mais je ne suis pas certain de réussir a tous lier par la suite mais je vais suivre ton conseil en espérant que tu as raison car je n'ai vraiment pas de marge de manoeuvre.
En tout cas merci de ton aide et comme dirai mon prof de math yapluska ;)
cyril.fire27
jeu, 05/31/2018 - 21:28
Au fait est ce que c'est possible de définir deux sytème de communication tx rx dans un programme : un pour recevoir les données du module usb2serial (donc tx=1 rx=0) et un autre pour l'envoie dans le module bluetooth (rx=11 et tx=10). je sais qu'on peut modifier les pin rx et tx d'emplacement mais je ne sais pas si on peux en mettre deux de chaque sur une même carte arduino?
cyril.fire27
mer, 06/06/2018 - 13:29
Bonjour, j'ai fait quelques avancés.
Cependant une question un fichier zip est composé de quoi ? binaire héxadécimal décimal autre chose?
Il me manque cette partie et je devrait pouvoir finir.
cyril.fire27
jeu, 06/07/2018 - 10:33
merci, j'ai réussi. je dois encore apporté quelques retouches mais sinon ca devrait fonctionner.
De toute façon je reviens vers vous soit parce qu'il y a un bug que je ne comprend pas ou soit pour vous donner les programmes .
Je sais que certain n'en vois pas l'utilité mais personnellement j'en ai besoin d'en un cadre très spécifique. Si ca peut servir a quelqu'un d'autre tant mieux mais bon je me doute que ce ne sera pas forcément le cas. Mais voyez ça comme un défi de repousser les limites de l'arduino sinon :D Juste apprendre c'est cool. Moi il est vrai que ca ne me captivait pas tant que ca mais finalement c'est cool de créer ce genre de système. Donc je comprend que tu n'y vois pas la moindre utilité mais si tu connaissait l'intégralité du projet tu changerai sûrement d'avis :D
En tout cas je vous remercie et je vous transmet le résultat dès que j'ai finis.
Walter
jeu, 06/07/2018 - 12:56
Cool que ça avance bien, impatient de voir le résultat :)
Pour essayer de développer un peu ce qu'il y a derrière ta question sur le zip.
Comme le dis Brossden, un fichier n'est qu'une constitution de bit(0 ou 1, du binaire), mais pour que cela ait du sens pour les humains, on prend des représentation ou systéme de numération (hexa, octal, decimal, binaire) de la donnée.
donc la valeur 10 en décimal, peut s'écrire en Hexa 0A, en binaire 1010.
Après suivant le type de fichier (distingué par convention de nommage par son extension, .txt, .avi, .exe) il y a une représentions spécifique des données texte/binaire, mais cela ne veut pas dire grand chose.
Tout les fichiers respecte un certain format et peuvent manipuler différente représentions de donnée, texte, entier 32 bits, nombre à virgule flotant 64 bits, ...
C'est un vaste sujet, difficile de décrire simplement en quelques lignes.
Un petit tour chez wikipédia pourrait aider à éclaircir la chose, https://fr.wikipedia.org/wiki/Fichier_binaire