- Reikalavimai:
- „PIC“ mikrovaldiklio programavimas „Bluetooth“ ryšiui:
- Grandinės schema ir techninės įrangos sąranka:
- LED valdymas naudojant „Bluetooth Mobile Application“:
Šioje pamokoje sužinosime, kaip suderinti „PIC“ projektus belaidžiu ryšiu su „Bluetooth“ moduliu (HC-06). Ankstesnėje mūsų pamokoje mes jau išmokome naudoti USART modulį savo PIC mikrovaldiklyje ir užmegzėme ryšį tarp PIC ir kompiuterio. Jei esate visiškai pradedantysis, patikrinkite visas mūsų PIC mokymo programas, kuriose pradėjome nuo nulio, pvz., Mokėmės MPLAB ir XC8, sąsajos LED, LCD, naudodami laikmačius, ADC, PWM ir kt.
Čia mes panaudojome populiarų „ Bluetooth“ modulį HC-06. Naudodamiesi šiuo moduliu, mes galime belaidžiu ryšiu gauti ir siųsti informaciją iš mūsų PIC MCU į mobiliąją programą ar kompiuterį. Ryšys tarp PIC ir HC-06 užmegztas naudojant USART modulį, esantį PIC mikrovaldiklyje. Taip pat galite naudoti HC-05. Mes vėl dirbame tuo pačiu asinchroniniu 8 bitų režimu, tačiau šį kartą mes šiek tiek pakeisime savo kodą, kad jis veiktų su „Bluetooth“ moduliu. Taigi iš anksto išmokus UART mokymo programą, yra papildomas šio projekto privalumas.
Šioje pamokoje mes perjungsime šviesos diodą, siunčiant arba išjungiant komandą iš mūsų išmaniojo telefono. Mes naudosime „Android“ programą, vadinamą „ Bluetooth“ terminalu, kuri gali siųsti ir gauti duomenis per „Bluetooth“. Jei iš programos išsiųsime simbolį „1“, PIC plokštėje bus įjungta lemputė ir mes vėl gausime patvirtinimą į telefoną, kad lemputė įjungta. Panašiai galime išsiųsti „0“ iš telefono, kad jį išjungtume. Tokiu būdu mes galime valdyti savo PIC plokštės šviesos diodą, panašų į UART mokymo programą, bet dabar belaidžiu būdu. Užbaigti programą ir išsamų vaizdo įrašą pateikiama šios pamokos pabaigoje.
Pagrindinė sąrankos blokinė schema parodyta žemiau.
Reikalavimai:
Techninė įranga:
- PIC16F877A Perf Board
- „HC-05“ arba „HC-06“ „Bluetooth“ modulis
- Kompiuteris (programavimui)
- Mobilusis telefonas
- „PICkit 3“ programuotojas
Programinė įranga:
- MPLABX
- „Bluetooth“ terminalas (mobilioji programa)
„Bluetooth“ modulis HC-06:
„Bluetooth“ gali veikti šiais dviem režimais:
- Komandos režimas
- Veikimo režimas
Į komandinį režimą galėsime konfigūruoti "Bluetooth" savybes, pavyzdžiui, "Bluetooth" Signalo pavadinimas, jo slaptažodį, operacinė Baud norma ir tt Darbo režimas yra toks, kuriame galėsime siųsti ir gauti duomenis tarp IPS mikrokontrolerio ir „Bluetooth“ modulį. Taigi šioje pamokoje žaisime tik su darbo režimu. Komandos režimas bus paliktas numatytiesiems nustatymams. Įrenginio pavadinimas bus HC-05 (aš naudoju HC-06), o slaptažodis bus 0000 arba 1234, o svarbiausia numatytasis visų „Bluetooth“ modulių perdavimo greitis bus 9600.
Modulis veikia esant 5 V įtampai, o signalo kaiščiai veikia prie 3,3 V, todėl pačiame modulyje yra 3,3 V reguliatorius. Taigi mes neturime dėl to jaudintis. Iš šešių kaiščių tik keturi bus naudojami darbo režimu. Kaiščių sujungimo lentelė parodyta žemiau
S.No |
Prisekite ant HC-05 / HC-06 |
Prisegti pavadinimą MCU |
PIN kodas PIC |
1 |
Vcc |
Vdd |
31 -asis kaištis |
2 |
Vcc |
Gnd |
32 -asis kaištis |
3 |
Tx |
RC6 / Tx / CK |
25 -asis kaištis |
4 |
Rx |
RC7 / Rx / DT |
26 -asis kaištis |
5 |
Valstija |
NC |
NC |
6 |
EN (įjungti) |
NC |
NC |
Peržiūrėkite kitus mūsų projektus ir sužinokite daugiau apie „Bluetooth“ modulį HC-05 su kitais mikrovaldikliais:
- „Bluetooth“ valdomas žaislinis automobilis, naudojant „Arduino“
- „Bluetooth“ valdoma namų automatikos sistema naudojant 8051
- Balso valdomos šviesos naudojant „Raspberry Pi“
- Išmanusis telefonas valdomas FM radijas, naudojant „Arduino“ ir apdorojimą
- Mobiliuoju telefonu valdomas robotas, naudojant „G-Sensor“ ir „Arduino“
„PIC“ mikrovaldiklio programavimas „Bluetooth“ ryšiui:
Kaip ir visi moduliai (ADC, laikmatis, PWM), taip pat turėtume inicializuoti savo „Bluetooth“ modulį. Inicijavimas bus panašus į UART inicijavimą, tačiau turime atlikti tam tikrus pakeitimus, kad „Bluetooth“ veiktų nepriekaištingai su mūsų PIC16F877A MCU. Apibrėžkime konfigūracijos bitus ir pradėkime nuo „Bluetooth“ inicijavimo funkcijos.
Inicijuojamas „Bluetooth“:
Beveik visi rinkoje esantys „Bluetooth“ moduliai veikia 9600 duomenų perdavimo sparta. Labai svarbu nustatyti savo perdavimo greitį taip pat, kaip ir „Bluetooth“ modulių veikiančio perdavimo greičio greičiu. Čia mes nustatome SPBRG = 129, nes mes dirbame 20 MHz dažniu 9600 kaip perdavimo sparta. Taigi pirmiau pateiktas inicializavimas veiks tik „Bluetooth“ moduliams, veikiantiems 9600 baudos greičiu. Taip pat privaloma įjungti didelės spartos perdavimo spartos bitą BRGH. Tai padės nustatyti tikslų perdavimo greitį.
// ****** Inicializuokite „Bluetooth“ naudodami „USART“ ******** // void Initialize_Bluetooth () {// Nustatykite RX ir TX kaiščius // TRISC6 = 1; TRISC7 = 1; // Nustatykite duomenų perdavimo greitį naudodami duomenų lentos paieškos lentelę (pg114) // BRGH = 1; // Visada naudokite didelės spartos duomenų perdavimo greitį su „Bluetooth“, kitaip jis neveiks SPBRG = 129; // Įjunkite „Asyc“. Nuoseklusis prievadas // SYNC = 0; SPEN = 1; // Nustatyti 8 bitų priėmimą ir perdavimą RX9 = 0; TX9 = 0; // Įgalinti perdavimą ir priėmimą // TXEN = 1; CREN = 1; // Įgalinti visuotinį ir ph. pertraukia // GIE = 1; PEIE = 1; // Įgalinti Tx pertraukimus. ir Rx. // RCIE = 1; TXIE = 1; } // ___________ BT inicializuota _____________ //
Jei turite BT modulį, kuris veikia skirtingu duomenų perdavimo greičiu, galite sužinoti toliau pateiktą paieškos lentelę, kad sužinotumėte savo SPBRG vertę.
Duomenų įkėlimas į „Bluetooth“:
Inicializavus funkciją, programoje yra trys funkcijos siųsti ir gauti duomenis iš „Bluetooth“. Skirtingai nei UART, čia turime apsvarstyti keletą dalykų, kad galėtume perduoti ar priimti duomenis. „Bluetooth“ modulio viduje yra perdavimo ir gavimo buferis, jam išsiųsti duomenys bus saugomi Tx buferyje. Šie duomenys nebus transliuojami (siunčiami eteryje), nebent į modulį bus išsiųsta grąžinta vežimėlis. Taigi, norėdami perduoti duomenis, turime įkelti BT Rx buferį ir tada transliuoti jį naudodamiesi vežimo grąžinimu.
Pirmiau minėtą darbą galima lengvai pasiekti naudojant šias funkcijas. Žemiau pateiktą funkciją galima naudoti, kai į Rx buferį turime įkelti tik vieną simbolį. Duomenis įkeliame į TXREG registrą ir laukiame, kol jie bus apdoroti, patikrinus žymėjimą TXIF ir TRMT naudojant while ciklus.
// Funkcija įkelti „Bluetooth Rx“. buferis su vienu simboliu.// negalioja BT_load_char (char byte) {TXREG = baitas; o (! TXIF); o (! TRMT); } // Funkcijos pabaiga //
Žemiau funkcija naudojama eilutei įkelti į „Bluetooth“ modulio Rx buferį. Eilutė padalijama į simbolius ir kiekvienas simbolis siunčiamas į funkciją BT_load_char () .
// Funkcija įkelti „Bluetooth Rx“. buferis su eilute // void BT_load_string (char * string) {while (* string) BT_load_char (* string ++); } // Funkcijos pabaiga /
Duomenų transliavimas per „Bluetooth“:
Iki šiol mes ką tik perdavėme informaciją į HC-05 modulio Rx buferį. Dabar mes turime nurodyti jai transliuoti duomenis eteryje naudojant šią funkciją.
// Funkcija perduoti duomenis iš RX. buferis // negaliojanti transliacija_BT () {TXREG = 13; __delay_ms (500); } // Funkcijos pabaiga //
Šioje funkcijoje mes siunčiame 13 reikšmę į TXREG registrą. Ši 13 vertė yra tik dešimtainis vežimo atitikmuo (žr. ASCII diagramą). Tada sukuriamas nedidelis vėlavimas transliuotojui pradėti.
Duomenų skaitymas iš „Bluetooth“:
Panašiai kaip UART, toliau nurodyta funkcija naudojama duomenims nuskaityti iš „Bluetooth“
// Funkcija norint gauti char iš Rx.buffer of BT // char BT_get_char (void) {if (OERR) // patikrinkite, ar nėra perkrovos klaidos {CREN = 0; CREN = 1; // Reset CREN} if (RCIF == 1) // jei vartotojas atsiuntė simbolį, grąžinkite char (ASCII reikšmę) {while (! RCIF); grįžti RCREG; } else // jei vartotojas neatsiuntė jokio pranešimo, grąžinkite 0 return 0; } // Funkcijos pabaiga /
Jei vartotojas atsiuntė duomenis, ši funkcija grąžins tuos duomenis, kuriuos galima išsaugoti kintamajame ir apdoroti. Jei vartotojas nieko neišsiuntė, funkcija grąžins nulį.
Pagrindinė funkcija:
Mes naudojome visas pirmiau paaiškintas funkcijas viduje arba pagrindinę funkciją. Mes siunčiame įvadinį pranešimą ir tada laukiame, kol vartotojas atsiųs keletą reikšmių, pagal kurias perjungsime raudoną LED lemputę, prijungtą prie RB3 kaiščio, mūsų „Perf“ plokštėje.
void main (void) {// Apimties kintamųjų deklaracijos // int get_value; // Kintamojo deklaracijos pabaiga // I / O deklaracijos // TRISB3 = 0; // I / O deklaracijos pabaiga // Initialize_Bluetooth (); // leidžia paruošti „Bluetooth“ ryšį veiksmui // Įjungus vieną kartą parodykite įvadinį pranešimą // BT_load_string („Bluetooth Initialized and Ready“); transliacija_BT (); BT_load_string ("Paspauskite 1, kad įjungtumėte LED"); transliacija_BT (); BT_load_string ("Paspauskite 0, kad išjungtumėte LED"); transliacija_BT (); // Pranešimo pabaiga // while (1) // Begalinė lop {get_value = BT_get_char (); // Perskaitykite char. gautas per BT // Jei gauname „0“ // if (get_value == '0') {RB3 = 0; BT_load_string („LED išjungtas“); transliacija_BT (); } // Jei gausime „1“ // if (get_value == '1') {RB3 = 1; BT_load_string („šviesos diodas įjungtas“); transliacija_BT ();}}}
Žemiau esančiame Kodo skyriuje patikrinkite visą programą.
Grandinės schema ir techninės įrangos sąranka:
Šio projekto grandinių jungtys yra labai paprastos, mes tiesiog turime įjungti „Bluetooth“ modulį ir prijungti Tx prie 26 -ojo PIC kaiščio, o Rx - prie 25 -ojo PIC kontakto, kaip parodyta toliau pateiktoje grandinės schemoje:
Dabar pereikime prie aparatūros. Atlikus ryšį, jis turėtų atrodyti maždaug taip.
LED valdymas naudojant „Bluetooth Mobile Application“:
Dabar paruoškime „Android“ programą. Atsisiųskite programą „ Bluetooth Terminal“ iš „App Store“ arba naudokite šią nuorodą. Kai programa bus atsisiųsta ir įdiegta, įjunkite savo PIC perf plokštę, kurią naudojame nuo pat pradžių. Maža jūsų „Bluetooth“ modulio šviesos diodo lemputė turėtų mirksėti, rodydama, kad jis įjungtas ir aktyviai ieško telefono, kad būtų galima užmegzti ryšį.
Dabar eikite į savo telefono „Bluetooth“ nustatymus ir ieškokite naujo „Bluetooth“ įrenginio, kurį turėtumėte matyti pavadinimą HC-05 arba HC-06 pagal savo modulį. Aš naudoju HC-06, todėl mano telefone rodomas toks ekranas. Tada pabandykite susieti su juo ir jis paprašys slaptažodžio. Įveskite slaptažodį kaip 1234 (kai kuriems tai gali būti 0000) ir spustelėkite Gerai, kaip parodyta žemiau.
Sėkmingai suporavus, atidarykite ką tik įdiegtą „Bluetooth“ terminalo programą. Eikite į nustatymų parinktį ir pasirinkite „Prijunkite įrenginį - apsaugokite“, kaip parodyta žemiau. Tai atidarys iškylantįjį langelį, kuriame visi susieti įrenginiai bus išvardyti taip, kaip parodyta žemiau. Pasirinkite modulį HC-05 arba HC-06.
Užmezgus ryšį, iki šiol mirksėjusi „Bluetooth“ modulio lemputė turi tapti nuolatinė, kad būtų galima parodyti, jog jis sėkmingai prisijungė prie jūsų mobiliojo telefono. Mes turėtume gauti įvadinį pranešimą iš savo programos, kaip parodyta žemiau.
Dabar paspauskite „1“, kad įjungtumėte šviesos diodą, ir paspauskite „0“, kad išjungtumėte šviesą. Visas darbas bus rodomas vaizdo įraše. Jūsų mobiliojo telefono ekranas atrodys maždaug taip, kaip parodyta žemiau.
Tai yra vaikinai, mes sužinojome, kaip susieti „Bluetooth“ modulį su mūsų PIC mikrovaldikliu, dabar naudodami tai galime išbandyti belaidžius projektus. Yra daugybė projektų, naudojančių „Bluetooth“. Galite juos išbandyti arba sugalvoti savo idėją ir pasidalinti komentarų skiltyje. Taip pat patikrinkite mūsų ankstesnį projektą naudodami „Bluetooth“ terminalo programą ir „HC-05“, pvz., „Smart Phone“ valdomą namų automatizavimą naudojant „Arduino“ ir „Smart Phone“ valdomą skaitmeninį kodinį užraktą naudojant „Arduino“.
Tikiuosi, ši pamoka jums padėjo! Jei kur nors užstrigote, maloniai naudokitės komentarų skiltimi.