Bluetooth HC-05 funziona con "Uno" ma non con "Nano Every"

Buongiorno,

ho preparato un semplice sketch per provare ad usare il ricevitore Bluetooth HC-05 e dare dei semplici comandi in carattere per fare i colori base di un led rgb.

Questo sketch l' ho sviluppato inizialmente con Arduino Uno, volevo poi provare però ad utilizzare il Nano Every, è la prima volta che lo uso.

Ho installato dunque dall' IDE i driver "Arduino megaAVR Boards".
I collegamenti li ho realizzati nello stesso identico modo per una e l' altra scheda:

  • 13 rosso:
  • 12 blu;
  • 11 verde;
  • RX diretto dal TXD del modulo;
  • TX: (come indicato dal produttore del modulo) 1Kohm verso il pin RXD del modulo e 2 Kohm verso massa dopo la R da 1Kohm;

Il problema è che con "Uno" funziona tutto perfettamente, sia da monitor seriale che da bluetooth e con il "Nano Every" funziona solo se i comandi li do da monitor seriale, sembra non gli arrivino i comandi da bluetooth.

Lo sketch è molto semplice e non l' ho modificato per le due schede.
Vi allego il codice in caso ci siano errori sostanziali.

//13 red
//12 blue
//11 green
//rx & tx bluetooth module HC-05

//5V from Adruino

void setup ()
{
  Serial.begin(38400);
  pinMode (13, OUTPUT);
  pinMode (12, OUTPUT);
  pinMode (11, OUTPUT);
}
void loop ()
{
  char w = Serial.read();
  if (w == 'r')
  {
    digitalWrite (13, HIGH);
    digitalWrite (12, LOW);
    digitalWrite (11, LOW);    
  }
  if (w == 'b')
  {
    digitalWrite (13, LOW);
    digitalWrite (12, HIGH);
    digitalWrite (11, LOW);
  }
   if (w == 'g')
  {
    digitalWrite (13, LOW);
    digitalWrite (12, LOW);
    digitalWrite (11, HIGH);
  }
   if (w == 'a')
  {
    digitalWrite (13, HIGH);
    digitalWrite (12, HIGH);
    digitalWrite (11, HIGH);
  }
   if (w == 'n')
  {
    digitalWrite (13, LOW);
    digitalWrite (12, LOW);
    digitalWrite (11, LOW);
  }
}

L' unico errore che ottengo caricando lo sketch su Nano Every è il seguente:

avrdude: jtagmkII_initialize(): Cannot locate "flash" and "boot" memories in description

Non comprendo quali differenze ci siano tra le due schede e perché uno sketch così semplice non funzioni correttamente

Grazie,
Saluti,

Come ho già risposto in altri thread ...
... la Nano Every, contrariamente alle altre schede che hai nominato, monta una nuova MCU, ATmega4809 che, pur essendo sempre AVR, e molto diversa dalle altre vecchie MCU AVR e quindi ... occorre capirne bene la funzionalità dei pin ed il suo fuzionamento e ... NON è affatto detto che ciò che è stato scritto per UNO, MEGA, Nano, si possa portare uno ad uno, senza modifiche, sulla Every.

Maggiori informazioni in QUESTO thread.

Guglielmo

Buonasera, la ringrazio per il l' informazione sui pin che mi ha linkato, che comunque avevo già avuto modo di vedere.
Vorrei solo capire come far comunicare in modo corretto (come sulla scheda "Uno") l' HC-05 con i pin RX e TX del Nano Every.
Ci sono delle differenze a livello di software da applicare?

Grazie,

Gli HC-05, anche sui normali Arduino, hanno il brutto vizio di funzionare male (nel 80% delle volte) se collegati ad una vera porta seriale (anche perché loro vanno fatti lavorare a 3.3V sui pin di I/O e Arduino lavora a 5V) ... non per nulla, nella maggioranza dei casi, si usa la SoftwareSerial che NON usa vere porte serilai, ma porte generiche di I/O probabilmente meno "rognose" ... ::slight_smile:

Magari il ATmega4809 e più "rognoso" sul livello di tensione HIGH e i meno di 3.3V del I/O del HC-05 non gli vanno bene ... tutte cose da verificare ed eventualmente correggere con adattatori di livello.

Guglielmo

Guardando il datasheet, a pagina 469, mi balza agli occhi una importante differenza con i vecchi AVR ...
... per i vecchi AVR il valore minimo di tensione per avere un livello HIGH (VIH) era 0.6 x VDD che, a 5V da 3V, per gli ATmega4809, come scritto nel datasheet, il valore minimo è 0.7 x VDD che, a 5V, da 3.5V !!!

Ripeto che gli HC-05, sui pin di I/O, lavorano a 3.3V quindi, fuori dalle specifiche del ATmega4809.

Guglielmo

Però sarebbe buona prassi alimentare tutto alla stessa tensione. Quindi se anche il 4809 lavorasse a 3V3 non avresti problemi. Ovviamente questo non si può fare sulla Every che ha già la sua sezione di alimentazione a 5V.

Ho provato a modificare lo sketch ed utilizzare la libreria SoftwareSerial ed utilizzare i pin 3,2 per RX e TX (che sarebbe il collegamento indicato dal produttore del modulo bluetooth) ma ancora non prende nessun comando.

Vedendo le ultime risposte ho anche provato ad alimentare l' HC-05 dal pin 3.3V del Nano Every ma niente è cambiato

Vi allego il codice per farvi vedere come l' ho modificato:

// Sketch for NANO Every
//12 red
//11 blue
//10 gree
//RX on pin D3
//TX on pin D2

#include <SoftwareSerial.h>

SoftwareSerial Bluetooth(3,2);

void setup ()
{
  Serial.begin(38400);
  Bluetooth.begin(38400);
  pinMode (12, OUTPUT);
  pinMode (11, OUTPUT);
  pinMode (10, OUTPUT);
}
void loop ()
{
  char w = Bluetooth.read();
  if (w == 'r')
  {
    digitalWrite (12, HIGH);
    digitalWrite (11, LOW);
    digitalWrite (10, LOW);    
  }
  if (w == 'b')
  {
    digitalWrite (12, LOW);
    digitalWrite (11, HIGH);
    digitalWrite (10, LOW);
  }
   if (w == 'g')
  {
    digitalWrite (12, LOW);
    digitalWrite (11, LOW);
    digitalWrite (10, HIGH);
  }
   if (w == 'a')
  {
    digitalWrite (12, HIGH);
    digitalWrite (11, HIGH);
    digitalWrite (10, HIGH);
  }
   if (w == 'n')
  {
    digitalWrite (12, LOW);
    digitalWrite (11, LOW);
    digitalWrite (10, LOW);
  }
}

... come ti ho detto, probabilmente 3.3V NON bastano, per vedere un livello HIGH il ATmega4809 che è sulla nano Every (alimentato a 5V) vuole almeno 3.5V che il BT-05 NON è in grado di dare. Prova ad usare dei traslatori di livello.

Guglielmo

Buonasera, lo sketch sono riuscito a farlo funzionare su un NANO V3 che ho preso, utilizzando i pin RX e TX. Contrariamente a quanto dichiarato dal produttore del modulo HC-05 però, con un baud di 38400 non funzionava, solo con 9600.

Il HC-05 FUNZIONA anche a 115 Kbaud ...
... i problemi dunque possono essere vari, esempio:

  1. Stai usando la SoftwareSerial e, notoriamente, questa, oltre i 9600 baud perde colpi ... ::slight_smile:

  2. Non hai impostato correttamente il baud rate o su Arduino o su HC-05

Ricontrolla perché quei moduli lavorano anche a velocità elevate.

Guglielmo