- Требования:
- Программирование микроконтроллера PIC для связи Bluetooth:
- Принципиальная схема и настройка оборудования:
- Управление светодиодом с помощью мобильного приложения Bluetooth:
В этом уроке мы узнаем, как разобрать проекты PIC в беспроводной сети, подключив модуль Bluetooth (HC-06). В нашем предыдущем руководстве мы уже узнали, как использовать модуль USART в нашем микроконтроллере PIC, и установили связь между PIC и компьютером. Если вы абсолютный новичок, проверьте здесь все наши учебные пособия по PIC, в которых мы начали с нуля, например, изучение MPLAB и XC8, взаимодействие светодиодов, ЖК-дисплеев, использование таймеров, АЦП, ШИМ и т. Д.
Здесь мы использовали популярный модуль Bluetooth HC-06. Используя этот модуль, мы можем получать и отправлять информацию по беспроводной сети с нашего PIC MCU в мобильное приложение или компьютер. Связь между PIC и HC-06 устанавливается с помощью модуля USART, присутствующего в микроконтроллере PIC. Вы также можете использовать HC-05. Мы снова работаем в том же асинхронном 8-битном режиме, но на этот раз мы немного изменим наш код, чтобы он работал с модулем Bluetooth. Следовательно, предварительное изучение руководства по UART является дополнительным преимуществом для этого проекта.
В этом руководстве мы будем переключать светодиод, отправляя команду включения или выключения с нашего смартфона. Мы будем использовать Android-приложение под названием Bluetooth Terminal, которое может отправлять и получать данные по Bluetooth. Если мы отправим символ «1» из приложения, на плате PIC загорится свет, и мы получим подтверждение на телефон, что свет был включен. Точно так же мы можем отправить «0» с телефона, чтобы выключить его. Таким образом, мы можем управлять светодиодной подсветкой на нашей плате 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.
Модуль работает от источника питания 5 В, а сигнальные контакты работают от напряжения 3,3 В, следовательно, в самом модуле присутствует регулятор 3,3 В. Следовательно, нам не о чем беспокоиться. Из шести контактов только четыре будут использоваться в рабочем режиме. Таблица соединений выводов приведена ниже.
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-сенсора и Arduino
Программирование микроконтроллера PIC для связи Bluetooth:
Как и все модули (ADC, Timer, PWM), мы также должны инициализировать наш модуль Bluetooth. Инициализация будет аналогична инициализации UART, но нам нужно внести некоторые изменения, чтобы Bluetooth работал безупречно с нашим микроконтроллером PIC16F877A. Давайте определим биты конфигурации и начнем с функции инициализации Bluetooth.
Инициализация Bluetooth:
Почти все модули Bluetooth на рынке работают со скоростью 9600 бод, очень важно установить скорость передачи такой же, как у модулей Bluetooth, работающих со скоростью передачи, здесь мы устанавливаем SPBRG = 129, поскольку мы работаем на тактовой частоте 20 МГц с 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; // Включить глобальный и тел. прерывания // 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 byte) {TXREG = byte; пока (! 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. буфер // void broadcast_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) // если пользователь отправил символ, возвращаем символ (значение ASCII) {while (! RCIF); вернуть RCREG; } else // если пользователь не отправил сообщение return 0 return 0; } // Конец функции /
Если пользователь отправил данные, эта функция вернет те конкретные данные, которые могут быть сохранены в переменной и обработаны. Если пользователь ничего не отправил, функция вернет ноль.
Основная функция:
Мы использовали все описанные выше функции внутри или в основной функции. Мы отправляем вводное сообщение, а затем ждем, пока пользователь отправит некоторые значения, на основе которых мы переключаем КРАСНЫЙ светодиод, подключенный к выводу RB3 на нашей плате Perf.
void main (void) {// Объявления переменных области // int get_value; // Конец объявления переменной // // Объявления ввода-вывода // TRISB3 = 0; // Конец объявления ввода / вывода // Initialize_Bluetooth (); // давайте подготовим наш bluetooth к действию // покажем какое-нибудь вводное сообщение один раз при включении // BT_load_string ("Bluetooth Initialized and Ready"); broadcast_BT (); BT_load_string («Нажмите 1, чтобы включить светодиод»); broadcast_BT (); BT_load_string («Нажмите 0, чтобы выключить светодиод»); broadcast_BT (); // Конец сообщения // while (1) // Бесконечный цикл {get_value = BT_get_char (); // Читаем символ. получено через BT // Если мы получим '0' // if (get_value == '0') {RB3 = 0; BT_load_string («светодиод выключен»); broadcast_BT (); } // Если мы получим '1' // if (get_value == '1') {RB3 = 1; BT_load_string («светодиод включен»); broadcast_BT ();}}}
Проверьте полную программу в разделе кода ниже.
Принципиальная схема и настройка оборудования:
Схема подключения для этого проекта очень проста, нам просто нужно включить модуль Bluetooth и подключить Tx к 26- му контакту PIC и Rx к 25- му контакту PIC, как показано на принципиальной схеме ниже:
Теперь перейдем к аппаратному обеспечению. Как только соединение будет установлено, оно должно выглядеть примерно так.
Управление светодиодом с помощью мобильного приложения Bluetooth:
Теперь давайте подготовим наше приложение для Android. Загрузите приложение Bluetooth Terminal из магазина приложений или воспользуйтесь этой ссылкой. После того, как приложение загружено и установлено, включите вашу плату PIC Perfomance, которую мы используем с самого начала. Небольшой светодиодный индикатор на вашем модуле Bluetooth должен мигать, указывая, что он включен и активно ищет телефон для установления соединения.
Теперь войдите в настройки Bluetooth вашего телефона и найдите новое устройство Bluetooth, вы должны увидеть имя HC-05 или HC-06 в зависимости от вашего модуля. Я использую HC-06, поэтому на моем телефоне отображается следующий экран. Затем попробуйте выполнить сопряжение с ним, и он запросит пароль. Введите пароль 1234 (для некоторых это может быть 0000) и нажмите OK, как показано ниже.
После успешного сопряжения откройте приложение Bluetooth Terminal, которое мы только что установили. Войдите в опцию настроек и выберите «Подключить устройство - Безопасность», как показано ниже. Откроется всплывающее окно, в котором будут перечислены все сопряженные устройства, как показано ниже. Выберите модуль HC-05 или HC-06.
После установления соединения индикатор на модуле Bluetooth, который мигал до сих пор, должен был стать постоянным, чтобы указать, что он успешно подключился к вашему мобильному телефону. И мы должны получить вводное сообщение от нашей программы, как показано ниже.
Теперь нажмите «1», чтобы включить светодиод, и нажмите «0», чтобы выключить свет. Полная работа будет показана в видео. Экран вашего мобильного телефона будет выглядеть примерно так, как показано ниже.
Итак, ребята, мы узнали, как подключить модуль Bluetooth к нашему микроконтроллеру PIC, теперь с его помощью мы можем попробовать беспроводные проекты. Есть много проектов, которые используют Bluetooth, вы можете попробовать их или придумать свою собственную идею и поделиться ими в разделе комментариев. Также проверьте наш предыдущий проект с приложением Bluetooth-терминала и HC-05, например, «Домашняя автоматизация под управлением смартфона с использованием Arduino» и «Цифровой кодовый замок, управляемый смартфоном с использованием Arduino».
Надеюсь, этот урок вам помог! Если где-то застряли, воспользуйтесь разделом комментариев.