[SOLUCIONADO] Bluetooth en Arduino NANO "pirata"

Buenas,

Gracias a la incondicional ayuda de Lucario448 he podido hacer funcionar mi proyecto correctamente en un post anterior.

El código es el que sigue:

#include <SPI.h> //Incluimos la librería SPI
#include <Wire.h> //Incluimos la librería Wire
#include <Adafruit_GFX.h> //Incluimos la librería Adafrutit GFX para efectos de la pantalla
#include <Adafruit_SSD1306.h> //Incluimos la librería Adafruit SSD1306 para funcionamiento de la pantalla
#include <SoftwareSerial.h>   // Incluimos la librería  SoftwareSerial 

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
#define SSD1306_LCDHEIGHT 64
#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

SoftwareSerial BT(26,25);    // Definimos los pines (RX,TX) del Arduino conectados al Bluetooth
char mensaje[65];


void setup()   {  

  BT.begin(9600);       // Inicializamos el puerto serie BT (Para Modo AT 2)
  Serial.begin(9600);   // Inicializamos  el puerto serie  

 
  // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3D (for the 128x64)

  display.clearDisplay();

// text display tests
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println("Iniciando V.M.M!");
  display.setTextColor(BLACK, WHITE); // 'inverted' text
  
  display.println("Bateria 100%");
  
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(25,25);
  display.print("Visual \n MultiMeter");
  
  display.display();
  delay(1000);
  display.clearDisplay();
  

  display.setCursor(30,25);
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.print("List0!");
  display.display();
  delay(100);
  display.clearDisplay();
}

void loop()
{
  if(BT.available()){    // Si llega un dato por el puerto BT se envía al monitor serial
    delay(100);
    mensaje[BT.readBytesUntil('\r', mensaje, BT.available() < sizeof(mensaje) - 1 ? BT.available() : sizeof(mensaje) - 1)] = 0;
    BT.flush();

  display.clearDisplay();
  display.setCursor(25,20);
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.print(mensaje);
  display.display();
  delay(100);
  display.clearDisplay();

  
    Serial.write(BT.read());
  }
 
  if(Serial.available())  // Si llega un dato por el monitor serial se envía al puerto BT
  {
     BT.write(Serial.read());
  }
}

Como veis, ahora mismo, el código esta puesto para que el RX y el TX que van conectados al módulo Bluetooth sean por los pines 26 y 25, respectivamente.

Mi problema es que, este código, funciona a las mil maravillas utilizando un Arduino UNO. El problema lo tengo al utilizar este código en un Arduino NANO “pirata”: éste concretamente

La cosa esta en que parece ser que no recibe los datos que le envío al modulo Bluetooth cuando, conectado con el Arduino UNO, si funciona bien.

El código no me da error al subir (le metí los drivers CH340G para que me detectara el IDE de Arduino el puerto serie ya que utilizo macOS).

He probado a conectar hasta en 3 pares de pines distintos del Arduino Nano: el 10 y 11 (los que uso en el Arduino UNO), el RX-TX que indica el Arduino NANO y, tal y como se ve en el código, el 26 y el 25.

Por cuestiones de espacio en el proyecto necesito utilizar el NANO. También decir que, antes de tener el Arduino NANO, utilizaba un Arduino MICRO original y me funcionaba sin problemas.

Hay algo del código que se me esta pasando? Gracias de antemano por la ayuda.

Y que tienes colgado de los 3.3V?

Casi que tu pregunta es mas de hardware que de software. Ya veremos si tengo razón.

En los 3,3V tengo conectado el modulo bluetooth. Éste concretamente

Y como decia antes, funciona a la perfeccion en Arduino UNO y Arduino Micro.

Lo probré a 5V (que vi que tambien funcionaba) y veia que la luz led del modulo bluetooth, obviamente, se iluminaba más y como a 3.3V tambien funciona preferi dejar la salida de 5V para otros menesteres.

Y como decia antes, funciona a la perfeccion en Arduino UNO y Arduino Micro.

Pero evidentemente no con el NANO Chino.
Busca un regulador LDO 3.3V y alimenta el BT con esos 3.3V y no con la salida de 3.3V

Intentalo o has esto solo para comprobrar lo que digo.
Conecta todo como esta al NANO clon... pero tmb alimenta el UNO y comparte GND con el NANO y luego de los 3.3V del UNO alimentas el BT. Si funciona tendré razón.

Vale, lo probaré. Aunque tengo que decir que la red la crea bien y se conecta a la primera nada mas suministrarle corriente al Arduino NANO.

Puede que funcione inicialmente y luego deje de hacerlo.
Tmb hay qente que conecta un ESP01 a los 3.3V que necesitan 150mA y luego de varios intentos se conecta y mas tarde no.
La salida 3.3V entrega 50 a 60 mA dependiendo del elemento FTDI o CH34X.

En lo personal mejor sería que agregaran un regulador que tanto no cuesta pero veo mezquindad en las placas Arduino en ese punto.
No vas a encontrar un solo electrónico que dude en usar un regulador.
Solo el nrf24 funciona bien sin nada extra. Hablo del nRF24L01+ SIN ANTENA.

Pues no funciona. Lo acabo de probar y si, en principio crea la red pero sigue sin recibir nada. Me dado cuenta también que de esta forma funciona peor, me explico: crea la red pero la mantiene solo unos segundos conectada, tengo que volver a escanear para buscar la red y volver a conectar.

En el caso que el problema fuera la salida de 3,3V del Arduino NANO, a nivel teorico no entiendo como es capaz de crear la red bluetooth, conectar bien con el movil pero luego no poder recibir datos enviados.

Estaba pensando tambien que mi sistema lo alimentaré con una bateria de 3,7V conectada a un conversor que me suministra al Arduino los 5V necesarios. ¿Crees que funcionaria si conecto directamente esos 3,7V de la bateria al modulo bluetooth? O mejor conectar el modulo bluetooth a los 5V de la salida del Arduino? Tu idea de agregarle el regulador es muy buena pero no tengo mucho espacio en el dispositivo, va todo bastante "apelmazado".

Edito: En las especificaciones del modulo bluetooth veo que indica lo siguiente: Fuente de alimentación: + 3.3VDC 50mA

Son esos 50 mA que dices que entrega el Arduino NANO, corrigeme si me equivoco pero, deberia de funcionar, no? (mirando las intensidades, me refiero)

Si.. debería funcionar.
Dejame pensar algo!!

Funciona con UNO y Micro pero no con el NANO. Vaya que raro!!!
Debería funcionar esa prueba que te pedi hicieras.

EDITO: lo único que se me ocurre es que tu NANO no detecte correctamente el nivel HIGH del modulo BT.

No creo que dispongas de elementos conversores de nivel?

Lamentablemente no, no dispongo de dichos items.

Cuales son los pines 26,25 en un NANO? No existen!!!

La lei que probaste 10,11 pero no pruebes 26,25 porque no es MEGA.

Disculpa mi ignorancia, utilice este pinout para nombrar los pines y pensaba que esos numeros eran los que habia q poner en el pinout

26 es A2
25 es A3, esos si puedes usar.

nitoino:
Disculpa mi ignorancia, utilice este pinout para nombrar los pines y pensaba que esos numeros eran los que habia q poner en el pinout

No iba a decir nada pensando en que colocaste el código para Arduino Mega y que ya habías hecho las modificaciones pertinentes, pero entonces ese es el error:


Si observas bien la leyenda, notarás que el cuadro gris representa "pin físico" (enumerado según chip); mientras que los morados/verdes oscuros son pines definidos por Arduino. ¡No son lo mismo!

Disculpar por la demora, pero esta semana he estado de viaje.

Gracias por las aclaraciones, funciona perfectamente ahora con el Arduino NANO.

Saludos.

Buena noticia entonces. parecia raro que funcionara en UNO, Micro pero no en NANO siendo que son iguales salvo detalles entre si.