Repositorios para el proyecto de hidroponia
Bluetooth.cpp
- Committer:
- iwhalk
- Date:
- 2022-06-10
- Revision:
- 1:7b3ea5d5e074
- Parent:
- 0:19f9867f1730
File content as of revision 1:7b3ea5d5e074:
/* ############################################################################# ** Archivo : main.c ** Proyecto : STM32F103C8_Bluetooth_Terminal ** Procesador : STM32F103C8T6 ** Plataforma : Blue Pill ** Herramienta : Mbed ** Compilador : Mbed Online C Compiler ** Version : Mbed-OS 5.15.0 ** Fecha/Hora : 18-12-2019, 11:48, # CodeGen: 0 ** Descripción : ** Este proyecto utiliza la Terminal Serial para interactuar con la ** Conexión Serial del Bluetooth como Terminal Serial ** This module contains user's application code. ** Componentes : GPIO, Timer, etc . ** Configuraciones : Includes, Stacks y Drivers externos ** Autores : ** ATEAM Development Group: ** - Antulio Morgado Valle ** ** Versión : Beta ** Revisión : A ** Release : 0 ** Bugs & Fixes : ** Date : 20/10/2019 ** First Release ** ** ** ** ###########################################################################*/ /* :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: : I N C L U D E S :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ #include "stm32f103c8t6.h" #include "mbed.h" #include "Serial.h" //#include "AnalogIn.h" //#include "Led_RGB.h" //#include <stdio.h> /* :............................................................................... : D E F I N I C I O N E S :............................................................................... */ #define LED_ON 0 // Estado para el Led Encendido #define LED_OFF 1 // Estado para el Led Apagado #define BUZZ_ON 1 // Estado para Buzzer Encendido #define BUZZ_OFF 0 // Estado para Buzzer Apagado #define FALSE 0 // Estado FALSO #define TRUE 1 // Estado VERDADERO #define LOW 0 // Estado para Nivel "Bajo" #define HIGH 1 // Estado para Nivel "Alto" #define ON 0 // Estado para boton presionado #define OFF 1 // Estado para boton sin presionar #define HOLD 2 // Estado para boton mantenido #define RELEASE 3 // Estado para boton liberado #define TICKER_RATE 1000 // Periodo de Interrupción (us) #define BAUD_RATE 115200 // Velocidad de Transmisión (Bauds)) // Velocidades Permitidas: // 300, 600, 1200, 2400, 4800, 9600, // 14400, 19600, 28800, 38400, 57600 // 115200, 230400 #define BT_App_Type 0 // App en el Celular: 0=Estandar 1=Emulador #if BT_App_Type == 0 #define BT_BAUD_RATE 38400 // Velocidad Estandar Bluetoothclado (default) #endif #if BT_App_Type == 1 #define BT_BAUD_RATE 9600 // Velocidad de Emulación Terminal Serial #endif /* *=============================================================================== * * C O N F I G U R A C I O N D E P U E R T O S * *=============================================================================== */ Ticker TimerInt; // Inicializa la Interrupción por Timer DigitalOut led_monitor(LED1); // Inicializa el LED Monitor (Interno) DigitalOut led_testigo(PB_12); // Inicializa el LED Testigo (Externo) DigitalOut Led_Verde(PB_13); // Inicializa el PWM2 (PA6_TIM1_CH1N) Led VERDE DigitalOut Led_Rojo(PB_14); // Inicializa el PWM3 (PA7_TIM1_CH2N) Led ROJO DigitalOut Led_Azul(PB_15); // Inicializa el PWM1 (PB0_TIM1_CH3N) Led AZUL DigitalOut key_pin(PB_5,HIGH); // Inicializa el KEY pin o STATE pin (AT Commnands) PwmOut pwm1(PA_7); // Inicializa el PWM para el LED Externo PwmOut buzzer(PB_0); // Inicializa el PWM para el Buzzer Externo AnalogIn Sensor1(PA_0); // Inicializa Canal Analógico para Potenciometro 1 Serial terminal(PA_2, PA_3); // Inicializa la Comunicación Serial UART_2 a la PC (Tx, Rx) Serial bluetooth(PB_10, PB_11);// Inicializa la Comunicación Serial UART_3 sobre Bluetooth (Tx, Rx) //Serial bluetooth(PA_9, PA_10); // Inicializa la Comunicación Serial UART1 sobre Bluetooth (Tx, Rx) //Serial bluetooth(PB_6, PB_7); // Inicializa la Comunicación Serial UART1 sobre Bluetooth (Tx, Rx) /* #=============================================================================== | | A R E A D E D A T O S | #=============================================================================== */ /* +------------------------------------------------------------------------------- | Variables Globales de Usuario +------------------------------------------------------------------------------- */ uint16_t Rate=TICKER_RATE/2; // Velocidad de barrido (500us = 0.5ms) uint16_t counter=250; // Cuenta inicial de 250us uint8_t estado=0; uint8_t caracter; const char *buffer; /* END variables */ /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | Definición de Funciones Prototipo y Rutinas de los Vectores de Interrupción ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ // Las Definiciones de Funciones Prototipo // y Apuntadores a Vectores de Interrupciones van aquí ! void TimerInt_OnInterrupt(void); // Vector de Interrupción del Ticker void Setup(void); // Función de Inicialización del Sistema void Config_BT(void); // Función de Configuración del Bluetooth void Caratula(void); // Función que despliega la Caratula en la Terminal void Eco(void); // Función que Transmite y Recibe entre Terminales void Clear_Screen(void); // Función que limpia la Pantalla de la Terminal void Buzzer_Beep(void); // Función que prueba del Buzzer /* END prototypes */ /* END definitions */ /* #=============================================================================== | | P R O G R A M A P R I N C I P A L | #=============================================================================== */ int main() { //+++++++++++++++++++ Secuencia Principal +++++++++++++++++++++++++++++++++++++ // Inicialización de variables, puertos, interrupciones y carátula key_pin = HIGH; // Bluetooth en modo de Comandos AT Setup(); // Inicializa el Sistema Config_BT(); // Configura el Módulo Bluetooth Caratula(); // Imprime la Caratula de Inicio //+++++++++++++++++++ Lazo Principal +++++++++++++++++++++++++++++++++++++++++++ // El Lazo del Programa principal está aquí !!! while (true) { Eco(); // Hace ECO la terminal Serial con la terminal Bluetooth y viceversa. } } /* END main */ /* :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: :: V E C T O R E S D E I N T E R R U P C I Ó N :: (Rutinas de Atención) :: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ // Las Rutinas de Atención a Interrupciones van aquí ! /* ** =================================================================== ** Vector : TimerInt_OnInterrupt() */ /*! ** @brief ** Called after Ticker is done, [Interrupt service/event] ** and it is enabled: ** TimerInt.attach_us(&TimerInt_OnInterrupt, TICKER_RATE); ** the event is enabled and will be executed every [TICKER_RATE] ** @param ** UserDataPtr - Pointer to the user or ** RTOS specific data. The pointer is passed ** as the parameter of Init method. */ /* ===================================================================*/ void TimerInt_OnInterrupt() // Rutina de Atención al Ticker { counter--; // Aquí va la Rutina de Servicio ! if (!counter) { // terminal.printf("Counter Finish! \r\n"); led_monitor = !led_monitor; // Parapadeo del LED por Interrupción (LED Toggled) counter = Rate; // Restablece el contador, Le asigna el periodo de 0.5ms (Rate=500) } } /* END Events */ /* ______________________________________________________________________________ /______________________________________________________________________________\ | | | F U N C I O N E S P R O T O T I P O | |______________________________________________________________________________| \_____________________________________________________________________________/ */ // Las Funciones Prototipo van aquí ! /* |-------------------------------------------------- | Función Setup() |-------------------------------------------------- */ void Setup() { confSysClock(); // Inicialización del Sistema, Configure system clock (72MHz HSE clock, 48MHz USB clock) terminal.baud(BAUD_RATE); // Se configura la velocidad de transmisión e inicia la comunicación serial. Clear_Screen(); // Limpia la pantalla de la Terminal Buzzer_Beep(); // Prueba el Buzzer terminal.printf("The System is Wake Up!.\n\r"); wait (2); // Espera 2 segundos TimerInt.attach_us(&TimerInt_OnInterrupt, TICKER_RATE); // Le asigna el periodo de interrupción de 1ms (TICKER_RATE=1000) Clear_Screen(); // Limpia la pantalla de la Terminal } /* |-------------------------------------------------- | Función Config_BT() |-------------------------------------------------- */ void Config_BT() // Software Bluetooth Initialization { /* key_pin = HIGH; // Entramos al modo de Comandos AT bluetooth.baud(38400); // Velocidad del Módulo Bluetooth para comandos AT. wait_ms(25); // Espermos a que se estabilize el reloj bluetooth.printf("AT\r\n"); // Configura el nombre de la terminal Bluetooth. bluetooth.printf("AT+ROLE=0\r\n"); // Configura el módulo Bluetooth como "Esclavo". bluetooth.printf("AT+NAME=BluePill\r\n"); // Configura el nombre de la terminal Bluetooth. // bluetooth.printf("AT+PSWD=4321\r\n"); // Configura el password de la terminal Bluetooth. bluetooth.printf("AT+VERSION?\r\n");// Muestra la Versión del Módulo Bluetooth. bluetooth.printf("AT+ADDR?\r\n"); // Muestra la Dirección de la terminal Bluetooth. bluetooth.printf("AT+UART?\r\n"); // Muestra la Velocidad de Transmisión de la terminal Bluetooth. key_pin=HIGH; // Inhibe al HC-05 para recibir commandos AT bluetooth.baud(9600); // Velocidad del Módulo Bluetooth para datos AT. // terminal.baud(BT_BAUD_RATE); // Configura la velocidad del Módulo Bluetooth. bluetooth.printf("The Bluetooth is configuring Sucesfully!.\n\r"); wait_ms(25); */ key_pin = HIGH; // Entramos al modo de Comandos AT // bluetooth.baud(9600); // Velocidad del Módulo Bluetooth para datos AT. if (bluetooth.writable()) // Espermos para poder escribir en el Bluetooth. bluetooth.baud(38400); // Velocidad del Módulo Bluetooth para comandos AT. wait_ms(25); // Espermos a que se estabilize el reloj if (bluetooth.writable()) // Espermos para poder escribir en el Bluetooth. bluetooth.printf("AT\r\n"); // Configura el nombre de la terminal Bluetooth. wait_ms(5); // Espermos a que responda la terminal Bluetooth. if (bluetooth.writable()) // Espermos para poder escribir en el Bluetooth. bluetooth.printf("AT+ROLE=1\r\n"); // Configura el módulo Bluetooth: 0="Esclavo", 1="Maestro". wait_ms(5); // Espermos a que responda la terminal Bluetooth. // if (bluetooth.writable()) // Espermos para poder escribir en el Bluetooth. // bluetooth.printf("AT+CMODE=1\r\n"); // Selecciona/Verifica el modo de conección: 0 - A dirección fija 1 - A cualquier dirección, 2 - Lazo de Esclavo // wait_ms(5); // Espermos a que responda la terminal Bluetooth. if (bluetooth.writable()) // Espermos para poder escribir en el Bluetooth. bluetooth.printf("AT+NAME=BluePill\r\n"); // Configura el nombre de la terminal Bluetooth. wait_ms(5); // Espermos a que responda la terminal Bluetooth. // if (bluetooth.writable()) // Espermos para poder escribir en el Bluetooth. // bluetooth.printf("AT+PSWD=4321\r\n"); // Configura el password de la terminal Bluetooth. // wait_ms(5); // Espermos a que responda la terminal Bluetooth. if (bluetooth.writable()) // Espermos para poder escribir en el Bluetooth. bluetooth.printf("AT+VERSION?\r\n");// Muestra la Versión del Módulo Bluetooth. if (bluetooth.writable()) // Espermos para poder escribir en el Bluetooth. bluetooth.printf("AT+ADDR?\r\n"); // Muestra la Dirección de la terminal Bluetooth. if (bluetooth.writable()) // Espermos para poder escribir en el Bluetooth. bluetooth.printf("AT+UART?\r\n"); // Muestra la Velocidad de Transmisión de la terminal Bluetooth. key_pin=LOW; // Inhibe al HC-05 para recibir commandos AT // bluetooth.baud(BT_BAUD_RATE); // Configura la velocidad del Módulo Bluetooth. bluetooth.baud(9600); // Velocidad del Módulo Bluetooth para datos AT. wait_ms(25); terminal.printf("The \e[1;34;40mBluetooth\e[m was configurated Sucesfully!.\n\r"); wait_ms(25); if (bluetooth.writable()) // Espermos para poder escribir en el Bluetooth. bluetooth.printf("The \e[1;34;40mBluetooth\e[m is ready to Paring!.\n\r"); } /* |-------------------------------------------------- | Función Caratula() |-------------------------------------------------- */ void Caratula() { terminal.printf ("\t\e[1;37;41mInstituto Politecnico Nacional\e[0m\n\r"); terminal.printf ("\e[1;37;42mESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA\e[0m\n\r\v"); terminal.printf ("\t\e[1;31;40mPrueba \e[1;35;40mde \e[1;33;40mla \e[1;32;40mTerminal \e[1;34;40mBluetooth \e[0m\n\r\v\v\e[0m"); // terminal.printf ("\t\e[1;32;40mTerminal Serial Lista!\n\r"); // bluetooth.printf ("\t\e[1;34;40mTerminal Bluetooth Lista!\n\r"); } /* |-------------------------------------------------- | Función Eco() |-------------------------------------------------- */ void Eco() // Eco a la Terminal { if (bluetooth.readable()) { caracter=bluetooth.getc(); // Si llega un dato por el puerto BT // wait_ms(5); // Espera a que se desocupe la terminal // if (terminal.writable()) // Si se peude escribir a la Terminal terminal.printf("\e[1;34;40m%c",caracter); // se envía al monitor serial if (bluetooth.writable()) bluetooth.putc(caracter); // y hace ECO con la terminal BT } if (terminal.readable()) { caracter=terminal.getc(); // Si llega un dato por el monitor serial // if (bluetooth.writable()) bluetooth.putc(caracter); // se envía al puerto BT terminal.printf("\e[1;32;40m%c",caracter); // y hace ECO con el monitor serial } } /* |-------------------------------------------------- | Función Clear_Screen() |-------------------------------------------------- */ void Clear_Screen() { // ANSI Terminal Commands terminal.printf("\x1B[2J"); // secuencia de Escape \e1B[2J terminal.printf("\x1B[H"); // secuencia de Escape \e1B[H } /* |-------------------------------------------------- | Función Buzzer_Beep() |-------------------------------------------------- */ void Buzzer_Beep() // Software routine for Buzzer Beep { terminal.printf("Testing Buzzer... \n\r"); buzzer = BUZZ_ON; wait_ms(750); buzzer = BUZZ_OFF; wait_ms(125); buzzer = BUZZ_ON; wait_ms(250); buzzer = BUZZ_OFF; wait_ms(125); buzzer = BUZZ_ON; wait_ms(500); buzzer = BUZZ_OFF; terminal.printf("Buzzer OK ! \n\r"); } //comentario /* END functions */ /* END program */ /* *+****************************************************************************** *+ D O C U M E N T A C I Ó N *+****************************************************************************** *+ La documentación va aquí!: *+ *+------------------------------------------------------------------------------ *+ MODULO BLUETOOTH HC-05 *+------------------------------------------------------------------------------ *+ *+ PIN CONFIGURATION *+ *+ *+ Pin Number Pin Name Description *+ 1 Enable/Key This pin is used to toggle between *+ Data Mode (set LOW) and AT command mode (set HiGH). *+ By default it is in Data mode *+ 2 Vcc Powers the module. Connect to +5V Supply voltage *+ 3 Ground Ground pin of module, connect to system ground. *+ 4 TX–Transmitter Transmits Serial Data. Everything received via ** Bluetooth will be given out by this pin as serial data. *+ 5 RX–Receiver Receive Serial Data. Every serial data given to *+ this pin will be broadcasted via Bluetooth *+ 6 State The state pin is connected to on board LED, it *+ can be used as a feedback to check if Bluetooth *+ is working properly. *+ 7 LED Indicates the status of Module: *+ * Blink once in 2 sec: Module has entered Command Mode *+ * Repeated Blinking: Waiting for connection in Data Mode *+ * Blink twice in 1 sec: Connection successful in Data Mode *+ 8 Button Used to control the Key/Enable pin to toggle between *+ Data and command Mode *+ *+ HC-05 Default Settings *+ *+ Default Bluetooth Name: “HC-05” *+ Default Password: 1234 or 0000 *+ Default Communication: Slave *+ Default Mode: Data Mode *+ Data Mode Baud Rate: 9600, 8, N, 1 *+ Command Mode Baud Rate: 38400, 8, N, 1 *+ Default firmware: LINVOR *+ *+ HC-05 Technical Specifications *+ *+ Serial Bluetooth module for Arduino and other microcontrollers *+ Operating Voltage: 4V to 6V (Typically +5V) *+ Operating Current: 30mA *+ Range: <100m *+ Supported baud rate: 9600,19200,38400,57600,115200,230400,460800. *+ Works with Serial communication (USART) and TTL compatible *+ Follows IEEE 802.15.1 standardized protocol *+ Uses Frequency-Hopping Spread spectrum (FHSS) *+ Can operate in Master, Slave or Master/Slave mode *+ Can be easily interfaced with Laptop or Mobile phones with Bluetooth *+ *+ *+ Cómo utilizar el módulo Bluetooth HC-05 *+ *+ El HC-05 tiene dos modos de funcionamiento, uno es el modo de datos en el *+ que puede enviar y recibir datos de otros dispositivos Bluetooth y el otro *+ es el modo de comando AT donde se puede cambiar la configuración predeterminada *+ del dispositivo. Podemos operar el dispositivo en cualquiera de estos dos *+ modos usando el pin clave como se explica en la descripción del pin. *+ *+ Es muy fácil emparejar el módulo HC-05 con microcontroladores porque opera *+ utilizando el Protocolo de Puerto Serie (SPP). Simplemente encienda el módulo *+ con + 5V y conecte el pin Rx del módulo al Tx del MCU y el pin Tx del módulo *+ al Rx del MCU como se muestra en la siguiente figura *+ *+ Para este ejemplo disponemos de un módulo Bluetooth HC-05 que podemos *+ conectar al puerto Serial de la Blue Pill. *+ Resumidamente hemos de conectar los pines de recepción (RX) y transmisión (TX); *+ que por defecto son los pines 0 y 1 respectivamente de nuestra placa con los *+ pines de transmisión (TX) y recepción (RX) del módulo de forma inversa; *+ tal y como se indica en la figura. *+ *+ Módulo HC-05 Blue Pill PIN *+ KEY (EN) <---------- KEY_pin (ENable) PB_1 *+ VCC ----------- 5V (algunos módulos pueden operar a 3.3V) *+ GND ----------- GND *+ Tx ----------> Rx PB_11 *+ Rx <---------- Tx PB_10 *+ *+ Lo más importante a tener en cuenta es que debemos de activar el modo de *+ configuración del Bluetooth a través de el PIN EN o KEY, que debe de estar *+ activo con un voltaje y que en este caso conectacmos al pin de 3,3V. *+ *+ ATENCIÓN: Hay algunos módulos HC-05 que disponen de un botón diminuto y que *+ hay que apretar antes de conectarlo a la alimentación. En el momento en el *+ que entre en modo configuración; el LED parpadeará más lento de lo normal y *+ podemos verificar que ha cambiado de modo. *+ *+ Conexiones del circuito del módulo Bluetooth HC-05 *+ *+ Durante el encendido, el pin de key puede conectarse a tierra para *+ entrar en el modo de comando; si se deja libre, entrará de forma predeterminada *+ en el modo de datos. Tan pronto como se encienda el módulo, debería poder *+ encontrar el dispositivo Bluetooth como “HC-05”, luego conéctese con la *+ contraseña predeterminada 1234 y comience a comunicarse con él. *+ El nombre de la contraseña y otros parámetros predeterminados se pueden *+ cambiar ingresando al modo de configuración. *+ *+ Para poder comunicarse en modo configuración a través de la placa Blue Pill *+ es necesario configurar la velocidad de transmisión hacia la tarjeta HC-05 a *+ 38400 Bauds *+ *+ 1. Dispositivos Bluetooth: *+ El módulo Bluetooth HC-05 viene configurado de fábrica como "Esclavo" (slave), *+ pero se puede cambiar para que trabaje como "maestro" (master), además al *+ igual que el HC-06, se puede cambiar el nombre, código de vinculación, *+ velocidad y otros parámetros más. *+ *+ Definamos primero que es un dispositivo bluetooth maestro y dispositivo esclavo: *+ *+ Modulo bluetooth hc-05 como esclavo: *+ Cuando está configurado de esta forma, se comporta similar a un HC-06, espera *+ que un dispositivo bluetooth maestro se conecte a este, generalmente se *+ utiliza cuando se necesita comunicarse con una PC o Celular, pues estos se *+ comportan como dispositivos maestros. *+ *+ Modulo bluetooth hc-05 como Maestro: *+ En este modo, EL HC-05 es el que inicia la conexión. Un dispositivo maestro *+ solo se puede conectarse con un dispositivo esclavo. Generalmente se utiliza *+ este modo para comunicarse entre módulos bluetooth. Pero es necesario antes *+ especificar con que dispositivo se tiene que comunicar, esto se explicará más *+ adelante *+ *+ El módulo HC-05 viene por defecto configurado de la siguiente forma: *+ - Modo o role: Esclavo *+ - Nombre por defeco: HC-05 *+ - Código de emparejamiento por defecto: 1234 *+ - La velocidad por defecto (baud rate): 9600 *+ *+ 2. Modos de trabajo del HC-05:: *+ EL Modulo HC-05 tiene 4 estados los cuales es importante conocer: *+ *+ Estado Desconectado: *+ - Entra a este estado tan pronto alimentas el modulo, y cuando no se ha *+ establecido una conexión bluetooth con ningún otro dispositivo *+ - EL LED del módulo en este estado parpadea rápidamente *+ - En este estado a diferencia del HC-06, el HC-05 no puede interpretar los *+ comandos AT *+ *+ Estado Conectado o de comunicación *+ - Entra a este estado cuando se establece una conexión con otro dispositivo *+ bluetooth. *+ - El LED hace un doble parpadeo. *+ - Todos los datos que se ingresen al HC-05 por el Pin RX se trasmiten por *+ bluetooth al dispositivo conectado, y los datos recibidos se devuelven por *+ el pin TX. La comunicación es transparente *+ *+ Modo AT 1 *+ - Para entrar a este estado después de conectar y alimentar el modulo es *+ necesario presionar el botón del HC-05. *+ - En este estado, podemos enviar comandos AT, pero a la misma velocidad con *+ el que está configurado. *+ - EL LED del módulo en este estado parpadea rápidamente igual que en el *+ estado desconectado. *+ *+ Modo AT 2 *+ - Para entrar a este estado es necesario tener presionado el botón al momento *+ de alimentar el modulo, es decir el modulo debe encender con el botón *+ presionado, después de haber encendido se puede soltar y permanecerá en *+ este estado. *+ - En este estado, para enviar comandos AT es necesario hacerlo a la velocidad *+ de 38400 baudios, esto es muy útil cuando nos olvidamos la velocidad con *+ la que hemos dejado configurado nuestro modulo. *+ - El LED del módulo en este estado parpadea lentamente. *+ *+ Los siguientes pasos son para entrar al Modo AT 1 o Modo AT 2: *+ *+ -Para entrar al modo AT 1, después de alimentar el modulo y haber encendido *+ tan solo basta presionar el botón que tiene el *+ módulo HC-05, el LED del módulo seguirá parpadeando *+ rápidamente, por lo que para saber si hemos entrado *+ al Modo AT 1 es necesario enviar comandos AT y ver *+ si responde, estos comandos se verán más adelante. *+ -Para entrar al modo AT 2, antes de alimentar o encender el modulo es necesario *+ presionar su botón, mantener presionado y alimentar *+ el modulo, después que enciende recién podemos *+ soltar el botón. Si el LED Parpadea lentamente es *+ porque ya está en Modo AT 2. *+ *+ En este tutorial enviaremos los comandos AT usando el Modo AT 2, pero también *+ es válido si están en el Modo AT 1, con la diferencia que tendrán que cambiar *+ a la velocidad con la que tienen configurado su Bluetooth (si es la primera *+ vez que configuran, la velocidad por defecto es de 9600). *+ *+ Ahora abrimos nuestro Monitor serial Tera Term, pero puedes usar *+ cualquier monitor serial. *+ *+ En la opción Setup --> Terminal debemos escoger “Ambos LF & CR” y la velocidad *+ “38400 baud” (la velocidad para comunicarse en el MODO AT 2) *+ *+ Echo esto Podemos empezar a enviar los comandos AT a nuestro Bluetooth *+ *+ Test de comunicación *+ Lo primero es comprobar si nuestro bluetooth responde a los comandos AT *+ *+ Enviar: AT *+ Recibe: OK *+ *+ Si recibimos como respuesta un OK entonces podemos continuar, sino verificar *+ las conexiones o los pasos anteriores. *+ *+ *+----------------------------------------------------------------------------- *+ *+ MODULO BLUETOOTH HC-05 *+ *+ El módulo HC-05 es un módulo Bluetooth SPP (protocolo de puerto serie) *+ fácil de usar, diseñado para una configuración de conexión serial inalámbrica *+ transparente. El módulo Bluetooth de puerto serie está totalmente calificado *+ como Bluetooth V2.0 + EDR (Velocidad de datos mejorada) Modulación de 3Mbps *+ con transceptor de radio y banda base completos de 2.4GHz. *+ Utiliza el sistema Bluetooth CSR Bluecore 04-External de un solo chip con *+ tecnología CMOS y con AFH (función de salto de frecuencia adaptable). *+ Tiene una huella tan pequeña como 12.7 mm x 27 mm. *+ *+ Características del software *+ *+ o Velocidad de transmisión predeterminada: *+ 38400 bauds, Bits de datos: 8, Bit de parada: 1, Paridad: Sin paridad, *+ Control de datos: tiene. *+ Velocidad de transmisión permitidas: *+ 9600,19200,38400,57600,115200,230400,460800. *+ o Dado un pulso ascendente en PIO0, el dispositivo se desconectará. *+ o Puerto de instrucción de estado PIO1: Bajo=desconectado, Alto=conectado; *+ o PIO10 y PIO11 se pueden conectar al led rojo y azul por separado. *+ Cuando el maestro y el esclavo están emparejados, el LED rojo y azul *+ parpadea en intervalo de 1 vez/2s, mientras que el LED azul parpadea solo *+ 2 veces/s. *+ o Se conecta automáticamente al último dispositivo con alimentación de forma *+ predeterminada. *+ o Permitir que el dispositivo se conecte de forma predeterminada. *+ o CÓDIGO PIN de emparejamiento automático: "0000" por defecto *+ o Reconexión automática en 30 minutos cuando se desconecta como resultado *+ de un rango de conexión más allá. *+ *+ Características de hardware *+ *+ Sensibilidad típica de -80dBm *+ Hasta + 4dBm de potencia de transmisión de RF *+ Operación de baja potencia E/S de 1.8V a 3.6V *+ Control PIO *+ Interfaz UART con velocidad de transmisión programable *+ Con antena integrada *+ Con conector de borde *+ *+ Conexión al Módulo Bluetooth HC-05: *+ *+ / *+ BluePill HC-05 / *+ 1 Enable/Key ---o o---> GND *+ 3.3V ------ 2 Vcc *+ GND ------ 3 GND *+ Rx (PB_11) <----- 4 Tx *+ Tx (PB_10) -----> 5 Rx *+ 6 State -----------> IRQ *+ *+ Comandos AT Soportados *+ *+ Cómo configurar el modo a servidor (maestro): ** 1. Conecte PIO11 a nivel alto. (pin 34) *+ 2. Encendido, módulo en estado de comando *+ 3. Usando la velocidad en baudios 38400, se envía el comando *+ "AT+ROLE=1\r\n" *+ al módulo, con una respuesta de *+ "OK\r\n" *+ significa establecer éxitos. *+ 4. Conecte el PIO11 a nivel bajo, vuelva a encender el módulo, el módulo *+ funciona como servidor (maestro). *+ *+ Comandos AT:(todos terminan con \r\n) *+ 1. Test command: *+ Comando Respuesta Parámetros *+ AT OK - *+ 2. Reset: *+ Comando Respuesta Parámetros *+ AT+RESET OK - *+ 3. Get firmware version *+ Comando Respuesta Parámetros *+ AT+VERSION? +VERSION:<Param> Param : firmware version *+ OK *+ *+ Ejemplo: *+ AT+VERSION?\r\n *+ +VERSION:2.0-20100601 *+ OK *+ *+ 4. Restore default *+ Comando Respuesta Parámetros *+ AT+ORGL OK - *+ *+ Estado por Omisión: *+ Slave mode, pin code :1234, device name: H-C-2010-06-01 ,Baud 38400bits/s. *+ *+ 5. Get moduleaddress *+ Comando Respuesta Parámetros *+ AT+ADDR? +ADDR:<Param> Param: address of Bluetooth Module *+ OK *+ *+ Bluetooth address: NAP: UAP : LAP *+ *+ Ejemplo: *+ AT+ADDR?\r\n *+ +ADDR:1234:56:abcdef *+ OK *+ *+ 6. Set/Check module name *+ Comando Respuesta Parámetros *+ AT+NAME=<Param> OK Param: Bluetooth module name *+ AT+NAME? +NAME:<Param> (Default: HC-05) *+ OK (/FAIL) *+ *+ Ejemplo: *+ AT+NAME=HC-05\r\n set the module name to “HC-05” *+ OK *+ AT+NAME=BluePill\r\n set the module name to “BluePill” *+ OK *+ AT+NAME?\r\n *+ +NAME: BluePill *+ OK *+ *+ 7. Get the Bluetooth device name: *+ Comando Respuesta Parámetros *+ AT+RNAME?<Param1> 1. +NAME:<Param2> Param1,Param2: the address of *+ OK Bluetooth device *+ 2. FAIL *+ *+ Ejemplo:(Device address 00:02:72:od:22:24,name:BluePill) *+ AT+RNAME? 0002,72,od2224\r\n *+ +RNAME:BluePill *+ OK *+ *+ 8.Set/Check module mode: *+ Comando Respuesta Parámetros *+ AT+ROLE=<Param> OK Param: *+ AT+ ROLE? +ROLE:<Param> 0-Slave *+ 1-Master *+ *+ 9. Set/Check device class *+ Comando Respuesta Parámetros ** AT+CLASS=<Param> OK Param: Device Class *+ AT+ CLASS? 1. +CLASS:<Param> *+ OK *+ 2. FAIL *+ *+ 10. Set/Check GIAC (General Inquire Access Code) *+ Comando Respuesta Parámetros *+ AT+IAC=<Param> 1.OK Param: GIAC *+ 2.FAIL (Default: 9e8b33) *+ AT+IAC +IAC:<Param> *+ OK *+ *+ Ejemplo: *+ AT+IAC=9e8b3f\r\n *+ OK *+ AT+IAC?\r\n *+ +IAC: 9e8b3f *+ OK *+ *+ 11. Set/Check --Query access patterns *+ Comando Respuesta Parámetros *+ AT+INQM=<Param>, 1.OK Param: *+ <Param2>, 2.FAIL 0——inquiry_mode_standard *+ <Param3> 1——inquiry_mode_rssi *+ Param2: *+ Maximum number of Bluetooth *+ devices to respond to *+ Param3: *+ Timeout (1-48 : 1.28s to 61.44s) *+ *+ Ejemplo: *+ AT+INQM=1,9,48\r\n *+ OK AT+INQM\r\n ++ +INQM: 1, 9, 48 *+ OK *+ *+ 12. Set/Check PIN code: *+ Comando Respuesta Parámetros *+ AT+PSWD=<Param> OK Param: PIN code(Default 1234) *+ AT+ PSWD? + PSWD:<Param> *+ OK *+ *+ 13. Set/Checkserial parameter: *+ Comando Respuesta Parámetros *+ AT+UART=<Param>, OK Param1: Baud *+ <Param2>, Param2: Stop bit *+ <Param3> Param3: Parity *+ AT+ UART? +UART=<Param>, *+ <Param2>, *+ <Param3> *+ OK *+ Ejemplo: *+ AT+UART=115200,1,2,\r\n *+ OK *+ AT+UART? *+ +UART:115200,1,2 *+ OK *+ *+ 14. Set/Check connect mode: *+ Comando Respuesta Parámetros *+ AT+CMODE=<Param> OK Param: *+ AT+ CMODE? + CMODE:<Param> 0 - connect fixed address *+ OK 1 - connect any address *+ 2 - slave-Loop *+ *+ 15. Set/Check fixed address: *+ Comando Respuesta Parámetros ** AT+BIND=<Param> OK Param: *+ + BIND:<Param> Fixed address *+ OK (Default 00:00:00:00:00:00) *+ *+ Ejemplo: *+ AT+BIND=1234,56,abcdef\r\n *+ OK *+ AT+BIND?\r\n *+ +BIND:1234:56:abcdef *+ OK *+ *+ 16. Set/Check LED I/O *+ Comando Respuesta Parámetros *+ AT+POLAR=<Param1, OK Param1: *+ <Param2> 0-PIO8 low drive LED *+ AT+ POLAR? +POLAR=<Param1>, 1-PIO8 high drive LED *+ <Param2> Param2: ** 0-PIO9 low drive LED ** 1-PIO9 high drive LED *+ 17. Set PIO output *+ Comando Respuesta Parámetros *+ AT+PIO=<Param1>, OK Param1: *+ <Param2> PIO number *+ Param2: *+ PIO level *+ 0-low *+ 1-high *+ Ejemplo: *+ 1. PIO10 output high level *+ AT+PI0=10,1\r\n *+ OK *+ *+ 18. Set/Check –scan parameter *+ Comando Respuesta Parámetros *+ AT+IPSCAN=<Param1>, OK Param1: Query time interval *+ <Param2>, Param2:Query duration *+ <Param3>, Param3:Paging interval *+ <Param4> Param4:Call duration *+ AT+IPSCAN? +IPSCAN:<Param1>, *+ <Param2>, *+ <Param3>, *+ <Param4> *+ OK *+ Ejemplo: *+ AT+IPSCAN=1234,500,1200,250\r\n *+ OK *+ AT+IPSCAN? *+ +IPSCAN:1234,500,1200,250 *+ *+ 19. Set/Check –SHIFF parameter *+ Comando Respuesta Parámetros *+ AT+SNIFF=<Param1>, OK Param1: Max time *+ <Param2>, Param2: Min time *+ <Param3>, Param3: Retry time *+ <Param4> Param4: Time out *+ AT+SNIFF? +SNIFF:<Param1>, ** <Param2>, ** <Param3>, *+ <Param4> *+ OK *+ *+ 20. Set/Check securitymode *+ Comando Respuesta Parámetros *+ AT+SENM=<Param1>, 1.OK Param1: *+ <Param2> 2.FAIL 0——sec_mode0+off *+ AT+ SENM? +SENM:<Param1>, 1——sec_mode1+non_secure *+ <Param2> 2——sec_mode2_service *+ OK 3——sec_mode3_link *+ 3——sec_mode3_link *+ 4——sec_mode_unknown *+ Param2: ** 0——hci_enc_mode_off *+ 1——hci_enc_mode_pt_to_pt *+ 2——hci_enc_mode_pt_to_pt_and_bcast *+ *+ 21. DeleteAuthenticated Device *+ Comando Respuesta Parámetros *+ AT+PMSAD=<Param> OK Param: Authenticated Device Address *+ *+ Ejemplo: *+ AT+PMSAD=1234,56,abcdef\r\n *+ OK