- Vereisten:
- PIC-microcontroller programmeren voor Bluetooth-communicatie:
- Schakelschema en hardware-instellingen:
- LED aansturen met behulp van Bluetooth mobiele applicatie:
In deze tutorial zullen we leren hoe je PIC-projecten draadloos kunt onderscheiden door een Bluetooth-module (HC-06) te koppelen. In onze vorige tutorial hebben we al geleerd hoe de USART-module in onze PIC-microcontroller moet worden gebruikt en communicatie tussen PIC en computer tot stand is gebracht. Als je een absolute beginner bent, kijk dan hier voor al onze PIC-tutorials, waar we helemaal opnieuw zijn begonnen, zoals het leren van MPLAB en XC8, interfacing LED, LCD, het gebruik van timers, ADC, PWM enz.
Hier hebben we de populaire Bluetooth-module HC-06 gebruikt. Met behulp van deze module kunnen we draadloos informatie ontvangen en verzenden van onze PIC MCU naar een mobiele applicatie of een computer. De communicatie tussen PIC en HC-06 wordt tot stand gebracht met behulp van de USART-module die aanwezig is in de PIC-microcontroller. U kunt ook de HC-05 gebruiken. We werken weer op dezelfde asynchrone 8-bit-modus, maar deze keer zullen we onze code een beetje aanpassen zodat deze werkt met de Bluetooth-module. Daarom is het vooraf leren van de UART-tutorial een bijkomend voordeel voor dit project.
In deze zelfstudie schakelen we een LED in door een opdracht van onze smartphone aan of uit te sturen. We zullen een Android-applicatie genaamd Bluetooth Terminal gebruiken die gegevens kan verzenden en ontvangen via Bluetooth. Als we een teken '1' vanuit de app verzenden, wordt het licht op het PIC-bord ingeschakeld en krijgen we een bevestiging terug naar de telefoon dat het licht is ingeschakeld. Evenzo kunnen we '0' vanaf de telefoon verzenden om deze uit te schakelen. Op deze manier kunnen we het LED-licht op ons PIC-bord besturen, vergelijkbaar met de UART-tutorial, maar nu draadloos. Het volledige programma en de gedetailleerde video vindt u aan het einde van deze tutorial.
Het basisblokschema voor de installatie wordt hieronder weergegeven.
Vereisten:
Hardware:
- PIC16F877A Perf bord
- HC-05 of HC-06 Bluetooth-module
- Computer (voor programmeren)
- Mobiele telefoon
- PICkit 3 Programmer
Software:
- MPLABX
- Bluetooth-terminal (mobiele applicatie)
Bluetooth-module HC-06:
Bluetooth kan in de volgende twee modi werken:
- Commando-modus
- Bedrijfsmodus
In de Command-modus kunnen we de Bluetooth-eigenschappen configureren, zoals de naam van het Bluetooth-signaal, het wachtwoord, de operationele baudrate enz. De Operating Mode is de modus waarin we gegevens kunnen verzenden en ontvangen tussen de PIC Microcontroller. en de Bluetooth-module. Daarom spelen we in deze tutorial alleen met de bedieningsmodus. De opdrachtmodus wordt overgelaten aan de standaardinstellingen. De apparaatnaam is HC-05 (ik gebruik HC-06) en het wachtwoord is 0000 of 1234 en het belangrijkste is dat de standaard baudrate voor alle Bluetooth-modules 9600 is.
De module werkt op 5V voeding en de signaalpinnen werken op 3.3V, daarom is er een 3.3V regelaar aanwezig in de module zelf. Daarom hoeven we ons er geen zorgen over te maken. Van de zes pinnen worden er slechts vier gebruikt in de bedieningsmodus. De pinverbindingstabel wordt hieronder weergegeven
S.No |
Pin op HC-05 / HC-06 |
Pin naam op MCU |
Pincode in PIC |
1 |
Vcc |
Vdd |
31 ste speld |
2 |
Vcc |
GND |
32 ste speld |
3 |
Tx |
RC6 / Tx / CK |
25 ste pin |
4 |
Rx |
RC7 / Rx / DT |
26 ste pin |
5 |
Staat |
NC |
NC |
6 |
NL (inschakelen) |
NC |
NC |
Bekijk onze andere projecten voor meer informatie over Bluetooth-module HC-05 met andere microcontrollers:
- Bluetooth-gestuurde speelgoedauto met Arduino
- Bluetooth-gestuurd huisautomatiseringssysteem met 8051
- Spraakgestuurde verlichting met Raspberry Pi
- Slimme telefoongestuurde FM-radio met Arduino en verwerking
- Mobiele telefoongestuurde robotauto met behulp van G-sensor en Arduino
PIC-microcontroller programmeren voor Bluetooth-communicatie:
Zoals alle modules (ADC, Timer, PWM) moeten we ook onze Bluetooth-module initialiseren. De initialisatie is vergelijkbaar met de UART-initialisatie, maar we moeten enkele wijzigingen aanbrengen om Bluetooth probleemloos te laten werken met onze PIC16F877A MCU. Laten we de configuratiebits definiëren en beginnen met de Bluetooth-initialisatiefunctie.
Bluetooth initialiseren:
Bijna alle Bluetooth-modules op de markt werken met een baudrate van 9600, het is erg belangrijk om uw baudrate hetzelfde in te stellen als die van Bluetooth-modules die de baudrate gebruiken, hier stellen we SPBRG = 129 in omdat we werken op 20Mhz klokfrequentie met 9600 als baudrate. Daarom werkt de bovenstaande initialisatie alleen voor Bluetooth-modules die werken met een baudrate van 9600. Het is ook verplicht om de snelle baudrate bit BRGH ingeschakeld te hebben. Dit zal helpen bij het instellen van een nauwkeurige baudrate.
// ****** Initialiseer Bluetooth met USART ******** // void Initialize_Bluetooth () {// Stel de pinnen van RX en TX // TRISC6 = 1; TRISC7 = 1; // Stel de baudrate in met behulp van de opzoektabel in datasheet (pg114) // BRGH = 1; // Gebruik altijd een hoge baudrate met Bluetooth, anders werkt het niet SPBRG = 129; // Schakel Asyc in. Seriële poort // SYNC = 0; SPEN = 1; // Stel 8-bit ontvangst en verzending RX9 = 0 in; TX9 = 0; // Schakel verzending en ontvangst in // TXEN = 1; CREN = 1; // Schakel global en ph in. onderbreekt // GIE = 1; PEIE = 1; // Schakel interrupts in voor Tx. en Rx.// RCIE = 1; TXIE = 1; } // ___________ BT geïnitialiseerd _____________ //
Als u een BT-module heeft die met een andere baudrate werkt, kunt u de onderstaande opzoektabel raadplegen om uw waarde voor de SPBRG te achterhalen.
Gegevens laden in Bluetooth:
Zodra de functie is geïnitialiseerd, hebben we drie functies in ons programma om gegevens van Bluetooth te verzenden en te ontvangen. In tegenstelling tot UART moeten we hier enkele dingen overwegen voordat we gegevens kunnen verzenden of ontvangen. De Bluetooth-module heeft een verzend- en ontvangstbuffer erin, de gegevens die ernaar worden verzonden, worden opgeslagen in de Tx-buffer. Deze gegevens worden niet uitgezonden (on-air verzonden) tenzij er een wagenretour naar de module wordt gestuurd. Om gegevens te verzenden, moeten we de Rx-buffer van BT laden en deze vervolgens uitzenden met behulp van een regelterugloop.
De bovenstaande werking kan eenvoudig worden bereikt door de volgende functies te gebruiken. De onderstaande functie kan worden gebruikt als we slechts één teken in de Rx-buffer hoeven te laden. We laden de gegevens in het TXREG-register en wachten tot het verwerkt is door de vlag TXIF en TRMT te controleren door while-loops te gebruiken.
// Functie om de Bluetooth Rx te laden. buffer met één char.// void BT_load_char (char byte) {TXREG = byte; while (! TXIF); terwijl (! TRMT); } // Einde functie //
De onderstaande functie wordt gebruikt om een string in de Rx-buffer van de Bluetooth-module te laden. De string wordt opgesplitst in karakters en elk karakter wordt naar de BT_load_char () functie gestuurd.
// Functie om Bluetooth Rx te laden. buffer met string // void BT_load_string (char * string) {while (* string) BT_load_char (* string ++); } // Einde van functie /
Gegevens uitzenden via Bluetooth:
Tot nu toe hebben we zojuist informatie verzonden naar de Rx-buffer van de HC-05-module. Nu moeten we hem instrueren om de gegevens via de ether uit te zenden met behulp van deze functie.
// Functie om gegevens van RX uit te zenden. buffer // void broadcast_BT () {TXREG = 13; __delay_ms (500); } // Einde van functie //
In deze functie sturen we een waarde 13 naar het TXREG-register. Deze waarde 13 is niets anders dan het decimale equivalent voor vervoer (zie ASCII-diagram). Er wordt dan een kleine vertraging gecreëerd voor de omroep om te starten.
Gegevens lezen van Bluetooth:
Net als bij UART, wordt de onderstaande functie gebruikt om gegevens van Bluetooth te lezen
// Functie om een char te krijgen van Rx.buffer van BT // char BT_get_char (void) {if (OERR) // controleer op overloopfout {CREN = 0; CREN = 1; // Reset CREN} if (RCIF == 1) // als de gebruiker een char heeft gestuurd, retourneer de char (ASCII-waarde) {while (! RCIF); terug RCREG; } else // als de gebruiker geen bericht heeft verzonden, retourneer 0 retourneer 0; } // Einde van functie /
Als de gebruiker gegevens heeft verzonden, retourneert deze functie die specifieke gegevens die in een variabele kunnen worden opgeslagen en verwerkt. Als de gebruiker niets heeft verzonden, retourneert de functie nul.
Hoofdfunctie:
We hebben alle hierboven beschreven functies binnen of de hoofdfunctie gebruikt. We sturen een inleidend bericht en wachten vervolgens tot de gebruiker enkele waarden verzendt op basis waarvan we het RODE led-lampje schakelen dat is aangesloten op de RB3-pin op ons Perf-bord.
void main (void) {// Scope variabele declaraties // int get_value; // Einde variabele declaratie // // I / O declaraties // TRISB3 = 0; // Einde van I / O-declaratie // Initialize_Bluetooth (); // laten we onze bluetooth gereed maken voor actie // Toon een inleidend bericht eenmaal bij het opstarten // BT_load_string ("Bluetooth geïnitialiseerd en gereed"); broadcast_BT (); BT_load_string ("Druk op 1 om LED AAN te zetten"); broadcast_BT (); BT_load_string ("Druk op 0 om LED UIT te schakelen"); broadcast_BT (); // Einde bericht // while (1) // De oneindige lop {get_value = BT_get_char (); // Lees het char. ontvangen via BT // Als we een '0' // if (get_value == '0') {RB3 = 0; BT_load_string ("LED uitgeschakeld"); broadcast_BT (); } // Als we een '1' // if (get_value == '1') {RB3 = 1; BT_load_string ("LED ingeschakeld"); broadcast_BT ();}}}
Bekijk het volledige programma in het codegedeelte hieronder.
Schakelschema en hardware-instellingen:
Schakelingsverbindingen voor dit project is zeer eenvoudig, we gewoon moeten schakel de Bluetooth-module en sluit de Tx naar de 26 ste pin PIC en Rx de 25 ste pin van PIC zoals in het schema hieronder:
Laten we nu verder gaan met de hardware. Zodra de verbinding tot stand is gebracht, zou het er ongeveer zo uit moeten zien.
LED aansturen met behulp van Bluetooth mobiele applicatie:
Laten we nu onze Android-applicatie gereed maken. Download de applicatie genaamd Bluetooth Terminal uit de App store of gebruik deze link. Zodra de applicatie is gedownload en geïnstalleerd, zet u uw PIC-kaart aan die we vanaf het begin gebruiken. Het kleine LED-lampje op uw Bluetooth-module moet knipperen om aan te geven dat deze is ingeschakeld en actief op zoek is naar een telefoon om een verbinding tot stand te brengen.
Ga nu naar de Bluetooth-instellingen van uw telefoon en zoek naar een nieuw Bluetooth-apparaat.U zou de naam HC-05 of HC-06 moeten kunnen zien op basis van uw module. Ik gebruik HC-06 en daarom toont mijn telefoon het volgende scherm. Probeer het dan te koppelen en het zal om een wachtwoord vragen. Voer het wachtwoord in als 1234 (voor sommigen is dit 0000) en klik op OK zoals hieronder weergegeven.
Nadat het koppelen is gelukt, opent u de Bluetooth Terminal-toepassing die we zojuist hebben geïnstalleerd. Ga naar de instellingenoptie en selecteer "Een apparaat verbinden - Veilig" zoals hieronder weergegeven. Hierdoor wordt een pop-upvenster geopend waarin al onze gekoppelde apparaten worden weergegeven, zoals hieronder weergegeven. Selecteer de HC-05 of HC-06 module.
Zodra de verbinding tot stand is gebracht, moet het lampje op de Bluetooth-module dat tot nu toe aan het knipperen was, constant branden om aan te geven dat deze met succes verbinding heeft gemaakt met uw gsm. En we zouden het inleidende bericht van ons programma moeten krijgen, zoals hieronder weergegeven.
Druk nu op '1' om het LED-licht in te schakelen en druk op '0' om het licht uit te doen. De volledige werking wordt getoond in de video. Uw mobiele scherm ziet er ongeveer zo uit als hieronder.
Dus dat zijn het jongens, we hebben geleerd hoe we een Bluetooth-module kunnen koppelen aan onze PIC-microcontroller, nu kunnen we met behulp hiervan draadloze projecten proberen. Er zijn veel projecten die Bluetooth gebruiken, je kunt ze proberen of je eigen idee bedenken en ze delen in het commentaargedeelte. Bekijk ook ons vorige project met Bluetooth-terminal-app en HC-05 zoals Smart Phone Controlled Home Automation met Arduino en Smart Phone Controlled Digital Code Lock met Arduino.
Hoop, deze tutorial heeft je geholpen! Als je ergens vastzit, gebruik dan alstublieft het commentaargedeelte.