En este video veremos como configurar módulos hc-05, como maestro/esclavo a través de comandos AT. También veremos como encender luces por bluetooth con esta configuración de módulo a módulo, sin tener que usar aplicaciones o smartphone.
Recuerda mirar el video, ya que ahí encontraras información acerca del funcionamiento, y explicación del código fuente, circuito y mucho más.
Tal vez pueda interesarte proyectos en arduino, pic, robótica, telecomunicaciones, suscribete en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 mucho videos con código fuentes completos y diagramas
Componentes electrónicos
Arduino micro
Especificaciones técnicas
MICROCONTROLADOR | ATmega32U4 |
TENSIÓN DE FUNCIONAMIENTO | 5V |
VOLTAJE DE ENTRADA (RECOMENDADO) | 7-12V |
PINES DE E/S DIGITALES | 20 |
CANALES PWM | 7 |
CANALES DE ENTRADA ANALÓGICA | 12 |
CORRIENTE CC POR PIN DE E/S | 20mA |
CORRIENTE CC PARA CLAVIJA DE 3,3 V | 50mA |
MEMORIA FLASH | 32 KB (ATmega32U4) de los cuales 4 KB utilizados por el gestor de arranque |
SRAM | 2,5 KB (ATmega32U4) |
EEPROM | 1 KB (ATmega32U4) |
VELOCIDAD DE RELOJ | 16 MHz |
LED_CONSTRUIDO | 13 |
LONGITUD | 48mm |
ANCHO | 18mm |
PESO | 13 gramos |
Diecisiete pulsadores
Cable micro usb
PCB
Descargar archivo gerber –>teclado arduino micro
Componentes opcionales
Buzzer
Display oled con driver SSD1306
El rendimiento de la pantalla es mejor que la pantalla LCD tradicional, también un menor consumo.
Especificaciones:
IC del controlador: SSD1306
Tamaño: OLED de 0,91 pulgadas
Resolución: 128 x 32
Tamaño: 38 * 12 mm
Número de pines: 4 pines
Tipo de interfaz:
interfaz IIC
Color de la pantalla: Blanco / azul
Descripción de los pines:
GND: Power Ground
VCC: Power + (DC 3.3 ~ 5v)
Temperatura de funcionamiento: -40 ~ 85 ℃
SCL: Línea de reloj
SDA: Línea de datos
Pantalla OLED, sin necesidad de retroiluminación, autoiluminación, Color de la pantalla: azul.
El rendimiento de la pantalla es mejor que la pantalla LCD tradicional, también menor consumo; IIC (comunicaciones I2C) simplifica las conexiones.
Úselo con Arduino, ESP8266, ESP32, STM32, etc. 3.3 a 5v de voltaje
Pines hembra
Dos Módulos hc-05
- Funciona como dispositivo maestro y esclavo bluetooth
- Configurable mediante comandos AT
- Bluetooth V2.0+EDR
- Frecuencia de operación: 2.4 GHz Banda ISM
- Modulación: GFSK (Gaussian Frequency Shift Keying)
- Potencia de transmisión: <=4dBm, Class 2
- Sensibilidad: <=-84dBm @ 0.1% BER
- Seguridad: Autenticación y encriptación
- Perfiles Bluetooth: Puerto serie bluetooth.
- Distancia de hasta 10 metros en condiciones óptimas
- Voltaje de Operación: 3.6 VDC a 6 VDC
- Consumo Corriente: 30 mA a 50mA
- Chip: BC417143
- Versión o firmware: 3.0-20170609
- Baudios por defecto: 38400
- Baudios soportados: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200.
- Interfaz: Serial TTL
- Antena: Integrada en el PCB
- Seguridad: Autenticación y encriptación (Contraseña por defecto: 0000 o 1234)
- Temperatura de trabajo (Max): 75°C
- Temperatura de trabajo (Min): -20°C
- Dimensiones: 4.4 x 1.6 x 0.7 cm
Arduino Nano
El Arduino Nano es una placa pequeña, completa y compatible con la placa de pruebas basada en el ATmega328 (Arduino Nano 3.x). Tiene más o menos la misma funcionalidad del Arduino Duemilanove, pero en un paquete diferente. Solo carece de un conector de alimentación de CC y funciona con un cable USB Mini-B en lugar de uno estándar.
Microcontrolador | ATmega328 |
Arquitectura | AVR |
Tensión de funcionamiento | 5 V |
Memoria flash | 32 KB de los cuales 2 KB utiliza el gestor de arranque |
SRAM | 2 KB |
Velocidad de reloj | 16 MHz |
Pines analógicos IN | 8 |
EEPROM | 1 KB |
Corriente CC por pines de E / S | 40 mA (pines de E / S) |
Voltaje de entrada | 7-12 V |
Pines de E / S digitales | 22 (6 de los cuales son PWM) |
Salida PWM | 6 |
El consumo de energía | 19 mA |
Tamaño de PCB | 18 x 45 mm |
Peso | 7 g |
Diagrama de pines
Dos led de 5 mm
Dos resistores de 220 ohm
Circuito
Comandos AT modo maestro
AT+ORGL (Comando para llevar al módulo a valores de fábrica)
AT+RESET (Reiniciamos el módulo, aunque recomiendo desconectar la energía, para asegurarnos el reseteo)
AT (comando para para verificar si hay conexión con el módulo hc-05, debe responder ok)
AT+ROLE? (Si responde 0 está en modo esclavo, si responde 1 está como maestro)
AT+ROLE=1 (configuramos el módulo como modo maestro debido el valor 1)
AT+BIND=2016,5,304179 (configurar la dirección M.A.C. del esclavo para lograr la conexión entre ambos módulos)
AT+BIND? (Verificamos si se configuró la dirección M.A.C. del esclavo)
AT+UART? (Verificamos la velocidad del puerto serial, para conexión con otro módulo, o aplicación con celular smartphone)
AT+UART=38400,0,0 (Con este comando podemos cambiar la velocidad del módulo bluetooth)
AT+INIT
Comandos AT modo esclavo
AT+ORGL (Comando para llevar al módulo a valores de fábrica)
AT+RESET (Reiniciamos el módulo, aunque recomiendo desconectar la energía, para asegurarnos el reseteo)
AT (comando para para verificar si hay conexión con el módulo hc-05, debe responder ok)
AT+ROLE? (Si responde 0 está en modo esclavo, si responde 1 está como maestro)
AT+ROLE=0 (configuramos el módulo como modo esclavo debido el valor 0)
AT+ADDR? (Obtenemos la dirección M.A.C. del esclavo, por ejemplo 2016:5:304179 reemplazar los dos puntos por “,” (coma) para configurarlo en el maestro.
DESPUÉS DEL RESETEO LA CLAVE POR DEFECTO, ES 1234 Ó 0000 PARA VER LA CLAVE, EJECUTA, EL COMANDO AT+PSWD? Y PARA CAMBIARLA, POR OTRA CLAVE X EJEMPLO AT+PSWD=9999 SIENDO ESTE ÚLTIMO NÚMERO DE 4 DÍGITOS, LA NUEVA CLAVE, AMBOS MÓDULOS, DEBEN TENER LA MISMA CLAVE
Código fuente maestro
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
#include <Arduino.h> #include <U8g2lib.h> #ifdef U8X8_HAVE_HW_SPI #include <SPI.h> #endif #ifdef U8X8_HAVE_HW_I2C #include <Wire.h> #endif //Tipo de displey usado con dirver SSD1306 de 128x32 U8G2_SSD1306_128X32_UNIVISION_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ A5, /* data=*/ A4, /* reset=*/ U8X8_PIN_NONE); int estadoSet= 0; void setup() { u8g2.begin();//inicializamos el display Serial1.begin(38400);//Velocidad del puerto serial, serial1 es el pin 0 y 1 en arduino micro //Pines de de entrada pinMode(2, INPUT_PULLUP); pinMode(3, INPUT_PULLUP); pinMode(4, INPUT_PULLUP); pinMode(5, INPUT_PULLUP); //Pin 13 como salida pinMode(13, OUTPUT);//Conectado un Buzzer } void loop() { //Leemos el estado de las teclas si ha sido pulsado alguna int set1 = digitalRead(2); int set2 = digitalRead(3); int set3 = digitalRead(4); int set4 = digitalRead(5); //Envía el texto "luz1e" if (set1 == LOW) { estadoSet = 1; displayOled(); Serial1.print("luz1e"); buzzer(); } //Envía el texto "luz1a" if (set2 == LOW) { estadoSet = 2; displayOled(); Serial1.print("luz1a"); buzzer(); } //Envía el texto "luz2e" if (set3 == LOW) { estadoSet = 3; displayOled(); Serial1.print("luz2e"); buzzer(); } //Envía el texto "luz2a" if (set4 == LOW) { estadoSet = 4; displayOled(); Serial1.print("luz2a"); buzzer(); } } //Mostramos en el display el botón precionado void displayOled(){ u8g2.firstPage(); do { u8g2.setFont(u8g2_font_ncenB10_tr); if (estadoSet ==1){ u8g2.drawStr(0,24,"Luz 1 encendida"); } if (estadoSet ==2){ u8g2.drawStr(0,24,"Luz 1 apagada"); } if (estadoSet ==3){ u8g2.drawStr(0,24,"Luz 2 encendida"); } if (estadoSet ==4){ u8g2.drawStr(0,24,"Luz 2 apagada"); } } while ( u8g2.nextPage() ); } //Función para hacer sonarel buzzer durante un breve periodo de tiempo cada vez que apretamos una tecla void buzzer(){ digitalWrite(13,HIGH); delay(50); digitalWrite(13,LOW); delay(50); } |
Código fuente esclavo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
String cadena; int luz1 = 2; int luz2 = 3; void setup () { Serial.begin(38400);// setea la velocidad del puerto serie a 38400 //pin 2 y 3 como salidas pinMode(luz1,OUTPUT); pinMode(luz2,OUTPUT); } void loop () { //lee las cadenas de caracteres que ingresan al puerto serie if (Serial.available()) { cadena = String(""); while (Serial.available()) { cadena = cadena + char(Serial.read());//Lee caracter por caracter y concatena a la variable cadena delay(1); } } Serial.print(cadena);//Muestra en el terminal serial la cadena obtenida delay(200); //Luz 1 encendida if (cadena == "luz1e") {//compara el valor de la cadena obetinada digitalWrite(luz1, HIGH); cadena = ""; } //Luz 1 apagada if (cadena == "luz1a") {//compara el valor de la cadena obetinada digitalWrite(luz1, LOW); cadena = ""; } //Luz 2 encendida if (cadena == "luz2e") {//compara el valor de la cadena obetinada digitalWrite(luz2, HIGH); cadena = ""; } //Luz 1 apagada if (cadena == "luz2a") {//compara el valor de la cadena obetinada digitalWrite(luz2, LOW); cadena = ""; } } |
VIDEO RECOMENDADO