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
- 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
- Commandes (GNU/Linux), sous Windows j'ai oublié
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).