Nodemcu y Bluethoot HC05

Hola, soy Pablo de Nuevo Mexico, me estoy metiendo mucho con la programacion en microcontroladores, especialmente me estoy enfocando a servidores bajo nodemcu.

Ya he trabajado anteriormente con Arduino, perp jamas con bluetooth y acabo de adquirir un modulo HC05. Una duda, no logro echarlo a andar -no enciende nada de nada- . Adjunto mi codigo de ejemplo por si alguien me puede echar una mano:

#include <SoftwareSerial.h>
SoftwareSerial BTserial(3, 1); // RX | TX
char Bluetooth_Name = ' ';

void setup() 
{
    // Arduino IDE serial monitor
    Serial.begin(115200);

    // HC-05 default serial speed for AT mode is 38400
    BTserial.begin(38400);  

    // Wait for hardware to initialize
    delay(1000);

    // Print debug string
}

void loop()
{

   // Keep reading from HC-05 and send to Arduino Serial Monitor
   if (BTserial.available())
   {
      reading = BTserial.read();
      Serial.println(reading);
   }

   // Keep reading from Arduino Serial Monitor and send to HC-05
   if (Serial.available())
   {
      reading = Serial.read();
      BTserial.write(reading);
   }
}

Mis conexiones son: RX a TX y TX a RX -o sea, invertidos- , el vcc del hc05 a los 3v del nodemcu y el gnd del hc al g de nodemcu.

No aparece ningun dispositivo al escanear, el led del hc05 no enciende y no hay señas de vida del módulo mas que una luz roja tenue que se apaga a los pocos milisegundos de darle energia al nodemcu.

Cualquier ayuda es agradecida.

En el reverso de tu HC-05 no hay una serigrafía que dice "Power: 3.6V - 6V"?

Los 3.3V de la Nodemcu no son suficientes para alimentar el HC.

Olvida el nodemcu y el HC05 que en combinación son mas caros que un ESP32 que tiene BT incorporado.

@MaximoEsfuerzo si, esa es la leyenda que tiene el módulo, ¿entonces que recomiendas?

@Surbyte utilizo un esp8266 porque es el chip que necesito para lo que estoy diseñando.

No comprendes!! Un ESP32 es mejor que un ESP8266, tiene BT LTE o sea mejor que el BT 2.0 del HC05 y ademas es mas barato que la suma de un nodemcu y un HC05 pero haz como gustes.

Si tienes un HC05 con seleccion de tensión 5 o 3.3V elige la de 3.3V pero no lo alimentes con el nodemcu.
Deberás proveer de alimentación externa.
Si trabajas en 3.3V no tienes problema pero si el HC05 trabaja a 5V tienes que usar al menos un divisor de tensión o adaptador de niveles, basta con un par de resistencias 2k (entre GND y pin RX del nodemcu) y 1k (entre pin RX del nodemcu y pin Tx del HC05).
El pin Rx del HC05 puede recibir directamente del TX del nodemcu.
Si usas los pines RX y TX del nodemcu que se usan para mostrar el monitor serie tendras probleams.

El módulo HC-05 tiene lógica de 3.3V y alimentación de 3.6V a 6V (salvo que haya alguna excepción)

Gracias @Surbyte , considere el esp que mencionas por comodidad -y costo como bien dices- , pero las especificaciones del proyecto no permiten esa placa:

"This project is made for the ESP8266 and cannot run on an ESP32.".

@MaximoEsfuerzo gracias tambien por tu respuesta.

Ya me perdi un poco, segun el diagrama de los pines, ¿puedo alimentarlo con un cable usb metiendo positivo en VCC y negativo en gnd?, ¿o es forzoso meterle una resistencia como menciona Surbyte?.

Al final pienso alimentar el proyecto con un powerbank, asi que podria enviar la salida al nodemcu y al hc05 directo, o es lo que se me esta ocurriendo.

Pues bien, gracias a ustedes logre hacer andar el modulo con el nodemcu y logre enviar datos. Meti una salida directa de un puerto usb a vcc y funciono de maravilla. No me explico como en la red hay posts de personas que arman proyectos y dicen no utilizar mas que el hc05 y el nodemcu, es todo un misterio para mi. El codigo que utilice fue:

void setup() {
 delay(10000);
 Serial.begin(9600);
 pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {

 if (Serial.available()) 
    {
      char data_received; 
      data_received = Serial.read();  
      if (data_received == 'O')
      {
       digitalWrite(LED_BUILTIN, LOW);   //PRENDIDO
       Serial.write("LED encendido!\n");        
      }
      els if (data_received == 'X')
      {
       digitalWrite(LED_BUILTIN, HIGH);   // APAGADO
       Serial.write("LED apagado!\n");
      }
      else 
      {
       Serial.write("Especifica una opcion\n");
      }
    }
}

Si desde una terminal bluethoot envio X u O, hace su funcion. Peeeeeero, al querer enviar una cadena no me la respeta, por ejemplo:

 if (data_received == "cadena")

Lei en un foro -el cual no recuerdo- sobre una funcion que toma los datos entrantes, los almacena en un buffer y los imprime, su uso era agregar simbolos - donde iniciaba la cadena un < y un > donde terminaba- . Al final desde la terminal bluethoot habia que enviar por ejemplo, y el programa en el nodemcu sabria a partir de donde tomar los datos, y al cerrar la cadena o leer el simbolo >, tomaria esa string y liberaria el buffer. ¿Alguien sabe como se hace todo eso?. Gracias nuevamente.

Intente esto, pero solo funciona la primera ocasion, despues de ello repite la cadena y la va agregando:

char caracter;
String palabra;

void setup() {
 delay(10000);
 Serial.begin(9600);
 pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
 if(Serial.available())
  {
    caracter = Serial.read();  
    palabra = palabra + caracter; 

if (caracter == '*') {
      
    Serial.println(palabra);
    palabra = palabra.substring(0, palabra.length() - 1); // Quita último caracter *      

    delay(400);
    // LED0
     if (palabra == "enciende")
     {
        palabra = "";   
        digitalWrite(LED_BUILTIN, LOW);   //PRENDIDO
        Serial.write("LED encendido!\n"); 
     }
     else if (palabra == "apaga")
     {
        palabra = "";   
        digitalWrite(LED_BUILTIN, HIGH);   // APAGADO
        Serial.write("LED apagado!\n");
     } 
  }
      }
}

Se te olvidó reiniciar palabra para el caso que no se cumplan ninguna de las 2 condiciones.

Gracias. Sigo batallando haciendolo mas completo, pero solo me funciona una vez:

char caracter;
String palabra;

void setup() {
 delay(10000);
 Serial.begin(9600);
 pinMode(LED_BUILTIN, OUTPUT);
 digitalWrite(LED_BUILTIN, HIGH);   // APAGADO
}

void loop() {
  if(Serial.available())
  {
    caracter = Serial.read(); 
    palabra = palabra + caracter; 

    if (palabra.indexOf("<") != -1 && palabra.indexOf(">") != -1) { //Contiene <>
    
    //if (caracter == '*') {
      
      palabra = palabra.substring(0, palabra.length() - 1); // Quita último caracter >
      palabra = palabra.substring(1, palabra.length() ); //Quita el priimer caracter <      
      Serial.println(palabra);
      Serial.flush();

      delay(400);
      // LED0
      if (palabra == "enciende")
      {
        digitalWrite(LED_BUILTIN, LOW);   //PRENDIDO
        Serial.write("LED encendido!\n"); 
      }
      else if (palabra == "apaga")
      {
        digitalWrite(LED_BUILTIN, HIGH);   // APAGADO
        Serial.write("LED apagado!\n");
      }
      palabra = "";      
    }
    
    //Serial.flush();
  }
}

Reescribi el primer codigo y nada:

char caracter;
String palabra;

void setup() {
 delay(10000);
 Serial.begin(9600);
 pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
 if(Serial.available())
  {
    caracter = Serial.read(); 
    Serial.write(caracter); 
    palabra = palabra + caracter; 

if (caracter == '*') {
      
    //Serial.println(palabra);
    palabra = palabra.substring(0, palabra.length() - 1); // Quita último caracter *      

    delay(400);
    // LED
     if (palabra == "enciende")
     {
        palabra = "";   
        digitalWrite(LED_BUILTIN, LOW);   //PRENDIDO
        Serial.write("LED encendido!\n"); 
     }
     else if (palabra == "apaga")
     {
        palabra = "";   
        digitalWrite(LED_BUILTIN, HIGH);   // APAGADO
        Serial.write("LED apagado!\n");
     } 
    else {
      palabra = "";
      Serial.write("Palabra no reconocida");
    }
  }
      }
}

Que proyecto no se puede adaptar?
Todo proyecto puede adaptarse.
Me la paso adaptando proyectos que eran para NANO, UNO, MEGA o ESP8266 usando HC05 o HC06 y los hago en ESP32 justamente por lo que te dije.
Ademas hace poco adapté uno que usaba un NANO con dos HC06 a un ESP32 usando BT 5.0 LE justamente porque permite manejar varios dispositivos BT que en este caso eran dos tablets.
Para la pròxima considéralo ahora ya tienes tu enfoque. Continúa.

Supuestamente es porque el esp32 no tiene el chip que soporte lo que estoy queriendo hacer, cito al autor:

" Supported Devices

The most important things first:

  • Any ESP8266-based development board can run the firmware
  • ESP8285 is also supported (basically the same as ESP8266 but with internal flash)
  • ESP32 is not supported as it's an entirely different chip"

Me parece que dar la información "a cucharaditas" no es la mejor idea.

Empezaste con un simple repetidor entre Serial y bluetooth y terminas con un proyecto, del cual no sabemos nada, cuyo autor (autor de qué?) dice que no es compatible con ESP32.

Ahora, supongamos que el bluetooth integrado del ESP32 no fuese compatible con algo, se agrega un HC-05 y fin de la incompatiblidad.

Pero lo más gracioso es que, de lo que has mostrado hasta ahora, solo cambiar la única librería que usas elimina cualquier incompatibilidad.

Obviamente, si vas a subir a un ESP32 un archivo hex compilado para un 8266, no va a ser compatible. Pero ese no es tu caso, ¿o si?

Te recomiendo que des toda la información relevante así ni tu ni nosotros seguimos perdiendo tiempo.

En realidad no quiero venir a arreglar el proyecto que ya tengo, sino solo estoy comentando el porque uso el nodemcu y no el esp32.

Lo que me interesa solamente es como echar a andar el hc en el nodemcu -pense que alguna configuración estaba mal pero gracias a ustedes vi que era por el voltaje-, y me interesa el como poder intercambiar una cadena via bluethoot (o como hacer que el nodemcu me agarre la cadena).

Mi modificación que le hice un proyecto ya existente -el cual el autor asegura que tengo que usar un nodemcu- ya esta hecha, solo quiero agregar una funcion con la cual poderme comunicar via bluetooth con lo que ya tengo.

Tengo otro proyecto en el cual si usare un esp32, pero igual quiero aprender a leer datos entrantes desde el bluethoot. Saludos.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.