- Wymagania:
- Programowanie mikrokontrolera PIC do komunikacji Bluetooth:
- Schemat obwodu i konfiguracja sprzętu:
- Sterowanie diodą LED za pomocą aplikacji mobilnej Bluetooth:
W tym samouczku dowiemy się, jak rozróżniać projekty PIC bezprzewodowo przez połączenie modułu Bluetooth (HC-06). W naszym poprzednim samouczku dowiedzieliśmy się już, jak korzystać z modułu USART w naszym mikrokontrolerze PIC i nawiązać komunikację między PIC a komputerem. Jeśli jesteś absolutnym początkującym, sprawdź tutaj wszystkie nasze samouczki PIC, w których zaczęliśmy od zera, takie jak nauka MPLAB i XC8, łączenie LED, LCD, używanie timerów, ADC, PWM itp.
Tutaj zastosowaliśmy popularny moduł Bluetooth HC-06. Za pomocą tego modułu możemy bezprzewodowo odbierać i przesyłać informacje z naszego MCU PIC do aplikacji mobilnej lub komputera. Komunikacja pomiędzy PIC a HC-06 jest realizowana za pomocą modułu USART znajdującego się w mikrokontrolerze PIC. Możesz także użyć HC-05. Ponownie działamy na tym samym asynchronicznym 8-bitowym trybie, ale tym razem nieco zmodyfikujemy nasz kod, aby działał z modułem Bluetooth. Dlatego też wcześniejsze zapoznanie się z samouczkiem UART jest dodatkowym atutem tego projektu.
W tym samouczku będziemy przełączać diodę LED, wysyłając polecenie włączenia lub wyłączenia z naszego smartfona. Będziemy korzystać z aplikacji na Androida o nazwie Terminal Bluetooth, która może wysyłać i odbierać dane przez Bluetooth. Jeśli wyślemy znak „1” z aplikacji, światło na tablicy PIC zostanie włączone i otrzymamy potwierdzenie z powrotem na telefon, że światło zostało włączone. Podobnie możemy wysłać „0” z telefonu, aby go wyłączyć. W ten sposób możemy sterować światłem LED na naszej płytce PIC, podobnie jak w samouczku UART, ale teraz bezprzewodowo. Kompletny program i szczegółowe wideo znajdują się na końcu tego samouczka.
Poniżej przedstawiono podstawowy schemat blokowy konfiguracji.
Wymagania:
Sprzęt komputerowy:
- PIC16F877A Płyta perf
- Moduł Bluetooth HC-05 lub HC-06
- Komputer (do programowania)
- Telefon komórkowy
- PICkit 3 Programmer
Oprogramowanie:
- MPLABX
- Terminal Bluetooth (aplikacja mobilna)
Moduł Bluetooth HC-06:
Bluetooth może działać w dwóch następujących trybach:
- Tryb poleceń
- Tryb pracy
W trybie poleceń będziemy mogli skonfigurować właściwości Bluetooth, takie jak nazwa sygnału Bluetooth, jego hasło, operacyjna prędkość transmisji itp. Tryb pracy to ten, w którym będziemy mogli wysyłać i odbierać dane między mikrokontrolerem PIC i moduł Bluetooth. Dlatego w tym samouczku będziemy bawić się tylko trybem pracy. Tryb poleceń zostanie pozostawiony do ustawień domyślnych. Nazwa urządzenia to HC-05 (używam HC-06), hasło to 0000 lub 1234, a co najważniejsze, domyślna prędkość transmisji dla wszystkich modułów Bluetooth będzie wynosić 9600.
Moduł pracuje na zasilaniu 5V a piny sygnałowe na 3,3V stąd regulator 3,3V występuje w samym module. Dlatego nie musimy się tym martwić. Z sześciu pinów tylko cztery będą używane w trybie pracy. Tabela połączeń pinów jest pokazana poniżej
S.Nr |
Przypnij HC-05 / HC-06 |
Nazwa pinu na MCU |
Numer pinu w PIC |
1 |
Vcc |
Vdd |
31 ul kołek |
2 |
Vcc |
Gnd |
32 ND kołek |
3 |
Tx |
RC6 / Tx / CK |
25- ty pin |
4 |
Rx |
RC7 / Rx / DT |
26- ty pin |
5 |
Stan |
NC |
NC |
6 |
EN (Włącz) |
NC |
NC |
Sprawdź nasze inne projekty, aby dowiedzieć się więcej o module Bluetooth HC-05 z innymi mikrokontrolerami:
- Samochodzik sterowany przez Bluetooth za pomocą Arduino
- System automatyki domowej sterowany przez Bluetooth przy użyciu 8051
- Światła sterowane głosem za pomocą Raspberry Pi
- Radio FM sterowane smartfonem za pomocą Arduino i przetwarzania
- Robot samochodowy sterowany telefonem komórkowym za pomocą czujnika G i Arduino
Programowanie mikrokontrolera PIC do komunikacji Bluetooth:
Jak wszystkie moduły (ADC, Timer, PWM) powinniśmy również zainicjować nasz moduł Bluetooth. Inicjalizacja będzie podobna do inicjalizacji UART, ale musimy wprowadzić pewne zmiany, aby Bluetooth działał bezbłędnie z naszym MCU PIC16F877A. Zdefiniujmy bity konfiguracyjne i zacznijmy od funkcji inicjalizacji Bluetooth.
Inicjalizacja Bluetooth:
Prawie wszystkie moduły Bluetooth na rynku działają z szybkością transmisji 9600, bardzo ważne jest, aby ustawić szybkość transmisji taką samą, jak w przypadku modułów Bluetooth obsługujących szybkość transmisji, tutaj ustawiamy SPBRG = 129, ponieważ pracujemy z częstotliwością zegara 20 MHz z 9600 jako szybkość transmisji. Stąd powyższa inicjalizacja zadziała tylko dla modułów Bluetooth pracujących z szybkością 9600 bodów. Wymagane jest również włączenie wysokiej szybkości transmisji bitów BRGH. Pomoże to w ustawieniu dokładnej szybkości transmisji.
// ****** Zainicjuj Bluetooth za pomocą USART ******** // void Initialize_Bluetooth () {// Ustaw styki RX i TX // TRISC6 = 1; TRISC7 = 1; // Ustaw szybkość transmisji za pomocą tabeli przeglądowej w arkuszu danych (pg114) // BRGH = 1; // Zawsze używaj dużej szybkości transmisji z Bluetooth, w przeciwnym razie nie będzie działać SPBRG = 129; // Włącz Asyc. Port szeregowy // SYNC = 0; SPEN = 1; // Ustaw 8-bitowy odbiór i transmisję RX9 = 0; TX9 = 0; // Włącz transmisję i odbiór // TXEN = 1; CREN = 1; // Włącz globalne i ph. przerwania // GIE = 1; PEIE = 1; // Włącz przerwania dla Tx. i Rx.// RCIE = 1; TXIE = 1; } // ___________ Zainicjowano BT _____________ //
Jeśli masz moduł BT, który działa z inną szybkością transmisji, możesz zapoznać się z poniższą tabelą wyszukiwania, aby znaleźć wartość dla SPBRG.
Ładowanie danych do Bluetooth:
Po zainicjowaniu funkcji mamy w naszym programie trzy funkcje do wysyłania i odbierania danych z Bluetooth. W przeciwieństwie do UART, musimy wziąć pod uwagę kilka rzeczy, zanim będziemy mogli przesyłać lub odbierać dane. Moduł Bluetooth posiada w sobie bufor nadawania i odbioru, przesyłane do niego dane będą przechowywane w buforze Tx. Dane te nie będą transmitowane (wysyłane drogą powietrzną), chyba że do modułu zostanie wysłany powrót karetki. Dlatego, aby przesłać dane, musimy załadować bufor Rx BT, a następnie nadać go za pomocą powrotu karetki.
Powyższą pracę można łatwo osiągnąć za pomocą następujących funkcji. Poniższa funkcja może być wykorzystana, gdy musimy załadować tylko jeden znak do bufora Rx. Ładujemy dane do rejestru TXREG i czekamy, aż zostaną przetworzone, sprawdzając flagę TXIF i TRMT za pomocą pętli while.
// Funkcja wczytywania Bluetooth Rx. bufor z jednym znakiem.// void BT_load_char (bajt znaku) {TXREG = bajt; podczas gdy (! TXIF); podczas (! TRMT); } // Koniec funkcji //
Poniższa funkcja służy do załadowania łańcucha do bufora Rx modułu Bluetooth. Ciąg jest dzielony na znaki, a każdy znak jest wysyłany do funkcji BT_load_char () .
// Funkcja wczytywania Bluetooth Rx. bufor z napisem // void BT_load_string (char * string) {while (* string) BT_load_char (* string ++); } // Koniec funkcji /
Transmisja danych przez Bluetooth:
Do tej pory przesłaliśmy właśnie informacje do bufora Rx modułu HC-05. Teraz musimy poinstruować go, aby transmitował dane drogą powietrzną za pomocą tej funkcji.
// Funkcja do transmisji danych z RX. bufor // void broadcast_BT () {TXREG = 13; __delay_ms (500); } // Koniec funkcji //
W tej funkcji wysyłamy wartość 13 do rejestru TXREG. Ta wartość 13 jest niczym innym jak dziesiętnym odpowiednikiem karetki (patrz wykres ASCII). Następnie nadawca ma niewielkie opóźnienie, aby rozpocząć.
Odczytywanie danych z Bluetooth:
Podobnie jak w przypadku UART, poniższa funkcja służy do odczytu danych z Bluetooth
// Funkcja pobierania znaku z Rx.buffer z BT // char BT_get_char (void) {if (OERR) // sprawdź, czy wystąpił błąd przekroczenia czasu {CREN = 0; CREN = 1; // Reset CREN} if (RCIF == 1) // jeśli użytkownik wysłał znak, zwróć znak (wartość ASCII) {while (! RCIF); return RCREG; } else // jeśli użytkownik nie wysłał żadnej wiadomości return 0 return 0; } // Koniec funkcji /
Jeśli użytkownik wysłał dane, ta funkcja zwróci te konkretne dane, które można zapisać w zmiennej i przetworzyć. Jeśli użytkownik niczego nie wysłał, funkcja zwróci zero.
Główna funkcja:
Użyliśmy wszystkich opisanych powyżej funkcji w ramach funkcji głównej. Wysyłamy jakąś wiadomość wprowadzającą, a następnie czekamy, aż użytkownik wyśle pewne wartości, na podstawie których przełączamy CZERWONĄ lampkę LED podłączoną do pinu RB3 na naszej płycie Perf.
void main (void) {// Deklaracje zmiennych zakresu // int get_value; // Koniec deklaracji zmiennej // // Deklaracje I / O // TRISB3 = 0; // Koniec deklaracji I / O // Initialize_Bluetooth (); // przygotujmy nasz bluetooth do działania // Pokaż jakąś wiadomość wprowadzającą po włączeniu // BT_load_string ("Bluetooth zainicjowany i gotowy"); broadcast_BT (); BT_load_string ("Naciśnij 1, aby włączyć diodę LED"); broadcast_BT (); BT_load_string ("Naciśnij 0, aby wyłączyć LED"); broadcast_BT (); // Koniec wiadomości // while (1) // Nieskończona lop {get_value = BT_get_char (); // Przeczytaj char. odebrane przez BT // Jeśli otrzymamy '0' // if (get_value == '0') {RB3 = 0; BT_load_string ("LED wyłączona"); broadcast_BT (); } // Jeśli otrzymamy '1' // if (get_value == '1') {RB3 = 1; BT_load_string ("Dioda włączona"); broadcast_BT ();}}}
Sprawdź pełny program w sekcji Kod poniżej.
Schemat obwodu i konfiguracja sprzętu:
Połączenia obwodów dla tego projektu są bardzo proste, musimy po prostu włączyć moduł Bluetooth i podłączyć Tx do 26- tego pinu PIC i Rx do 25- tego pinu PIC, jak pokazano na schemacie poniżej:
Przejdźmy teraz do sprzętu. Po nawiązaniu połączenia powinno to wyglądać mniej więcej tak.
Sterowanie diodą LED za pomocą aplikacji mobilnej Bluetooth:
Teraz przygotujmy naszą aplikację na Androida. Pobierz aplikację o nazwie Bluetooth Terminal ze sklepu App store lub skorzystaj z tego łącza. Po pobraniu i zainstalowaniu aplikacji włącz płytę PIC perf, której używamy od początku. Mała dioda LED na module Bluetooth powinna migać, wskazując, że jest on włączony i aktywnie szuka telefonu do nawiązania połączenia.
Teraz przejdź do ustawień Bluetooth telefonu i wyszukaj nowe urządzenie Bluetooth. Powinieneś być w stanie zobaczyć nazwę HC-05 lub HC-06 na podstawie twojego modułu. Używam HC-06, stąd mój telefon pokazuje następujący ekran. Następnie spróbuj z nim parować, a poprosi o hasło. Wprowadź hasło jako 1234 (dla niektórych może to być 0000) i kliknij OK, jak pokazano poniżej.
Po pomyślnym parowaniu otwórz aplikację Terminal Bluetooth, którą właśnie zainstalowaliśmy. Wejdź do opcji ustawień i wybierz „Podłącz urządzenie - Bezpieczne”, jak pokazano poniżej. Otworzy się wyskakujące okienko, w którym zostaną wyświetlone wszystkie sparowane urządzenia, jak pokazano poniżej. Wybierz moduł HC-05 lub HC-06.
Po nawiązaniu połączenia lampka modułu Bluetooth, która dotychczas migała, musiała świecić światłem ciągłym, aby wskazać, że udało się połączyć z telefonem komórkowym. Powinniśmy otrzymać wiadomość wprowadzającą z naszego programu, jak pokazano poniżej.
Teraz naciśnij „1”, aby włączyć światło LED i naciśnij „0”, aby je wyłączyć. Cała praca zostanie pokazana na wideo. Twój ekran telefonu komórkowego będzie wyglądał mniej więcej tak, jak pokazano poniżej.
Więc to jest chłopaki, nauczyliśmy się jak podłączyć moduł Bluetooth do naszego mikrokontrolera PIC, teraz z pomocą tego możemy wypróbować projekty bezprzewodowe. Istnieje wiele projektów wykorzystujących Bluetooth, możesz je wypróbować lub wymyślić własny pomysł i podzielić się nim w sekcji komentarzy. Sprawdź również nasz poprzedni projekt z aplikacją terminala Bluetooth i HC-05, taką jak automatyka domowa sterowana smartfonem za pomocą Arduino i sterowanego smartfonem cyfrowego zamka kodowego za pomocą Arduino.
Mam nadzieję, że ten samouczek ci pomógł! Jeśli gdzieś utknąłeś, skorzystaj z sekcji komentarzy.