échange fichier via modules bluetooth arduino

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.

Si joint une image du projet.

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.

Pourquoi se compliquer la vie ? On trouve des dongles Bluetooth pour 1€50.

Salut

Je n'avais pas osé, mais l'envie était forte.

@+

Ben oui, pour ce projet j'imagine un programme sur le premier PC qui envoie le fichier au premier Arduino par liaison série, qui le stocke puis l'envoie en BT au second Arduino, qui le stocke et l'envoie au second PC par liaison série, avec un programme pour le recevoir. 4 programmes à écrire, débuguer, tester... Les dongles seront arrivés de Chine avant que le projet fonctionne...

En tout cas, si je devais le faire, ça me prendrait bien plus d'un mois pour y arriver...

A voir les complications que j'ai à avoir voulu faire marcher un HC05 sur PC, j'imagine même pas le foutoir avec deux.
Je me suis retrouvé avec des ports COM imaginaires, windows a viré ceux qui marchaient, enfin la fête.
Je ne peux plus rien téléverser.
Utilise des clés BT.
D'un BT à l'autre, tu peux envoyer un caractère par défaut, une suite de chiffres si tu en veux vraiment.
Alors des fichiers compressés, j'y pense même pas...

Bonjour,

ci dessous une version simpliste (aucun protocole de communication développé) de transfert de fichier entre 2 PC via 2 modules bluetooth. Elle fonctionne (testée sur une image JPEG de 30 Ko et un temps de transfert de 45s) mais elle n’est ni fiable ni performante pour les raisons suivantes :

  • pas de contrôle de flux possible via la connexion USB
  • utilisation de la bibliothèque SoftwareSerial au débit très limité 9600 (à 19200 elle commence à lire/écrire n’importe quoi).

Outre le programme arduino suivant (30 lignes) :

#include <SoftwareSerial.h>

SoftwareSerial softSerial(8,9);

void setup(void) {
	Serial.begin(9600);
	softSerial.begin(9600);
}

void loop() {

	int c;

	// si caractère reçu en provenance de l'USB
	if(Serial.available()) {
		c=Serial.read();
		// émission vers bluetooth
		softSerial.write(c);
	}

	// si caractère reçu en provenance du bluetooth
	if(softSerial.available()) {
		c=softSerial.read();
		// émission vers port USB
		Serial.write(c);
	}
}

il faut un émetteur temporisant pour éviter la saturation des différents buffers (pas de contrôle de flux). Un exemple en python (30 lignes aussi) :

import sys
import os
import time 

PKGSIZE=10
TEMPO=0.015  # temporisation en secondes entre 2 emission de paquets

filename=sys.argv[1]
sys.stderr.write("Send : "+filename +"...\n")
size=os.path.getsize(filename)
cpt=0;

file = open(filename, "rb")
try:
    bytes_read = file.read(PKGSIZE)
    while bytes_read:
        sys.stdout.write(bytes_read);
        sys.stdout.flush()
        cpt+=len(bytes_read)
        p="%3.1f" % (cpt*100.0/size)+" %"
        sys.stderr.write(p)
        sys.stderr.write('\r')
        time.sleep(TEMPO)
        bytes_read = file.read(PKGSIZE)
finally:
    file.close()

Pour tester (sous GNU/Linux) :

PC1 <---USB---> Arduino <---SoftWareSerial---> HC-05 <---   ..... ---> HC-06 <---SoftWareSerial---> Arduino <---USB---> PC2
  1. Prérequis :

a) avoir configuré (commandes AT) un HC-05 en maitre et l’autre (ou un HC-06) en esclave de telle façon qu’ils se connectent automatiquement (voir par exemple au hasard https://howtomechatronics.com/tutorials/arduino/how-to-configure-pair-two-hc-05-bluetooth-module-master-slave-commands/).

b) avoir configuré les modules bluetooth et les ports séries à la vitesse de 9600 bauds

  1. Commandes (GNU/Linux), sous Windows j’ai oublié :wink:
PC2 : cat /dev/ttyUSB0 >  /tmp/image.jpg # réception
PC1 : python sendfile.py image.jpg > /dev/ttyUSB0 # émission

C’était juste pour montrer une solution simple (mais sans contrôle d’erreurs).