- Krav:
- Programmering av PIC-mikrokontroller för Bluetooth-kommunikation:
- Kretsschema och hårdvaruinstallation:
- Kontrollera LED med hjälp av Bluetooth Mobile Application:
I den här handledningen lär vi oss hur man gör PIC-projekt trådlösa genom att koppla ihop en Bluetooth-modul (HC-06). I vår tidigare handledning har vi redan lärt oss hur man använder USART-modulen i vår PIC-mikrokontroller och etablerad kommunikation mellan PIC och dator. Om du är en absolut nybörjare, kolla här för alla våra PIC-självstudier, där vi har börjat från grunden, som att lära oss MPLAB och XC8, koppla ihop LED, LCD, använda Timers, ADC, PWM etc.
Här har vi använt den populära Bluetooth-modulen HC-06. Med denna modul kan vi ta emot och skicka information trådlöst från vår PIC MCU till en mobilapplikation eller en dator. Kommunikation mellan PIC och HC-06 upprättas med USART-modulen som finns i PIC Microcontroller. Du kan också använda HC-05. Vi arbetar igen på samma asynkrona 8-bitars läge, men den här gången kommer vi att ändra vår kod lite så att den fungerar med Bluetooth-modulen. Därför är att lära sig UART-handledning i förväg en extra fördel för detta projekt.
I denna handledning byter vi en LED genom att skicka på eller av kommando från vår smarttelefon. Vi kommer att använda en Android-applikation som heter Bluetooth Terminal som kan skicka och ta emot data via Bluetooth. Om vi skickar ett "1" från appen tänds lampan på PIC-kortet och vi får tillbaka en bekräftelse på telefonen att lampan har tänts. På samma sätt kan vi skicka '0' från telefonen för att stänga av den. På det här sättet kan vi styra LED-lampan på vårt PIC-kort, liknande UART-självstudien men nu trådlöst. Komplett program och detaljerad video ges i slutet av denna handledning.
Det grundläggande blockdiagrammet för installationen visas nedan.
Krav:
Hårdvara:
- PIC16F877A Perf Board
- HC-05 eller HC-06 Bluetooth-modul
- Dator (för programmering)
- Mobiltelefon
- PICkit 3 Programmerare
Programvara:
- MPLABX
- Bluetooth-terminal (mobilapplikation)
Bluetooth-modul HC-06:
Bluetooth kan fungera i följande två lägen:
- Kommandoläge
- Driftläge
I kommandoläge kommer vi att kunna konfigurera Bluetooth-egenskaperna som namnet på Bluetooth-signalen, dess lösenord, driftsöverföringshastighet etc. Driftläget är det där vi kommer att kunna skicka och ta emot data mellan PIC Microcontroller och Bluetooth-modulen. Därför kommer vi i denna handledning att bara leka med driftläget. Kommandoläget lämnas till standardinställningarna. Enhetsnamnet kommer att vara HC-05 (jag använder HC-06) och lösenordet är 0000 eller 1234 och viktigast av allt är standard baudhastighet för alla Bluetooth-moduler 9600.
Modulen fungerar på 5V-matning och signalstiftet fungerar på 3,3V, varför en 3,3V-regulator finns i själva modulen. Därför behöver vi inte oroa oss för det. Av de sex stiften kommer endast fyra att användas i driftläge. Stiftanslutningstabellen visas nedan
S. nr |
Stift på HC-05 / HC-06 |
Fäst namn på MCU |
Pin-nummer i PIC |
1 |
Vcc |
Vdd |
31 st stift |
2 |
Vcc |
Gnd |
32: e stift |
3 |
Tx |
RC6 / Tx / CK |
25: e stiftet |
4 |
Rx |
RC7 / Rx / DT |
26: e stiftet |
5 |
stat |
NC |
NC |
6 |
SV (Aktivera) |
NC |
NC |
Kolla in våra andra projekt för att lära dig mer om Bluetooth-modul HC-05 med andra mikrokontroller:
- Bluetooth-kontrollerad leksaksbil med Arduino
- Bluetooth-kontrollerat hemautomationssystem med 8051
- Röststyrda lampor med Raspberry Pi
- Smart telefonstyrd FM-radio med Arduino och Processing
- Mobiltelefonstyrd robotbil med G-sensor och Arduino
Programmering av PIC-mikrokontroller för Bluetooth-kommunikation:
Som alla moduler (ADC, Timer, PWM) bör vi också initiera vår Bluetooth-modul. Initieringen kommer att likna UART-initialiseringen men vi måste göra några ändringar för att Bluetooth ska fungera felfritt med vår PIC16F877A MCU. Låt oss definiera konfigurationsbitarna och börja med Bluetooth-initialiseringsfunktionen.
Initierar Bluetooth:
Nästan alla Bluetooth-moduler på marknaden fungerar med en baudhastighet på 9600, det är mycket viktigt att ställa in din baudhastighet som den för Bluetooth-moduler som arbetar med baudhastighet, här ställer vi in SPBRG = 129 eftersom vi arbetar med 20 MHz klockfrekvens med 9600 som överföringshastighet. Därför fungerar ovanstående initialisering endast för Bluetooth-moduler som arbetar med 9600 baudhastighet. Det är också obligatoriskt att ha den snabba överföringshastighetsbiten BRGH aktiverad. Detta hjälper till att ställa in en exakt baudhastighet.
// ****** Initiera Bluetooth med USART ******** // void Initialize_Bluetooth () {// Ställ in stiften på RX och TX // TRISC6 = 1; TRISC7 = 1; // Ställ in baudhastigheten med hjälp av uppslagstabellen i databladet (pg114) // BRGH = 1; // Använd alltid hög hastighets baudfrekvens med Bluetooth, annars fungerar det inte SPBRG = 129; // Sätt på Asyc. Seriell port // SYNC = 0; SPEN = 1; // Ställ in 8-bitars mottagning och överföring RX9 = 0; TX9 = 0; // Aktivera sändning och mottagning // TXEN = 1; CREN = 1; // Aktivera global och ph. avbryter // GIE = 1; PEIE = 1; // Aktivera avbrott för Tx. och Rx.// RCIE = 1; TXIE = 1; } // ___________ BT initialiserad _____________ //
Om du har en BT-modul som fungerar med en annan baudhastighet, kan du hänvisa till uppslagstabellen nedan för att ta reda på ditt värde för SPBRG.
Ladda data till Bluetooth:
När funktionen har initierats har vi tre funktioner i vårt program för att skicka och ta emot data från Bluetooth. Till skillnad från UART har vi få saker att tänka på här innan vi kan överföra eller ta emot data. Bluetooth-modulen har en sändnings- och mottagningsbuffert inuti, data som skickas till den lagras i Tx-bufferten. Dessa data kommer inte att sändas (skickas i luften) om inte en transportretur skickas till modulen. Därför måste vi ladda Rx-bufferten för BT för att överföra data och sedan sända den med vagnretur.
Ovanstående bearbetning kan enkelt uppnås med följande funktioner. Funktionen nedan kan användas när vi bara behöver ladda ett tecken i Rx-bufferten. Vi laddar in data i TXREG-registret och väntar tills det bearbetas genom att markera TXIF och TRMT-flaggan med hjälp av samtidigt loopar.
// Funktion för att ladda Bluetooth Rx. buffert med en karaktär.// tomrum BT_load_char (char byte) {TXREG = byte; medan (! TXIF); medan (! TRMT); } // Slut på funktion //
Nedanstående funktion används för att ladda en sträng i Bluetooth-modulens Rx-buffert. Strängen delas upp i tecken och varje tecken skickas till BT_load_char () -funktionen.
// Funktion för att ladda Bluetooth Rx. buffert med sträng // void BT_load_string (char * string) {while (* string) BT_load_char (* string ++); } // Slut på funktion /
Sända data via Bluetooth:
Hittills har vi precis överfört information till Rx-bufferten i HC-05-modulen. Nu måste vi instruera den att sända data över luft med hjälp av denna funktion.
// Funktion för att sända data från RX. buffert // ogiltig broadcast_BT () {TXREG = 13; __fördröja_ms (500); } // Slut på funktion //
I den här funktionen skickar vi ett värde 13 till TXREG-registret. Detta värde 13 är inget annat än decimalekvivalenten för transport (se ASCII-diagram). Sedan skapas en liten fördröjning för att sändaren ska börja.
Läser data från Bluetooth:
I likhet med UART används nedanstående funktion för att läsa data från Bluetooth
// Funktion för att få en char från Rx.buffer av BT // char BT_get_char (ogiltig) {if (OERR) // kontrollera om överkörningsfel {CREN = 0; CREN = 1; // Återställ CREN} om (RCIF == 1) // om användaren har skickat en char returnera char (ASCII-värde) {medan (! RCIF); returnera RCREG; } annat // om användaren inte har skickat något meddelande returnerar 0 returnerar 0; } // Slut på funktion /
Om användaren har skickat en data returnerar den här funktionen den specifika informationen som kan sparas i en variabel och bearbetas. Om användaren inte har skickat något kommer funktionen att returnera noll.
Huvudfunktion:
Vi har använt alla ovanstående förklarade funktioner inuti eller huvudfunktionen. Vi skickar ett introduktionsmeddelande och väntar sedan på att användaren ska skicka några värden baserat på vilka vi växlar RÖD led-lampa ansluten till RB3-stiftet på vårt Perf-kort.
void main (void) {// Scope variable declarations // int get_value; // Slut på variabeldeklaration // // I / O-deklarationer // TRISB3 = 0; // Slut på I / O-deklaration // Initialisera_Bluetooth (); // kan göra vår Bluetooth redo för handling // Visa lite inledande meddelande en gång vid start // BT_load_string ("Bluetooth Initialized and Ready"); broadcast_BT (); BT_load_string ("Tryck 1 för att sätta PÅ LED"); broadcast_BT (); BT_load_string ("Tryck på 0 för att stänga av LED-lampan"); broadcast_BT (); // Slut på meddelande // medan (1) // Det oändliga lop {get_value = BT_get_char (); // Läs röding. mottagen via BT // Om vi får ett '0' // if (get_value == '0') {RB3 = 0; BT_load_string ("LED avstängd"); broadcast_BT (); } // Om vi får ett '1' // if (get_value == '1') {RB3 = 1; BT_load_string ("LED lyser PÅ"); broadcast_BT ();}}}
Kontrollera hela programmet i kodavsnittet nedan.
Kretsschema och hårdvaruinstallation:
Kretsanslutningar för det här projektet är väldigt enkla, vi måste helt enkelt slå på Bluetooth-modulen och ansluta Tx till den 26: e stiftet på PIC och Rx till den 25: e stiftet i PIC som visas i kretsschemat nedan:
Låt oss nu gå vidare till hårdvaran. När anslutningen är klar ska den se ut så här.
Kontrollera LED med hjälp av Bluetooth Mobile Application:
Låt oss nu göra vår Android-applikation redo. Ladda ner appen Bluetooth Terminal från App Store eller använd den här länken. När applikationen har laddats ner och installerat, slå på PIC perf-kortet som vi använder sedan början. Den lilla LED-lampan på din Bluetooth-modul ska blinka för att indikera att den är påslagen och letar aktivt efter en telefon för att upprätta en anslutning.
Gå nu in i Bluetooth-inställningarna på din telefon och sök efter ny Bluetooth-enhet. Du borde kunna se namnet HC-05 eller HC-06 baserat på din modul. Jag använder HC-06, därför visar min telefon följande skärm. Försök sedan para ihop det och det kommer att be om ett lösenord. Ange lösenordet som 1234 (för vissa kan det vara 0000) och klicka på OK som visas nedan.
När parningen har lyckats öppnar du Bluetooth Terminal-applikationen som vi just installerade. Gå in i inställningsalternativet och välj "Anslut en enhet - Säker" som visas nedan. Detta öppnar en popup-ruta där alla våra parade enheter kommer att listas som visas nedan. Välj modulen HC-05 eller HC-06.
När anslutningen har upprättats måste lampan på Bluetooth-modulen som hittills blinkat ha blivit konstant för att indikera att den har anslutits till din mobil. Och vi bör få det inledande meddelandet från vårt program som visas nedan.
Tryck nu på '1' för att tända LED-lampan och tryck på '0' för att stänga av lampan. Hela arbetet visas i videon. Din mobilskärm ser ut ungefär så här nedan.
Så det är det killar, vi har lärt oss hur man gränssnitt Bluetooth-modul till vår PIC-mikrokontroller, nu med hjälp av detta kan vi prova trådlösa projekt. Det finns många projekt som använder Bluetooth, du kan prova dem eller komma med din egen idé och dela dem i kommentarsektionen. Kontrollera också vårt tidigare projekt med Bluetooth-terminalapp och HC-05 som Smart Phone Controlled Home Automation med Arduino och Smart Phone Controlled Digital Code Lock med Arduino.
Hoppas, den här handledningen hjälpte dig! Om du har fastnat någonstans, vänligen använd kommentarsektionen.