- Изисквания:
- Програмиране на PIC микроконтролер за Bluetooth комуникация:
- Електрическа схема и хардуерна настройка:
- Управление на светодиода с помощта на мобилно приложение Bluetooth:
В този урок ще научим как да различавате PIC проекти безжично чрез свързване на Bluetooth модул (HC-06). В нашия предишен урок вече научихме как да използваме модула USART в нашия микроконтролер PIC и установихме комуникация между PIC и компютър. Ако сте абсолютно начинаещ, проверете тук всичките ни уроци по PIC, където започнахме от нулата, като изучаване на MPLAB и XC8, взаимодействие на LED, LCD, използване на таймери, ADC, PWM и т.н.
Тук използвахме популярния Bluetooth модул HC-06. Използвайки този модул, ние можем да получаваме и изпращаме информация безжично от нашия PIC MCU към мобилно приложение или компютър. Комуникацията между PIC и HC-06 се установява с помощта на модула USART, присъстващ в PIC микроконтролера. Можете също да използвате HC-05. Отново работим в същия асинхронен 8-битов режим, но този път ще модифицираме малко нашия код, така че да работи с Bluetooth модула. Следователно изучаването на уроци по UART предварително е допълнително предимство за този проект.
В този урок ще превключим светодиод, като изпратим команда за включване или изключване от нашия смартфон. Ще използваме приложение за Android, наречено Bluetooth Terminal, което може да изпраща и получава данни през Bluetooth. Ако изпратим знак „1“ от приложението, светлината ще бъде включена в PIC таблото и ще получим обратно потвърждение на телефона, че лампата е включена. По същия начин можем да изпратим „0“ от телефона, за да го изключим. По този начин можем да контролираме LED светлината на нашата PIC платка, подобно на урока по UART, но вече безжично. Пълна програма и подробно видео е дадено в края на този урок.
Основната блокова схема за настройката е показана по-долу.
Изисквания:
Хардуер:
- PIC16F877A Perf Board
- Bluetooth модул HC-05 или HC-06
- Компютър (за програмиране)
- Мобилен телефон
- Програмист PICkit 3
Софтуер:
- MPLABX
- Bluetooth терминал (мобилно приложение)
Bluetooth модул HC-06:
Bluetooth може да работи в следните два режима:
- Команден режим
- Режим на работа
В командния режим ще можем да конфигурираме Bluetooth свойствата като името на Bluetooth сигнала, неговата парола, оперативната скорост на предаване и т.н. Работният режим е този, в който ще можем да изпращаме и получаваме данни между PIC микроконтролера и Bluetooth модула. Следователно в този урок ще се играем само с режима на работа. Командният режим ще бъде оставен на настройките по подразбиране. Името на устройството ще бъде HC-05 (използвам HC-06), а паролата ще бъде 0000 или 1234 и най-важното скоростта на предаване по подразбиране за всички Bluetooth модули ще бъде 9600.
Модулът работи на 5V захранване, а сигналните щифтове работят на 3.3V, поради което в самия модул има регулатор 3.3V Следователно не е нужно да се тревожим за това. От шестте щифта само четири ще бъдат използвани в работен режим. Таблицата на връзките с щифтове е показана по-долу
S.No |
Закачете на HC-05 / HC-06 |
Име на ПИН на MCU |
ПИН номер в PIC |
1 |
Vcc |
Vdd |
31- ви щифт |
2 |
Vcc |
Gnd |
32- ри щифт |
3 |
Tx |
RC6 / Tx / CK |
25 -ти щифт |
4 |
Rx |
RC7 / Rx / DT |
26 -ти щифт |
5 |
Щат |
NC |
NC |
6 |
EN (Активиране) |
NC |
NC |
Проверете другите ни проекти, за да научите повече за Bluetooth модула HC-05 с други микроконтролери:
- Кола с играчки, контролирана от Bluetooth, използваща Arduino
- Контролирана от Bluetooth система за домашна автоматизация, използваща 8051
- Гласово контролирани светлини с помощта на Raspberry Pi
- FM радио, контролирано от смарт телефон, използващо Arduino и обработка
- Контролиран от мобилен телефон автомобил-робот, използващ G-Sensor и Arduino
Програмиране на PIC микроконтролер за Bluetooth комуникация:
Както всички модули (ADC, таймер, ШИМ), ние също трябва да инициализираме нашия Bluetooth модул. Инициализацията ще бъде подобна на инициализацията на UART, но трябва да направим някои промени, за да може Bluetooth да работи безотказно с нашия PIC16F877A MCU. Нека дефинираме конфигурационните битове и да започнем с функцията за инициализация на Bluetooth.
Инициализиране на Bluetooth:
Почти всички Bluetooth модули на пазара работят със скорост на предаване 9600, много е важно да зададете скоростта си на предаване същата като тази на Bluetooth модулите, работещи със скорост на предаване, тук задаваме SPBRG = 129, тъй като работим на тактова честота 20Mhz с 9600 като скорост на предаване. Следователно горната инициализация ще работи само за Bluetooth модули, работещи със скорост 9600 бода. Също така е задължително да се активира високоскоростната скорост на предаване BRGH. Това ще ви помогне да зададете точна скорост на предаване.
// ****** Инициализирайте Bluetooth с помощта на USART ******** // void Initialize_Bluetooth () {// Задайте щифтовете на RX и TX // TRISC6 = 1; TRISC7 = 1; // Задайте скорост на предаване, като използвате таблицата за търсене в таблицата с данни (pg114) // BRGH = 1; // Винаги използвайте високоскоростна скорост на предаване с Bluetooth, иначе няма да работи SPBRG = 129; // Включете Asyc. Сериен порт // SYNC = 0; SPEN = 1; // Задаване на 8-битово приемане и предаване RX9 = 0; TX9 = 0; // Активиране на предаването и приемането // TXEN = 1; CREN = 1; // Активиране на глобални и ph. прекъсва // GIE = 1; PEIE = 1; // Активиране на прекъсвания за Tx. и Rx.// RCIE = 1; TXIE = 1; } // ___________ BT инициализиран _____________ //
Ако имате BT модул, който работи с различна скорост на предаване, можете да се обърнете към таблицата за търсене по-долу, за да разберете стойността си за SPBRG.
Зареждане на данни в Bluetooth:
След като функцията е инициализирана, в нашата програма има три функции за изпращане и получаване на данни от Bluetooth. За разлика от UART, тук има няколко неща, които трябва да разгледаме, преди да можем да предаваме или получаваме данни. Модулът Bluetooth има буфер за предаване и получаване вътре, данните, изпратени до него, ще се съхраняват в буфера Tx. Тези данни няма да бъдат излъчени (изпратени в ефир), освен ако до модула не бъде изпратено връщане на карета. Следователно, за да предадем данни, трябва да заредим Rx буфера на BT и след това да го излъчим с помощта на връщане на каретата.
Горната работа може лесно да бъде постигната чрез използване на следните функции. Функцията по-долу може да се използва, когато трябва да заредим само един символ в Rx буфера. Зареждаме данните в регистъра TXREG и изчакваме, докато бъдат обработени, като проверим флагчето TXIF и TRMT, като използваме циклите while.
// Функция за зареждане на Bluetooth Rx. буфер с един знак.// void BT_load_char (char байт) {TXREG = байт; докато (! TXIF); докато (! TRMT); } // Край на функцията //
Функцията по-долу се използва за зареждане на низ в Rx буфера на Bluetooth модула. Низът се разделя на символи и всеки знак се изпраща до функцията BT_load_char () .
// Функция за зареждане на Bluetooth Rx. буфер със низ // void BT_load_string (char * string) {while (* string) BT_load_char (* string ++); } // Край на функцията /
Излъчване на данни през Bluetooth:
До сега току-що предадохме информация в Rx буфера на модула HC-05. Сега трябва да го инструктираме да излъчва данните по ефир, като използва тази функция.
// Функция за излъчване на данни от RX. буфер // невалидно излъчване_BT () {TXREG = 13; __delay_ms (500); } // Край на функцията //
В тази функция изпращаме стойност 13 в TXREG регистъра. Тази стойност 13 не е нищо друго освен десетичен еквивалент за превоз (вижте диаграмата ASCII). След това се създава малко закъснение за излъчване на телевизионния оператор.
Четене на данни от Bluetooth:
Подобно на UART, функцията по-долу се използва за четене на данни от Bluetooth
// Функция за получаване на знак от Rx.buffer на BT // char BT_get_char (void) {if (OERR) // проверяваме за грешка при прекачване {CREN = 0; CREN = 1; // Нулиране на CREN} if (RCIF == 1) // ако потребителят е изпратил char връща char (ASCII стойност) {while (! RCIF); връщане RCREG; } else // ако потребителят не е изпратил съобщение return 0 return 0; } // Край на функцията /
Ако потребителят е изпратил данни, тази функция ще върне конкретните данни, които могат да бъдат записани в променлива и обработени. Ако потребителят не е изпратил нищо, функцията ще върне нула.
Главна функция:
Използвали сме всички обяснени по-горе функции вътре или основна функция. Изпращаме някакво уводно съобщение и след това изчакваме потребителят да изпрати някои стойности, въз основа на които превключваме ЧЕРВЕНАТА светодиодна лампа, свързана към щифта RB3 на нашата платка Perf.
void main (void) {// Обхват декларации за променливи // int get_value; // Край на декларация на променлива // // I / O декларации // TRISB3 = 0; // Край на I / O декларацията // Initialize_Bluetooth (); // позволява да подготвим нашия Bluetooth за действие // Показване на уводно съобщение при включване // BT_load_string („Bluetooth Initialized and Ready“) излъчване_BT (); BT_load_string ("Натиснете 1, за да включите светодиода"); излъчване_BT (); BT_load_string ("Натиснете 0, за да изключите светодиода"); излъчване_BT (); // Край на съобщението // while (1) // Безкрайният лоп {get_value = BT_get_char (); // Прочетете символа. получено чрез BT // Ако получим '0' // if (get_value == '0') {RB3 = 0; BT_load_string ("LED изключен"); излъчване_BT (); } // Ако получим '1' // if (get_value == '1') {RB3 = 1; BT_load_string ("LED включен"); излъчване_BT ();}}}
Проверете пълната програма в раздела за кодове по-долу.
Електрическа схема и хардуерна настройка:
Верижните връзки за този проект са много прости, просто трябва да включим Bluetooth модула и да свържем Tx към 26 -ия извод на PIC и Rx към 25 -ия извод на PIC, както е показано на схемата по-долу:
Сега да преминем към хардуера. След като свързването свърши, трябва да изглежда нещо подобно.
Управление на светодиода с помощта на мобилно приложение Bluetooth:
Сега нека подготвим нашето приложение за Android. Изтеглете приложението, наречено Bluetooth Terminal, от App Store или използвайте тази връзка. След като приложението бъде изтеглено и инсталирано, включете вашата PIC перфектна платка, която използваме от самото начало. Малката LED светлина на вашия Bluetooth модул трябва да мига, за да покаже, че е включен и активно търси телефон за установяване на връзка.
Сега влезте в Bluetooth настройките на телефона си и потърсете ново Bluetooth устройство, за да видите името HC-05 или HC-06 въз основа на вашия модул. Използвам HC-06, поради което телефонът ми показва следния дисплей. След това опитайте да се разделите с него и той ще поиска парола. Въведете паролата като 1234 (за някои може да е 0000) и щракнете върху OK, както е показано по-долу.
След като процедирането е успешно, отворете приложението Bluetooth Terminal, което току-що инсталирахме. Влезте в опцията за настройки и изберете „Свързване на устройство - защитено“, както е показано по-долу. Това ще отвори изскачащо поле, където всички наши сдвоени устройства ще бъдат изброени, както е показано по-долу. Изберете модула HC-05 или HC-06.
След като връзката бъде установена, светлината на Bluetooth модула, който мигаше досега, трябва да е станала постоянна, за да покаже, че е свързан успешно с вашия мобилен телефон. И трябва да получим уводното съобщение от нашата програма, както е показано по-долу.
Сега натиснете „1“, за да включите LED светлината и натиснете „0“, за да изключите светлината. Цялата работа ще бъде показана във видеото. Екранът на мобилния ви телефон ще изглежда по следния начин.
Това е, момчета, научихме как да свързваме Bluetooth модула с нашия PIC микроконтролер, сега с помощта на това можем да опитаме безжични проекти. Има много проекти, които използват Bluetooth, можете да ги изпробвате или да излезете със собствена идея и да ги споделите в раздела за коментари. Също така проверете предишния ни проект с приложение за терминал Bluetooth и HC-05 като Smart Phone Controlled Home Automation с помощта на Arduino и Smart Phone Controlled Digital Code Lock с помощта на Arduino.
Надявам се, този урок ви помогна! Ако сте останали някъде, моля, използвайте раздела за коментари.