connessione e uso HC-06 attraverso porta seriale

Salve a tutti,
sono uno studente di ingegneria informatica che deve riuscire a stabilire una comunicazione da pc a arduino attraverso bluetooth.

Dispongo di un Arduino Uno e un modulo bluetooth HC-06.

Ho connesso un led all'arduino e ho caricato uno sketch che, quando legge uno 0 o un 1 da seriale, rispettivamente spegne o accende il led in questione.

Ho connesso il modulo bluetooth all'Arduino come indicato in quasi tutti i tutorial presenti su questo sito e in rete. Successivamente ho effettuato il pairing direttamente da windows, mettendo come PIN 1234 (quello di default insomma) e l'associazione va a buon fine. Apro un terminale Tera Term, mi connetto alla porta COM associata al bluetooth di uscita e riesco ad accendere e spegnere il led come dovrebbe (quindi collegamente e affini sono ok).

Tuttavia, se provo a chiudere e riaprire il terminale effettuando nuove connessioni, dopo un tot di volte non riesco più a effettuare questa operazione, il pc mi comunica che è impossibile stabilire una connessione con quella porta COM (tuttavia nell'elenco delle porte COM di windows, la porta in questione è ancora visibile). Ho fatto altre prove sviluppando una piccola applicazione Java che mi restituisce la lista delle porte COM. La prima volta sono presenti tutte le porte mentre già dalla seconda la porta in uscita non viene rilevata dall'applicazione. Non serve aggiungere che attraverso la mia applicazione io non sia mai riuscito a inviare nulla attraverso il bluetooth.

Da cosa potrebbe dipendere? Ho esaurito le idee onestamente e sono bloccato così da un pezzo.

Ringrazio chiunque sia in grado di aiutarmi.

Michele

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

Puoi provare su un altro PC ?
A volte le porte USB fan cose strane. Stamattina su PC ufficio collego Arduino Uno originale a porta USB dietro... nulla. Collego a USB davanti... va tranquillo.

nid69ita:
Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

Puoi provare su un altro PC ?
A volte le porte USB fan cose strane. Stamattina su PC ufficio collego Arduino Uno originale a porta USB dietro... nulla. Collego a USB davanti... va tranquillo.

scusami ma non ti seguo. perchè il problema dovrebbe essere l'USB?

Oltre a rinnovarti l'invito a presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) ed a leggere con attenzione il REGOLAMENTO ...

... è meglio se metti uno schema di come hai collegato il modulo BT, ci dici che tipo di Arduino hai e la versione di Windows che stai usando.

Guglielmo

Ho provveduto a inserire la presentazione.

Per quanto riguarda la mia configurazione hardware e software:

SO: Windows 10 64 bit
Arduino UNO
Modulo bluetooth: HC-06

allego lo schema dei miei collegamenti e lo sketch caricato sull’arduino.

/* Turn an LED on/off based on a command send via BlueTooth */


int ledPin = 13;  // use the built in LED on pin 13 of the Uno
int state = 0;
int flag = 0;        // make sure that you return the state only once


void setup() {
    // sets the pins as outputs:
    pinMode(ledPin, OUTPUT);
    digitalWrite(ledPin, LOW);

    Serial.begin(9600); // Default connection rate for my BT module


}

void loop() {
    //if some data is sent, read it and save it in the state variable
    if(Serial.available() > 0){
      state = Serial.read();
      flag=0;
    }
    // if the state is 0 the led will turn off
    if (state == '0') {
        digitalWrite(ledPin, LOW);
        if(flag == 0){
          flag = 1;
        }
    }
    // if the state is 1 the led will turn on
    else if (state == '1') {
        digitalWrite(ledPin, HIGH);
        if(flag == 0){
          flag = 1;
        }
    }

}

FSKAI30HMMFE6UO.MEDIUM.jpg

Porta USB/COM e i pin sono la seriale fisica di Arduino, pin 0 e 1
Se usi quei pin non devi collegare la usb. In alternativa usi SoftwareSerial e il modulo BT lo colleghi a due pin digitali a scelta. esempio 7 e 8. Così la usb è libera e puoi collegare Arduino al PC

Esatto, solo che, per compatibilità con altre schede (es. Arduino Mega) su cui la SoftwareSerial ha delle limitazioni, si consiglia sempre di usare come RX il pin 10 e come TX il pin 11 (... anche se, su Arduino UNO, non ci sono problemi particolari con altri pin).

Guglielmo

per sicurezza ho provveduto a “traslare” i pin da (0,1) a (2,4) modificando lo sketch. Non so mi viene quasi il presentimento che sia il mio laptop ad avere dei problemi perchè non sono operazioni difficili da effettuare.

/* Turn an LED on/off based on a command send via BlueTooth */
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2,4); // RX, TX

int ledPin = 13;  // use the built in LED on pin 13 of the Uno
int state = 0;
int flag = 0;        // make sure that you return the state only once


void setup() {
    // sets the pins as outputs:
    pinMode(ledPin, OUTPUT);
    digitalWrite(ledPin, LOW);

    Serial.begin(9600); // Default connection rate for my BT module
    mySerial.begin(9600);


}

void loop() {
    //if some data is sent, read it and save it in the state variable
    if(mySerial.available() > 0){
      state = mySerial.read();
      flag=0;
    }
    // if the state is 0 the led will turn off
    if (state == '0') {
        digitalWrite(ledPin, LOW);
        if(flag == 0){
          flag = 1;
        }
    }
    // if the state is 1 the led will turn on
    else if (state == '1') {
        digitalWrite(ledPin, HIGH);
        if(flag == 0){
          flag = 1;
        }
    }

}

Guarda,
comincia con il collaudare che il collegamento con il BT funzioni correttamente.

Questo programmino, semplice, semplice, ti permette di scrivere sul monitor seriale ed inviare in BT quello che scrivi, ricevere da BT e visualizzare su monitor seriale quello che si riceve:

#include <SoftwareSerial.h>

#define  SS_RX 10            // RX PIN to receive  data
#define  SS_TX 11            // TX PIN to transmit data

SoftwareSerial ssSerial(SS_RX, SS_TX);

void setup()
{
 delay (2000);
 //
 Serial.begin(9600);        // Initialize USB Serial port
 ssSerial.begin(9600);      // Initialize SoftwareSerial port
 //
 Serial.println("--- Ports ready ---");
 Serial.println("");
}

void loop()
{
 if (ssSerial.available() > 0) Serial.write(ssSerial.read());
 if (Serial.available() > 0) ssSerial.write(Serial.read());
}

… se accoppi il modulo BT con, ad esempio, un emulatore di terminale che gira sul tuo telefonino (se hai Android) … puoi vedere quello che scrivi da una parte trasmesso dall’altra e viceversa.

Se tutto funziona come si deve, allora puoi cominciare a vedere il resto … :wink:

Guglielmo

ho avuto un problema col mio smartphone recentemente quindi è inutilizzabile per qualsiasi tipo di prova.

Tuttavia ho aperto il solito Tera Term da un lato sulla porta seriale associata in uscita al bluetooth (COM90 in questo caso), e il monitor seriale di arduino sulla porta COM3 che nel mio pc è associata all’usb.
La prova che mi hai consigliato è andata a buon fine, se scrivo in un terminale qualcosa, viene visualizzato successivamente sull’altro.

Ottimo, quindi, come vedi, ti sei accertato che il modulo funziona e che ... la SoftwareSerial funziona :smiley: :grin: :smiley:

Ora, devi solo estenderne l'uso a quello che volevi fare tu. Non solo, l'avere i pin 0 ed 1 liberi, ti permette di usare il monitor seriale per il "debug", mandando su di esso messaggi sullo stato del programma :wink:

Guglielmo

sono riuscito a recuperare un telefono con android e ho installato blueTerm, associato il telefono all’hc-06 tuttavia dal terminale mi risulta “non connesso”.
O ho sbagliato qualcosa ora, o prima andava solamente perchè i due terminali erano sulla stessa macchina.

Guarda, io su un tablet Android (l'unico che ho visto che normalmente uso iOS) utilizzo con soddisfazione QUESTO ... e si connette senza problemi hai miei HC-05 :wink:

Il fatto che eri sulla stessa macchina non significa nulla ... piuttosto ti eri disconnesso vero ? Non è che c'è una connessione aperta eh ?

Guglielmo

nel dubbio ho provato su due pc diversi, è il telefono che era un pò vecchio e dava dei problemi. insomma il bluetooth è ok. ora devo solo capire cos'altro può essere ma non è un problema legato all'arduino o al modulo HC-06 sembra.
Grazie infinite per la pazienza.