- Krav:
- Programmering af PIC-mikrocontroller til Bluetooth-kommunikation:
- Kredsløbsdiagram og hardwareopsætning:
- Styring af LED ved hjælp af Bluetooth-mobilapplikation:
I denne vejledning lærer vi, hvordan man laver PIC-projekter trådløst ved at interfacere et Bluetooth-modul (HC-06). I vores tidligere tutorial har vi allerede lært, hvordan man bruger USART-modul i vores PIC-mikrocontroller og etableret kommunikation mellem PIC og computer. Hvis du er en absolut nybegynder, så tjek her for vores alle PIC-tutorials, hvor vi er startet helt fra bunden, som at lære MPLAB og XC8, interface LED, LCD, ved hjælp af timere, ADC, PWM osv.
Her har vi brugt det populære Bluetooth-modul HC-06. Ved hjælp af dette modul kan vi modtage og sende information trådløst fra vores PIC MCU til en mobilapplikation eller en computer. Kommunikationen mellem PIC og HC-06 etableres ved hjælp af USART-modulet, der findes i PIC-mikrocontrolleren. Du kan også bruge HC-05. Vi arbejder igen på den samme asynkrone 8-bit-tilstand, men denne gang ændrer vi vores kode lidt, så den fungerer med Bluetooth-modulet. Derfor er det en ekstra fordel at lære UART-tutorial på forhånd.
I denne vejledning skifter vi en LED ved at sende kommandoen til eller fra fra vores smartphone. Vi bruger en Android-applikation kaldet Bluetooth Terminal, som kan sende og modtage data via Bluetooth. Hvis vi sender en char '1' fra appen, tændes lyset på PIC-kortet, og vi får en bekræftelse tilbage til telefonen om, at lyset er tændt. På samme måde kan vi sende '0' fra telefonen for at slukke for den. På denne måde kan vi styre LED-lyset på vores PIC-kort svarende til UART-vejledningen, men nu trådløst. Komplet program og den detaljerede video er givet i slutningen af denne vejledning.
Det grundlæggende blokdiagram for opsætningen er vist nedenfor.
Krav:
Hardware:
- PIC16F877A Perf Board
- HC-05 eller HC-06 Bluetooth-modul
- Computer (til programmering)
- Mobiltelefon
- PICkit 3 programmør
Software:
- MPLABX
- Bluetooth-terminal (mobil applikation)
Bluetooth-modul HC-06:
Bluetooth kan fungere i følgende to tilstande:
- Kommandotilstand
- Driftstilstand
I kommandotilstand vil vi være i stand til at konfigurere Bluetooth-egenskaberne som navnet på Bluetooth-signalet, dets adgangskode, driftsoverførselshastighed osv. Driftstilstanden er den, hvor vi vil være i stand til at sende og modtage data mellem PIC Microcontroller og Bluetooth-modulet. Derfor vil vi i denne vejledning kun lege med driftstilstanden. Kommandotilstanden overlades til standardindstillingerne. Enhedsnavnet er HC-05 (jeg bruger HC-06), og adgangskoden er 0000 eller 1234, og vigtigst af alt er standard baudhastighed for alle Bluetooth-moduler 9600.
Modulet fungerer på 5V forsyning, og signalstifterne fungerer på 3,3V, hvorfor der er en 3.3V regulator til stede i selve modulet. Derfor behøver vi ikke bekymre os om det. Ud af de seks ben bruges kun fire i driftstilstand. Stifttilslutningstabellen er vist nedenfor
S. nr |
Pin på HC-05 / HC-06 |
Pin-navn på MCU |
Pin nummer i PIC |
1 |
Vcc |
Vdd |
31 st pin |
2 |
Vcc |
Gnd |
32 nd pin |
3 |
Tx |
RC6 / Tx / CK |
25 th pin |
4 |
Rx |
RC7 / Rx / DT |
26 th pin |
5 |
Stat |
NC |
NC |
6 |
EN (Aktiver) |
NC |
NC |
Se vores andre projekter for at lære mere om Bluetooth-modul HC-05 med andre mikrocontrollere:
- Bluetooth-styret legetøjsbil ved hjælp af Arduino
- Bluetooth-styret hjemmeautomatiseringssystem ved hjælp af 8051
- Stemmestyrede lys ved hjælp af Raspberry Pi
- Smart telefonstyret FM-radio ved hjælp af Arduino og Processing
- Mobiltelefonstyret robotbil ved hjælp af G-sensor og Arduino
Programmering af PIC-mikrocontroller til Bluetooth-kommunikation:
Som alle moduler (ADC, Timer, PWM) skal vi også initialisere vores Bluetooth-modul. Initialiseringen svarer til UART-initialisering, men vi er nødt til at foretage nogle ændringer for at Bluetooth fungerer fejlfrit med vores PIC16F877A MCU. Lad os definere konfigurationsbitene og starte med Bluetooth-initialiseringsfunktionen.
Initialisering af Bluetooth:
Næsten alle Bluetooth-moduler på markedet fungerer med en baudhastighed på 9600, det er meget vigtigt at indstille din baudhastighed som den for Bluetooth-moduler, der betjener baudhastighed, her indstiller vi SPBRG = 129, da vi kører med 20 MHz urfrekvens med 9600 som baudrate. Derfor fungerer ovenstående initialisering kun for Bluetooth-moduler, der fungerer ved 9600 baudhastighed. Det er også obligatorisk at have højhastigheds baudrate bit BRGH aktiveret. Dette hjælper med at indstille en nøjagtig baudrate.
// ****** Initialiser Bluetooth ved hjælp af USART ******** // ugyldigt Initialize_Bluetooth () {// Indstil stifterne til RX og TX // TRISC6 = 1; TRISC7 = 1; // Indstil baudhastigheden ved hjælp af opslagstabellen i databladet (pg114) // BRGH = 1; // Brug altid højhastigheds baudrate med Bluetooth ellers fungerer det ikke SPBRG = 129; // Tænd for Asyc. Seriel port // SYNC = 0; SPEN = 1; // Indstil 8-bit modtagelse og transmission RX9 = 0; TX9 = 0; // Aktiver transmission og modtagelse // TXEN = 1; CREN = 1; // Aktiver global og ph. afbryder // GIE = 1; PEIE = 1; // Aktivér afbrydelser for Tx. og Rx.// RCIE = 1; TXIE = 1; } // ___________ BT initialiseret _____________ //
Hvis du har et BT-modul, der fungerer med en anden baudrate, kan du se opslagstabellen nedenfor for at finde ud af din værdi for SPBRG.
Indlæser data i Bluetooth:
Når funktionen er initialiseret, har vi tre funktioner i vores program til at sende og modtage data fra Bluetooth. I modsætning til UART har vi få ting at overveje her, før vi kan sende eller modtage data. Bluetooth-modulet har en sende- og modtagebuffer inde, de data, der sendes til det, gemmes i Tx-bufferen. Disse data udsendes ikke (sendes i luften), medmindre der sendes en vognretur til modulet. Derfor er vi nødt til at indlæse Rx-bufferen i BT for at transmittere data og derefter udsende den ved hjælp af vognretur.
Ovenstående arbejde kan let opnås ved hjælp af følgende funktioner. Nedenstående funktion kan bruges, når vi kun skal indlæse et tegn i Rx-bufferen. Vi indlæser dataene i TXREG-registret og venter, indtil de behandles ved at markere TXIF og TRMT-flag ved hjælp af mens sløjfer.
// Funktion til at indlæse Bluetooth Rx. buffer med et tegn.// ugyldigt BT_load_char (char byte) {TXREG = byte; mens (! TXIF); mens (! TRMT); } // Funktionens afslutning //
Nedenstående funktion bruges til at indlæse en streng i Bluetooth-modulets Rx-buffer. Strengen er opdelt i tegn, og hvert tegn sendes til funktionen BT_load_char () .
// Funktion til at indlæse Bluetooth Rx. buffer med streng // ugyldig BT_load_string (char * streng) {mens (* streng) BT_load_char (* streng ++); } // Funktionens afslutning /
Broadcasting af data via Bluetooth:
Indtil nu har vi netop overført information til Rx-bufferen i HC-05-modulet. Nu skal vi instruere det om at udsende dataene over luft ved hjælp af denne funktion.
// Funktion til transmission af data fra RX. buffer // ugyldig broadcast_BT () {TXREG = 13; __forsink_ms (500); } // Funktionens afslutning //
I denne funktion sender vi en værdi 13 til TXREG-registeret. Denne værdi 13 er intet andet end decimalækvivalenten for transport (se ASCII-diagram). Derefter oprettes en lille forsinkelse, for at tv-selskabet kan starte.
Læsning af data fra Bluetooth:
I lighed med UART bruges nedenstående funktion til at læse data fra Bluetooth
// Funktion til at hente en char fra Rx.buffer af BT // char BT_get_char (ugyldig) {if (OERR) // check for over run error {CREN = 0; CREN = 1; // Nulstil CREN} hvis (RCIF == 1) // hvis brugeren har sendt en char returner char (ASCII-værdi) {mens (! RCIF); returnere RCREG; } ellers // hvis brugeren ikke har sendt nogen besked returnere 0 returnere 0; } // Funktionens afslutning /
Hvis brugeren har sendt data, returnerer denne funktion de bestemte data, som kan gemmes i en variabel og behandles. Hvis brugeren ikke har sendt noget, returnerer funktionen nul.
Hovedfunktion:
Vi har brugt alle de ovennævnte forklarede funktioner inden i eller hovedfunktion. Vi sender en introduktionsmeddelelse og venter derefter på, at brugeren sender nogle værdier baseret på hvilke vi skifter det RØDE LED-lys, der er tilsluttet RB3-stiften på vores Perf-kort.
void main (void) {// Scope variable declarations // int get_value; // Slut på variabelerklæring // // I / O-erklæringer // TRISB3 = 0; // Slut på I / O-erklæring // Initialize_Bluetooth (); // lad os gøre vores bluetooth klar til handling // Vis nogle indledende beskeder en gang ved opstart // BT_load_string ("Bluetooth initialiseret og klar"); broadcast_BT (); BT_load_string ("Tryk 1 for at tænde LED"); broadcast_BT (); BT_load_string ("Tryk på 0 for at slukke for LED"); broadcast_BT (); // Slut på besked // while (1) // The infinite lop {get_value = BT_get_char (); // Læs char. modtaget via BT // Hvis vi modtager en '0' // hvis (get_value == '0') {RB3 = 0; BT_load_string ("LED slukket"); broadcast_BT (); } // Hvis vi modtager en '1' // if (get_value == '1') {RB3 = 1; BT_load_string ("LED tændt"); broadcast_BT ();}}}
Tjek det fulde program i kodesektionen nedenfor.
Kredsløbsdiagram og hardwareopsætning:
Circuit forbindelser for dette projekt er meget enkel, vi simpelthen nødt til magten op Bluetooth-modulet, og tilslut Tx til 26 th pin af PIC og Rx til 25 th pin af PIC som vist på diagram nedenfor:
Lad os nu gå videre til hardware. Når forbindelsen er færdig, skal den se sådan ud.
Styring af LED ved hjælp af Bluetooth-mobilapplikation:
Lad os nu gøre vores Android-applikation klar. Download applikationen Bluetooth Terminal fra App Store, eller brug dette link. Når applikationen er downloadet og installeret, skal du tænde dit PIC perf-kort, som vi bruger siden starten. Det lille LED-lys på dit Bluetooth-modul skal blinke for at indikere, at det er tændt og leder aktivt efter en telefon til at oprette en forbindelse.
Gå nu ind på Bluetooth-indstillingerne på din telefon, og søg efter en ny Bluetooth-enhed, du skal kunne se navnet HC-05 eller HC-06 baseret på dit modul. Jeg bruger HC-06, hvorfor min telefon viser følgende skærmbillede. Prøv derefter at parre med det, og det beder om en adgangskode. Indtast adgangskoden som 1234 (for nogle kan det være 0000), og klik på OK som vist nedenfor.
Når parringen er vellykket, skal du åbne Bluetooth Terminal-applikationen, som vi lige har installeret. Gå ind i indstillingsmuligheden, og vælg "Tilslut en enhed - Sikker" som vist nedenfor. Dette åbner et pop-op-felt, hvor alle vores parrede enheder vises som vist nedenfor. Vælg HC-05 eller HC-06 modulet.
Når forbindelsen er oprettet, skal lyset på Bluetooth-modulet, der hidtil blinkede, være blevet konstant for at indikere, at det har oprettet forbindelse til din mobil. Og vi skulle få den indledende besked fra vores program som vist nedenfor.
Tryk nu på '1' for at tænde LED-lyset og tryk på '0' for at slukke for lyset. Det komplette arbejde vises i videoen. Din mobilskærm ser sådan ud som vist nedenfor.
Så det er det fyre, vi har lært, hvordan man bruger Bluetooth-modul til vores PIC-mikrocontroller, nu ved hjælp af dette kan vi prøve trådløse projekter. Der er mange projekter, der bruger Bluetooth, du kan prøve dem eller komme med din egen idé og dele dem i kommentarsektionen. Tjek også vores tidligere projekt med Bluetooth-terminalapp og HC-05 som Smart Phone Controlled Home Automation ved hjælp af Arduino og Smart Phone Controlled Digital Code Lock ved hjælp af Arduino.
Håber, denne tutorial hjalp dig! Hvis du sidder fast et eller andet sted, skal du venligst bruge kommentarsektionen.