- Krav:
- Programmering av PIC-mikrokontroller for Bluetooth-kommunikasjon:
- Kretsdiagram og maskinvareoppsett:
- Kontrollerer LED ved hjelp av Bluetooth-mobilapplikasjon:
I denne opplæringen vil vi lære å lage PIC-prosjekter trådløst ved å grensesnitt en Bluetooth-modul (HC-06). I vår forrige opplæring har vi allerede lært hvordan du bruker USART-modulen i vår PIC-mikrokontroller og etablert kommunikasjon mellom PIC og datamaskin. Hvis du er en absolutt nybegynner, kan du se her for alle PIC-opplæringene, der vi har startet helt fra bunnen av, som å lære MPLAB og XC8, grensesnitt LED, LCD, ved hjelp av tidtakere, ADC, PWM etc.
Her har vi brukt den populære Bluetooth-modulen HC-06. Ved hjelp av denne modulen kan vi motta og sende informasjon trådløst fra PIC MCU til en mobilapplikasjon eller en datamaskin. Kommunikasjon mellom PIC og HC-06 opprettes ved hjelp av USART-modulen i PIC Microcontroller. Du kan også bruke HC-05. Vi bruker igjen den samme asynkrone 8-bit-modusen, men denne gangen vil vi endre koden vår litt slik at den fungerer med Bluetooth-modulen. Derfor er å lære UART-veiledning på forhånd en ekstra fordel for dette prosjektet.
I denne opplæringen vil vi slå på en LED ved å sende på eller av kommando fra smarttelefonen vår. Vi vil bruke en Android-applikasjon kalt Bluetooth Terminal som kan sende og motta data via Bluetooth. Hvis vi sender en røye '1' fra appen, vil lyset slås PÅ på PIC-kortet, og vi vil motta en bekreftelse på telefonen om at lyset er slått på. På samme måte kan vi sende '0' fra telefonen for å slå den av. På denne måten kan vi kontrollere LED-lyset på PIC-kortet vårt, i likhet med UART-opplæringen, men nå trådløst. Komplett program og detaljert video er gitt på slutten av denne veiledningen.
Det grunnleggende blokkdiagrammet for oppsettet er vist nedenfor.
Krav:
Maskinvare:
- PIC16F877A Perf Board
- HC-05 eller HC-06 Bluetooth-modul
- Datamaskin (for programmering)
- Mobiltelefon
- PICkit 3 programmerer
Programvare:
- MPLABX
- Bluetooth-terminal (mobilapplikasjon)
Bluetooth-modul HC-06:
Bluetooth kan fungere i følgende to moduser:
- Kommandomodus
- Driftsmodus
I kommandomodus vil vi være i stand til å konfigurere Bluetooth-egenskapene som navnet på Bluetooth-signalet, passordet, driftsoverføringshastigheten osv. Driftsmodusen er den der vi vil kunne sende og motta data mellom PIC Microcontroller og Bluetooth-modulen. Derfor vil vi i denne opplæringen bare leke med driftsmodus. Kommandomodus vil bli overlatt til standardinnstillingene. Enhetsnavnet vil være HC-05 (jeg bruker HC-06) og passordet vil være 0000 eller 1234, og viktigst av alt er standard baudrate for alle Bluetooth-moduler 9600.
Modulen fungerer på 5V forsyning, og signalpinnene fungerer på 3,3V, og det er derfor en 3,3V regulator i selve modulen. Derfor trenger vi ikke bekymre oss for det. Av de seks pinnene vil bare fire brukes i driftsmodus. Pin-tilkoblingstabellen er vist nedenfor
S. nr |
Pin på HC-05 / HC-06 |
Pin-navn på MCU |
Pin-nummer i PIC |
1 |
Vcc |
Vdd |
31 st tapp |
2 |
Vcc |
Gnd |
32 nd tapp |
3 |
Tx |
RC6 / Tx / CK |
25 th tapp |
4 |
Rx |
RC7 / Rx / DT |
26 th tapp |
5 |
Stat |
NC |
NC |
6 |
EN (Aktiver) |
NC |
NC |
Sjekk våre andre prosjekter for å lære mer om Bluetooth-modul HC-05 med andre mikrokontrollere:
- Bluetooth-kontrollert lekebil ved hjelp av Arduino
- Bluetooth-kontrollert hjemmeautomatiseringssystem ved bruk av 8051
- Stemmestyrte lys med Raspberry Pi
- Smarttelefonstyrt FM-radio ved hjelp av Arduino og Processing
- Mobiltelefonstyrt robotbil ved hjelp av G-sensor og Arduino
Programmering av PIC-mikrokontroller for Bluetooth-kommunikasjon:
Som alle moduler (ADC, Timer, PWM), bør vi også initialisere Bluetooth-modulen. Initialiseringen vil være lik UART-initialisering, men vi må gjøre noen endringer for at Bluetooth skal fungere feilfritt med vår PIC16F877A MCU. La oss definere konfigurasjonsbitene og starte med Bluetooth-initialiseringsfunksjonen.
Initialiserer Bluetooth:
Nesten alle Bluetooth-modulene i markedet fungerer med en overføringshastighet på 9600, det er veldig viktig å stille inn baudfrekvensen din som den for Bluetooth-modulene som opererer overføringshastighet. Her setter vi SPBRG = 129 siden vi opererer med 20 MHz klokkefrekvens med 9600 som baudrate. Derfor vil initialiseringen ovenfor fungere bare for Bluetooth-moduler som fungerer med 9600 baudrate. Det er også obligatorisk å ha høyhastighets baud rate bit BRGH aktivert. Dette vil hjelpe til med å sette en nøyaktig baudrate.
// ****** Initialiser Bluetooth ved hjelp av USART ******** // void Initialize_Bluetooth () {// Still pinnene til RX og TX // TRISC6 = 1; TRISC7 = 1; // Still overføringshastigheten ved hjelp av oppslagstabellen i databladet (pg114) // BRGH = 1; // Bruk alltid høyhastighets baudrate med Bluetooth, ellers fungerer det ikke SPBRG = 129; // Slå på Asyc. Seriell port // SYNC = 0; SPEN = 1; // Still 8-bits mottak og overføring RX9 = 0; TX9 = 0; // Aktiver overføring og mottak // TXEN = 1; CREN = 1; // Aktiver global og ph. avbryter // GIE = 1; PEIE = 1; // Aktiver avbrudd for Tx. og Rx.// RCIE = 1; TXIE = 1; } // ___________ BT initialisert _____________ //
Hvis du har en BT-modul som fungerer med en annen baudrate, kan du se oppslagstabellen nedenfor for å finne ut verdien din for SPBRG.
Laster data til Bluetooth:
Når funksjonen er initialisert har vi tre funksjoner i vårt program for å sende og motta data fra Bluetooth. I motsetning til UART har vi få ting å vurdere her før vi kan overføre eller motta data. Bluetooth-modulen har en overførings- og mottaksbuffer i seg, dataene som sendes til den blir lagret i Tx-bufferen. Disse dataene vil ikke kringkastes (sendes i luften) med mindre vognretur sendes til modulen. Derfor, for å overføre data, må vi laste Rx-bufferen til BT og deretter kringkaste den ved hjelp av vognretur.
Ovennevnte arbeider kan enkelt oppnås ved å bruke følgende funksjoner. Funksjonen nedenfor kan brukes når vi bare må laste inn ett tegn i Rx-bufferen. Vi laster inn dataene i TXREG-registeret og venter til de blir behandlet ved å sjekke flagget TXIF og TRMT ved å bruke mens sløyfer.
// Funksjon for å laste Bluetooth Rx. buffer med ett tegn.// ugyldig BT_load_char (char byte) {TXREG = byte; mens (! TXIF); mens (! TRMT); } // Funksjonsslutt //
Funksjonen nedenfor brukes til å laste en streng inn i Rx-bufferen til Bluetooth-modulen. Strengen deles i tegn, og hvert tegn sendes til BT_load_char () -funksjonen.
// Funksjon for å laste Bluetooth Rx. buffer med streng // ugyldig BT_load_string (char * string) {while (* string) BT_load_char (* string ++); } // Funksjonsslutt /
Kringkasting av data via Bluetooth:
Til nå har vi nettopp overført informasjon til Rx-bufferen til HC-05-modulen. Nå må vi instruere den om å kringkaste dataene over luft ved å bruke denne funksjonen.
// Funksjon for å kringkaste data fra RX. buffer // ugyldig kringkasting_BT () {TXREG = 13; __forsink_ms (500); } // Funksjonsslutt //
I denne funksjonen sender vi en verdi 13 inn i TXREG-registeret. Denne verdien 13 er ikke noe annet enn desimalekvivalenten for transport (se ASCII-diagram). Da opprettes en liten forsinkelse for at kringkasteren skal starte.
Lese data fra Bluetooth:
I likhet med UART brukes funksjonen nedenfor til å lese data fra Bluetooth
// Funksjon for å få en røye fra Rx.buffer av BT // char BT_get_char (ugyldig) {if (OERR) // sjekk for feilkjøring {CREN = 0; CREN = 1; // Tilbakestill CREN} hvis (RCIF == 1) // hvis brukeren har sendt en røye, returner røya (ASCII-verdi) {mens (! RCIF); returnere RCREG; } annet // hvis brukeren ikke har sendt noen melding, returner 0 retur 0; } // Funksjonsslutt /
Hvis brukeren har sendt data, vil denne funksjonen returnere bestemte data som kan lagres i en variabel og behandles. Hvis brukeren ikke har sendt noe, vil funksjonen gi null.
Hovedfunksjon:
Vi har brukt alle de ovennevnte forklarte funksjonene i eller hovedfunksjonen. Vi sender en innledende melding og venter på at brukeren skal sende noen verdier basert på hvilke vi bytter RED-ledet lys koblet til RB3-pinnen på Perf-kortet.
void main (void) {// Scope variable declarations // int get_value; // Slutt på variabelerklæring // // I / O-erklæringer // TRISB3 = 0; // Slutt på I / O-erklæring // Initialize_Bluetooth (); // kan gjøre vår Bluetooth klar for handling // Vis noen innledende meldinger en gang på oppstart // BT_load_string ("Bluetooth initialisert og klar"); kringkasting_BT (); BT_load_string ("Trykk 1 for å slå PÅ LED"); kringkasting_BT (); BT_load_string ("Trykk 0 for å slå AV LED"); kringkasting_BT (); // Meldingens slutt // mens (1) // Det uendelige lopet {get_value = BT_get_char (); // Les røya. mottatt via BT // Hvis vi mottar en '0' // if (get_value == '0') {RB3 = 0; BT_load_string ("LED slått AV"); kringkasting_BT (); } // Hvis vi mottar en '1' // if (get_value == '1') {RB3 = 1; BT_load_string ("LED slått PÅ"); kringkasting_BT ();}}}
Sjekk hele programmet i kodeseksjonen nedenfor.
Kretsdiagram og maskinvareoppsett:
Kretsforbindelser for dette prosjektet er meget enkel, har vi bare må kraften opp Bluetooth-modulen og koble Tx til 26 th pin av PIC og Rx til 25 th tapp av PIC, som vist i kretsdiagrammet nedenfor:
La oss nå gå videre til maskinvaren. Når forbindelsen er ferdig, bør den se ut som dette.
Kontrollerer LED ved hjelp av Bluetooth-mobilapplikasjon:
La oss nå gjøre vår Android-applikasjon klar. Last ned appen Bluetooth Terminal fra App Store, eller bruk denne lenken. Når applikasjonen er lastet ned og installert, slår du på PIC perf-kortet som vi bruker siden begynnelsen. Det lille LED-lyset på Bluetooth-modulen din skal blinke for å indikere at den er slått på og leter aktivt etter en telefon for å opprette en forbindelse.
Gå inn i Bluetooth-innstillingene på telefonen din og søk etter en ny Bluetooth-enhet. Du bør kunne se navnet HC-05 eller HC-06 basert på modulen din. Jeg bruker HC-06, derfor viser telefonen min følgende skjerm. Så prøv å parre med det, og det vil be om passord. Skriv inn passordet som 1234 (for noen kan det være 0000) og klikk OK som vist nedenfor.
Etter at paringen er vellykket, åpner du Bluetooth Terminal-applikasjonen som vi nettopp har installert. Gå inn på innstillingsalternativet og velg "Koble til en enhet - Sikker" som vist nedenfor. Dette åpner en popup-rute der alle våre sammenkoblede enheter blir oppført som vist nedenfor. Velg HC-05 eller HC-06-modulen.
Når forbindelsen er opprettet, må lyset på Bluetooth-modulen som hittil blinket ha blitt konstant for å indikere at den har koblet seg til mobilen din. Og vi bør få innledende meldinger fra programmet vårt som vist nedenfor.
Trykk nå på '1' for å slå på LED-lyset og trykk på '0' for å slå av lyset. Fullstendig arbeid vil bli vist i videoen. Mobilskjermen din ser ut som dette vist nedenfor.
Så det er det gutta, vi har lært hvordan man kobler Bluetooth-modulen til vår PIC-mikrokontroller, nå ved hjelp av dette kan vi prøve trådløse prosjekter. Det er mange prosjekter som bruker Bluetooth, du kan prøve dem eller komme med din egen idé og dele dem i kommentarseksjonen. Sjekk også vårt forrige prosjekt med Bluetooth-terminalapp og HC-05 som Smart Phone Controlled Home Automation ved hjelp av Arduino og Smart Phone Controlled Digital Code Lock ved hjelp av Arduino.
Håper, denne opplæringen hjalp deg! Hvis du ble sittende fast et sted, vennligst bruk kommentarseksjonen.