- Requisits:
- Programació del microcontrolador PIC per a la comunicació Bluetooth:
- Diagrama de circuits i configuració de maquinari:
- Control del LED mitjançant l'aplicació mòbil Bluetooth:
En aquest tutorial aprendrem com distingir els projectes PIC sense fils mitjançant la interfície d’un mòdul Bluetooth (HC-06). En el nostre tutorial anterior, ja hem après a utilitzar el mòdul USART al nostre microcontrolador PIC i hem establert la comunicació entre PIC i ordinador. Si sou un principiant absolut, consulteu aquí tots els nostres tutorials PIC, on hem començat des de zero, com aprendre MPLAB i XC8, connectar LEDs, LCD, utilitzar temporitzadors, ADC, PWM, etc.
Aquí hem utilitzat el popular mòdul Bluetooth HC-06. Mitjançant aquest mòdul podem rebre i enviar informació sense fils des del nostre PIC MCU a una aplicació mòbil o a un ordinador. La comunicació entre PIC i HC-06 s’estableix mitjançant el mòdul USART present al microcontrolador PIC. També podeu utilitzar l'HC-05. Tornem a operar en el mateix mode asíncron de 8 bits, però aquesta vegada modificarem una mica el nostre codi perquè funcioni amb el mòdul Bluetooth. Per tant, aprendre prèviament el tutorial UART és un avantatge afegit per a aquest projecte.
En aquest tutorial, canviarem un LED enviant o desactivant l'ordre des del nostre telèfon intel·ligent. Utilitzarem una aplicació Android anomenada Terminal Bluetooth que pot enviar i rebre dades per Bluetooth. Si enviem un caràcter "1" des de l'aplicació, el llum s'encendrà al tauler PIC i rebrem un reconeixement al telèfon que el llum s'ha encès. De la mateixa manera, podem enviar '0' des del telèfon per apagar-lo. D’aquesta manera podem controlar la llum LED de la nostra placa PIC, similar al tutorial d’UART, però ara sense fils. El programa complet i el vídeo detallat es donen al final d’aquest tutorial.
A continuació es mostra el diagrama de blocs bàsic per a la configuració.

Requisits:
Maquinari:
- PIC16F877A Tauler de perfils
- Mòdul Bluetooth HC-05 o HC-06
- Ordinador (per a la programació)
- Telèfon mòbil
- Programador PICkit 3
Programari:
- MPLABX
- Terminal Bluetooth (aplicació mòbil)
Mòdul Bluetooth HC-06:
El Bluetooth pot funcionar en els dos modes següents:
- Mode de comandament
- Mode de funcionament
En el mode d’ordres podrem configurar les propietats Bluetooth com el nom del senyal Bluetooth, la seva contrasenya, la velocitat de transmissió operativa, etc. El mode operatiu és aquell en el qual podrem enviar i rebre dades entre el microcontrolador PIC. i el mòdul Bluetooth. Per tant, en aquest tutorial jugarem només amb el mode operatiu. El mode Ordre es deixarà a la configuració predeterminada. El nom del dispositiu serà HC-05 (estic fent servir HC-06) i la contrasenya serà 0000 o 1234 i, el més important, la velocitat de transmissió per defecte per a tots els mòduls Bluetooth serà 9600.

El mòdul funciona amb alimentació de 5 V i els pins de senyal funcionen amb 3,3 V, per tant, hi ha un regulador de 3,3 V al mòdul mateix. Per tant, no ens hem de preocupar. Dels sis pins només s’utilitzaran quatre en mode de funcionament. A continuació es mostra la taula de connexions de pins
|
S.No |
Pin de HC-05 / HC-06 |
Fixa el nom a MCU |
PIN número a PIC |
|
1 |
Vcc |
Vdd |
31 º pin |
|
2 |
Vcc |
Gnd |
32 nd pin |
|
3 |
Tx |
RC6 / Tx / CK |
25 º pin |
|
4 |
Rx |
RC7 / Rx / DT |
26 º pin |
|
5 |
Estat |
NC |
NC |
|
6 |
EN (Activa) |
NC |
NC |
Consulteu els nostres altres projectes per obtenir més informació sobre el mòdul Bluetooth HC-05 amb altres microcontroladors:
- Cotxe de joguina controlat per Bluetooth mitjançant Arduino
- Sistema domòtic controlat per Bluetooth mitjançant 8051
- Llums controlades per veu mitjançant Raspberry Pi
- Ràdio FM controlada per telèfon intel·ligent mitjançant Arduino i Processament
- Cotxe robot controlat per telèfon mòbil amb G-Sensor i Arduino
Programació del microcontrolador PIC per a la comunicació Bluetooth:
Com tots els mòduls (ADC, temporitzador, PWM), també hem d’inicialitzar el mòdul Bluetooth. La inicialització serà similar a la inicialització UART, però hem de fer alguns canvis perquè el Bluetooth funcioni perfectament amb la nostra MCU PIC16F877A. Definim els bits de configuració i comencem amb la funció d'inicialització Bluetooth.
Inicialització del Bluetooth:
Gairebé tots els mòduls Bluetooth del mercat funcionen a una velocitat de transmissió de 9600, és molt important establir la vostra velocitat de transmissió igual que la dels mòduls Bluetooth que funcionen a velocitat de transmissió, aquí establim SPBRG = 129 ja que estem operant a 9600 com a velocitat en bauds. Per tant, la inicialització anterior només funcionarà per als mòduls Bluetooth que funcionin a una velocitat de 9600 baud. També és obligatori tenir habilitat el bit de velocitat de transmissió d'alta velocitat BRGH. Això ajudarà a establir una velocitat de transmissió precisa.
// ****** Inicialitzar Bluetooth mitjançant USART ******** // void Initialize_Bluetooth () {// Estableix els pins de RX i TX // TRISC6 = 1; TRISC7 = 1; // Estableix la velocitat de transmissió mitjançant la taula de cerca del full de dades (pg114) // BRGH = 1; // Utilitzeu sempre una velocitat de transmissió d'alta velocitat amb Bluetooth, sinó que no funcionarà SPBRG = 129; // Activa Asyc. Port sèrie // SYNC = 0; SPEN = 1; // Establir recepció i transmissió de 8 bits RX9 = 0; TX9 = 0; // Activa la transmissió i la recepció // TXEN = 1; CREN = 1; // Activa global i ph. interromp // GIE = 1; PEIE = 1; // Activa les interrupcions per a Tx. i Rx.// RCIE = 1; TXIE = 1; } // ___________ BT inicialitzat _____________ //
Si teniu un mòdul BT que funciona a una velocitat de transmissió diferent, podeu consultar la taula de cerca següent per esbrinar el valor del SPBRG.

Carregant dades al Bluetooth:
Un cop inicialitzada la funció, tenim tres funcions al nostre programa per enviar i rebre dades de Bluetooth. A diferència d’UART, aquí tenim poques coses a considerar abans de poder transmetre o rebre dades. El mòdul Bluetooth té una memòria intermèdia de transmissió i recepció, les dades que s’hi envien s’emmagatzemaran a la memòria intermèdia Tx. Aquestes dades no s’emetran (s’envien per antena) tret que s’enviï una devolució de transport al mòdul. Per tant, per transmetre dades hem de carregar la memòria intermèdia Rx de BT i després transmetre-la fent servir el retorn de carro.
El funcionament anterior es pot aconseguir fàcilment utilitzant les funcions següents. La funció següent es pot utilitzar quan només hem de carregar un caràcter al buffer Rx. Carregem les dades al registre TXREG i esperem fins que es processin comprovant la marca TXIF i TRMT mitjançant bucles while.
// Funció per carregar el Bluetooth Rx. memòria intermèdia amb un caràcter.// void BT_load_char (byte de caràcters) {TXREG = byte; mentre que (! TXIF); mentre (! TRMT); } // Fi de la funció //
La funció següent s'utilitza per carregar una cadena al buffer Rx del mòdul Bluetooth. La cadena es divideix en caràcters i cada caràcter s’envia a la funció BT_load_char () .
// Funció per carregar Bluetooth Rx. memòria intermèdia amb cadena // void BT_load_string (char * string) {while (* string) BT_load_char (* string ++); } // Fi de la funció /
Emissió de dades per Bluetooth:
Fins ara acabem de transmetre informació al buffer Rx del mòdul HC-05. Ara hem d’instruir-lo que transmeti les dades per aire mitjançant aquesta funció.
// Funció per emetre dades des de RX. buffer // void broadcast_BT () {TXREG = 13; __delay_ms (500); } // Fi de la funció //
En aquesta funció, enviem un valor 13 al registre TXREG. Aquest valor 13 no és res més que l'equivalent decimal per al transport (consulteu el gràfic ASCII). A continuació, es crea un petit retard perquè comenci l’emissor.
Lectura de dades des de Bluetooth:
Similar a UART, la funció següent s’utilitza per llegir dades del Bluetooth
// Funció per obtenir un caràcter de Rx.buffer de BT // char BT_get_char (void) {if (OERR) // comprova si hi ha un error de sobrecàrrega {CREN = 0; CREN = 1; // Restableix CREN} si (RCIF == 1) // si l'usuari ha enviat un caràcter retorna el caràcter (valor ASCII) {while (! RCIF); tornar RCREG; } else // si l'usuari no ha enviat cap missatge, torna 0 torna 0; } // Fi de la funció /
Si l'usuari ha enviat dades, aquesta funció retornarà les dades concretes que es poden desar en una variable i processar-les. Si l'usuari no ha enviat res, la funció tornarà a zero.
Funció principal:
Hem utilitzat totes les funcions explicades anteriorment dins de la funció principal. Enviem un missatge introductori i després esperem que l’usuari enviï uns valors basats en els quals canviarem la llum LED vermella connectada al pin RB3 de la nostra placa Perf.
void main (void) {// Declaracions de variables d'abast // int get_value; // Final de la declaració de variables // // Declaracions d'E / S // TRISB3 = 0; // Final de la declaració d'E / S // Initialize_Bluetooth (); // permetem que el nostre Bluetooth estigui preparat per a l'acció // Mostra un missatge introductori un cop engegat // BT_load_string ("Bluetooth inicialitzat i llest"); broadcast_BT (); BT_load_string ("Premeu 1 per encendre el LED"); broadcast_BT (); BT_load_string ("Premeu 0 per apagar el LED"); broadcast_BT (); // Final del missatge // while (1) // El lop infinit {get_value = BT_get_char (); // Llegiu el caràcter. rebut mitjançant BT // Si rebem un '0' // if (get_value == '0') {RB3 = 0; BT_load_string ("LED apagat"); broadcast_BT (); } // Si rebem un '1' // if (get_value == '1') {RB3 = 1; BT_load_string ("LED encès"); broadcast_BT ();}}}
Consulteu el programa complet a la secció de codi següent.
Diagrama de circuits i configuració de maquinari:
Les connexions de circuit per a aquest projecte és molt senzill, simplement hem d'encendre el mòdul Bluetooth i connecti el Tx a la 26 ª pin de el PIC i Rx a la 25 ª pin de el PIC com es mostra en el diagrama de circuit a continuació:

Ara anem a passar al maquinari. Un cop feta la connexió, hauria de ser semblant a això.

Control del LED mitjançant l'aplicació mòbil Bluetooth:
Ara preparem la nostra aplicació per a Android. Baixeu-vos l'aplicació anomenada Terminal Bluetooth des de l'App Store o utilitzeu aquest enllaç. Un cop descarregada i instal·lada l’aplicació, enceneu la vostra placa de perfils PIC que fem servir des del començament. La petita llum LED del mòdul Bluetooth hauria de parpellejar per indicar que està encès i que està buscant activament un telèfon per establir una connexió.
Ara accediu a la configuració Bluetooth del vostre telèfon i cerqueu un dispositiu Bluetooth nou. Haureu de poder veure el nom HC-05 o HC-06 segons el vostre mòdul. Estic fent servir HC-06, per tant, el meu telèfon mostra la pantalla següent. A continuació, proveu de parar-lo i us demanarà una contrasenya. Introduïu la contrasenya com a 1234 (per a alguns podria ser 0000) i feu clic a D'acord com es mostra a continuació.


Quan el paring sigui correcte, obriu l'aplicació Bluetooth Terminal que acabem d'instal·lar. Accediu a l’opció de configuració i seleccioneu “Connecta un dispositiu: segur” , tal com es mostra a continuació. S’obrirà un quadre emergent on apareixeran tots els nostres dispositius aparellats tal com es mostra a continuació. Seleccioneu el mòdul HC-05 o HC-06.


Un cop establerta la connexió, la llum del mòdul Bluetooth que parpellejava fins ara s’ha d’haver convertit en constant per indicar que s’ha connectat amb èxit al vostre mòbil. I hauríem de rebre el missatge introductori del nostre programa com es mostra a continuació.
Ara premeu "1" per encendre la llum LED i premeu "0" per apagar la llum. El treball complet es mostrarà al vídeo. La pantalla del mòbil tindrà un aspecte semblant al que es mostra a continuació.


Així és, nois, hem après a la interfície del mòdul Bluetooth al nostre microcontrolador PIC, ara amb l'ajut d'això podem provar projectes sense fils. Hi ha molts projectes que utilitzen Bluetooth, els podeu provar o crear la vostra pròpia Idea i compartir-los a la secció de comentaris. Consulteu també el nostre projecte anterior amb l’aplicació de terminal Bluetooth i l’HC-05, com ara la domòtica controlada per telèfon intel·ligent mitjançant Arduino i el bloqueig de codi digital controlat per telèfon intel·ligent mitjançant Arduino.
Espero que aquest tutorial us hagi ajudat. Si us heu quedat atrapats en algun lloc, utilitzeu la secció de comentaris.
