- Cerințe:
- Programarea microcontrolerului PIC pentru comunicații Bluetooth:
- Schema circuitului și configurarea hardware-ului:
- Controlul LED-ului folosind aplicația Bluetooth Mobile:
În acest tutorial vom învăța cum să distingem proiecte PIC fără fir prin interfața unui modul Bluetooth (HC-06). În tutorialul nostru anterior am învățat deja cum să folosim modulul USART în microcontrolerul nostru PIC și am stabilit comunicarea între PIC și computer. Dacă sunteți un începător absolut, verificați aici toate tutorialele PIC, unde am început de la zero, cum ar fi învățarea MPLAB și XC8, interfața LED-urilor, LCD-ului, folosind cronometre, ADC, PWM etc.
Aici am folosit popularul modul Bluetooth HC-06. Folosind acest modul putem primi și trimite informații fără fir de la PIC MCU către o aplicație mobilă sau un computer. Comunicarea dintre PIC și HC-06 este stabilită utilizând modulul USART prezent în microcontrolerul PIC. Puteți utiliza și HC-05. Operăm din nou pe același mod asincron pe 8 biți, dar de data aceasta vom modifica codul nostru puțin, astfel încât să funcționeze cu modulul Bluetooth. Prin urmare, învățarea tutorialului UART în prealabil este un avantaj suplimentar pentru acest proiect.
În acest tutorial, vom comuta un LED trimițând sau dezactivând comanda de pe telefonul nostru inteligent. Vom folosi o aplicație Android numită Bluetooth Terminal, care poate trimite și primi date prin Bluetooth. Dacă trimitem un caracter „1” din aplicație, lumina va fi aprinsă pe placa PIC și vom primi o confirmare înapoi la telefon că lumina a fost aprinsă. În mod similar, putem trimite „0” de pe telefon pentru a-l opri. În acest fel putem controla lumina LED de pe placa noastră PIC, similar cu tutorialul UART, dar acum fără fir. Programul complet și videoclipul detaliat sunt date la sfârșitul acestui tutorial.
Diagrama bloc de bază pentru configurare este prezentată mai jos.
Cerințe:
Hardware:
- PIC16F877A Perf Board
- Modul Bluetooth HC-05 sau HC-06
- Computer (pentru programare)
- Telefon mobil
- Programator PICkit 3
Software:
- MPLABX
- Terminal Bluetooth (aplicație mobilă)
Modulul Bluetooth HC-06:
Bluetooth poate funcționa în următoarele două moduri:
- Mod de comandă
- Mod de operare
În modul de comandă , vom putea configura proprietățile Bluetooth, cum ar fi numele semnalului Bluetooth, parola acestuia, rata de transfer de operare etc. Modul de operare este cea în care vom putea trimite și primi date între microcontroller PIC și modulul Bluetooth. Prin urmare, în acest tutorial vom juca doar cu modul de operare. Modul Comandă va fi lăsat la setările implicite. Numele dispozitivului va fi HC-05 (folosesc HC-06) și parola va fi 0000 sau 1234 și cel mai important, rata de transmisie implicită pentru toate modulele Bluetooth va fi 9600.
Modulul funcționează pe o sursă de 5V, iar pinii de semnal funcționează pe 3,3V, prin urmare un regulator de 3,3V este prezent în modul în sine. Prin urmare, nu trebuie să ne îngrijorăm. Din cei șase pini, doar patru vor fi folosiți în modul de operare. Tabelul de conectare a pinului este prezentat mai jos
S. Nu |
Pin pe HC-05 / HC-06 |
Pin nume pe MCU |
Numărul PIN în PIC |
1 |
Vcc |
Vdd |
31 st pin |
2 |
Vcc |
Gnd |
32 nd pin |
3 |
Tx |
RC6 / Tx / CK |
Al 25- lea pin |
4 |
Rx |
RC7 / Rx / DT |
Al 26- lea pin |
5 |
Stat |
NC |
NC |
6 |
EN (Activați) |
NC |
NC |
Verificați celelalte proiecte pentru a afla mai multe despre modulul Bluetooth HC-05 cu alte microcontrolere:
- Mașină de jucărie controlată prin Bluetooth folosind Arduino
- Sistem de automatizare la domiciliu controlat prin Bluetooth care utilizează 8051
- Lumini controlate prin voce folosind Raspberry Pi
- Radio FM controlat prin telefon inteligent folosind Arduino și Procesare
- Mașină robot controlată de telefonul mobil folosind G-Sensor și Arduino
Programarea microcontrolerului PIC pentru comunicații Bluetooth:
La fel ca toate modulele (ADC, Timer, PWM), ar trebui să inițializăm și modulul nostru Bluetooth. Inițializarea va fi similară cu inițializarea UART, dar trebuie să facem câteva modificări pentru ca Bluetooth să funcționeze fără cusur cu MCU-ul nostru PIC16F877A. Să definim biții de configurare și să începem cu funcția de inițializare Bluetooth.
Inițializarea Bluetooth:
Aproape toate modulele Bluetooth de pe piață funcționează la o rată de transmisie de 9600, este foarte important să setați rata de transmisie la fel ca cea a modulelor Bluetooth care operează rata de transmisie, aici setăm SPBRG = 129, deoarece funcționăm la o frecvență de ceas de 20 MHz 9600 ca rată baud. Prin urmare, inițializarea de mai sus va funcționa numai pentru modulele Bluetooth care funcționează la o rată de 9600 baud. De asemenea, este obligatoriu să aveți activat bitul de viteză mare Baud BRGH. Acest lucru va ajuta la stabilirea unei rate de transmisie exacte.
// ****** Inițializați Bluetooth utilizând USART ******** // void Inițializați_Bluetooth () {// Setați pinii RX și TX // TRISC6 = 1; TRISC7 = 1; // Setați rata de transmisie utilizând tabelul de căutare din foaia de date (pg114) // BRGH = 1; // Folosiți întotdeauna viteza de transmisie de mare viteză cu Bluetooth, altfel nu va funcționa SPBRG = 129; // Porniți Asyc. Port serial // SYNC = 0; SPEN = 1; // Setați recepția și transmisia pe 8 biți RX9 = 0; TX9 = 0; // Activați transmisia și recepția // TXEN = 1; CREN = 1; // Activați global și ph. întrerupe // GIE = 1; PEIE = 1; // Activați întreruperile pentru Tx. și Rx.// RCIE = 1; TXIE = 1; } // ___________ BT inițializat _____________ //
Dacă aveți un modul BT care funcționează la o rată de transmisie diferită, puteți consulta tabelul de căutare de mai jos pentru a afla valoarea dvs. pentru SPBRG.
Încărcarea datelor în Bluetooth:
Odată ce funcția este inițializată, avem trei funcții în programul nostru pentru a trimite și primi date de la Bluetooth. Spre deosebire de UART, avem câteva lucruri de luat în considerare aici înainte de a putea transmite sau primi date. Modulul Bluetooth are un buffer de transmisie și recepție în interior, datele trimise către acesta vor fi stocate în buffer-ul Tx. Aceste date nu vor fi difuzate (transmise în aer), cu excepția cazului în care o trimitere înapoi la modul este transmisă. Prin urmare, pentru a transmite date, trebuie să încărcăm tamponul Rx al BT și apoi să îl difuzăm folosind returul de transport.
Funcționarea de mai sus poate fi realizată cu ușurință utilizând următoarele funcții. Funcția de mai jos poate fi utilizată atunci când trebuie să încărcăm un singur caracter în bufferul Rx. Încărcăm datele în registrul TXREG și așteptăm până când acestea sunt procesate verificând semnalizatorul TXIF și TRMT folosind bucle while.
// Funcția de încărcare a Bluetooth Rx. tampon cu un caracter.// void BT_load_char (octet de caractere) {TXREG = octet; while (! TXIF); while (! TRMT); } // Sfârșitul funcției //
Funcția de mai jos este utilizată pentru a încărca un șir în tamponul Rx al modulului Bluetooth. Șirul este împărțit în caractere și fiecare caracter este trimis la funcția BT_load_char () .
// Funcția de încărcare Bluetooth Rx. tampon cu șir // void BT_load_string (char * string) {while (* șir) BT_load_char (* șir ++); } // Sfârșitul funcției /
Difuzarea datelor prin Bluetooth:
Până acum tocmai am transmis informații în bufferul Rx al modulului HC-05. Acum trebuie să-l instruim să transmită datele prin aer folosind această funcție.
// Funcția de difuzare a datelor de la RX. buffer // void broadcast_BT () {TXREG = 13; __delay_ms (500); } // Sfârșitul funcției //
În această funcție trimitem o valoare 13 în registrul TXREG. Această valoare 13 nu este altceva decât echivalentul zecimal pentru transport (consultați diagrama ASCII). Apoi se creează o mică întârziere pentru ca radiodifuzorul să înceapă.
Citirea datelor din Bluetooth:
Similar cu UART, funcția de mai jos este utilizată pentru a citi date de pe Bluetooth
// Funcția pentru a obține un caracter de la Rx.buffer de BT // char BT_get_char (void) {if (OERR) // verificați dacă există o eroare de execuție {CREN = 0; CREN = 1; // Reset CREN} if (RCIF == 1) // dacă utilizatorul a trimis un char returnează caracterul (valoarea ASCII) {while (! RCIF); retur RCREG; } else // dacă utilizatorul nu a trimis niciun mesaj returnează 0 returnează 0; } // Sfârșitul funcției /
Dacă utilizatorul a trimis date, această funcție va returna acele date care pot fi salvate într-o variabilă și prelucrate. Dacă utilizatorul nu a trimis nimic, funcția va reveni la zero.
Functie principala:
Am folosit toate funcțiile explicate mai sus în interiorul sau funcția principală. Trimitem un mesaj introductiv și apoi așteptăm ca utilizatorul să trimită câteva valori pe baza cărora comutăm lumina led roșie conectată la pinul RB3 de pe placa noastră Perf.
void main (void) {// Declarații variabile de domeniu // int get_value; // Sfârșitul declarației variabilei // // Declarații I / O // TRISB3 = 0; // Sfârșitul declarației I / O // Initialize_Bluetooth (); // permite să ne pregătim Bluetooth-ul pentru acțiune // Afișează un mesaj introductiv la pornire // BT_load_string („Bluetooth inițializat și gata”); broadcast_BT (); BT_load_string („Apăsați 1 pentru a aprinde LED-ul”); broadcast_BT (); BT_load_string („Apăsați 0 pentru a stinge LED-ul”); broadcast_BT (); // Sfârșitul mesajului // while (1) // Lopul infinit {get_value = BT_get_char (); // Citiți caracterul. primit prin BT // Dacă primim un '0' // if (get_value == '0') {RB3 = 0; BT_load_string ("LED-ul stins"); broadcast_BT (); } // Dacă primim un '1' // if (get_value == '1') {RB3 = 1; BT_load_string ("LED aprins"); broadcast_BT ();}}}
Verificați programul complet în secțiunea de cod de mai jos.
Schema circuitului și configurarea hardware-ului:
Conexiuni de circuit pentru acest proiect este foarte simplu, trebuie pur și simplu la putere în sus modulul Bluetooth și conectați Tx la 26 - lea PIN al PIC și Rx la 25 - lea PIN al PIC așa cum se arată în diagrama de circuit de mai jos:
Acum, să trecem la hardware. Odată ce conexiunea este încheiată, ar trebui să arate cam așa.
Controlul LED-ului folosind aplicația Bluetooth Mobile:
Acum permiteți-ne să pregătim aplicația noastră pentru Android. Descărcați aplicația numită Bluetooth Terminal din App Store sau utilizați acest link. Odată ce aplicația este descărcată și instalată, porniți placa de perfecționare PIC pe care o folosim de la început. Lumina LED mică de pe modulul dvs. Bluetooth ar trebui să clipească pentru a indica faptul că este pornit și căută în mod activ un telefon pentru a stabili o conexiune.
Acum intrați în Setările Bluetooth ale telefonului dvs. și căutați un dispozitiv Bluetooth nou, ar trebui să puteți vedea numele HC-05 sau HC-06 pe baza modulului dvs. Folosesc HC-06, prin urmare telefonul meu afișează următorul ecran. Apoi, încercați să vă asociați și vă va cere o parolă. Introduceți parola ca 1234 (pentru unii ar putea fi 0000) și faceți clic pe OK așa cum se arată mai jos.
După ce pararea are succes, deschideți aplicația Bluetooth Terminal pe care tocmai am instalat-o. Intrați în opțiunea de setări și selectați „Conectați un dispozitiv - Sigur” așa cum se arată mai jos. Aceasta va deschide o casetă pop în care toate dispozitivele noastre asociate vor fi listate așa cum se arată mai jos. Selectați modulul HC-05 sau HC-06.
Odată ce conexiunea este stabilită, lumina de pe modulul Bluetooth care clipea până acum trebuie să fi devenit constantă pentru a indica faptul că s-a conectat cu succes la telefonul dvs. mobil. Și ar trebui să primim mesajul introductiv din programul nostru, așa cum se arată mai jos.
Acum apăsați „1” pentru a aprinde lumina LED și apăsați „0” pentru a opri lumina. Lucrarea completă va fi afișată în videoclip. Ecranul mobil va arăta cam așa, prezentat mai jos.
Așa că băieții, am învățat cum să interfațăm modulul Bluetooth la microcontrolerul nostru PIC, acum cu ajutorul acestui lucru putem încerca proiecte wireless. Există o mulțime de proiecte care utilizează Bluetooth, le puteți încerca sau puteți veni cu propria idee și le puteți împărtăși în secțiunea de comentarii. Verificați, de asemenea, proiectul nostru anterior cu aplicația terminal Bluetooth și HC-05, cum ar fi automatizarea caselor controlate prin telefon inteligent utilizând Arduino și blocarea codului digital controlat prin telefon inteligent folosind Arduino.
Sper că acest tutorial v-a ajutat! Dacă v-ați blocat undeva, folosiți cu amabilitate secțiunea de comentarii.