Bluetooth модуль для микроконтроллеров

STM Урок 97. Подключаем bluetooth-модуль HC-05

Настало время немного отдохнуть от передачи данных по интерфейсу LAN.

Сегодня мы попробуем передать данные с микроконтроллера куда-нибудь, а также обратно, используя уже беспроводные технологии, то есть такие технологии, благодаря которым передача данных происходит без использования каких-либо проводов.

В качестве технологии беспроводной передачи данных мы будем использовать Bluetooth. А в качестве устройства для этого мы возьмём модуль HC-05, обзор и тестирование которого находится вот здесь. Обязательно просмотрите данный обзор и проделайте все тесты, описанные в нём, также установите программу на смартфон, которая была представлена в этом обзоре, а потом уже приступайте к изучению подключения модуля к контроллеру. То есть проект сегодняшнего занятия будет нормально работать на настроенном модуле.

Мы подключим данный модуль к контроллеру STM32F103C8T6, расположенному на недорогой отладочной плате, которая нам уже отлично знакома благодаря многочистенным урокам, которые мы просмотрели и прочитали.

Сначала давайте создадим и настроим проект.

Создадим новый проект в Cube MX, выбрав контроллер STM32F103C8Tx.

Настроим тактирование от кварцевого резонатора

Image01

Image02

Настроим USART. Использовать для модуля мы будем USART2, так как первый в дальнейшем нам, возможно пригодится для подключения переходника USB-TTL для связи с ПК

image00

image05

Включим ножку порта PC13, отвечающую за светодиод, на выход

Image04

Также на выход включим ножку PA5, посредством которой мы будем включать модулю поддержку AT-команд, правла пока не в данном уроке

image01

Настроим частоты в System Configuration (нажмите на картинку для увеличения изображения)

Image06_0500

Теперь перейдём в раздел Configuration, USART трогать не будем, оставим настройки по умолчанию (скорость 115200 кбпс), а вот ножкe порта PA5 настроим чуть побыстрее

image02

Тем не менее в настройки USART нам зайти придётся для, того, чтобы включить прерывания, мы же и на вход будем его использовать

image03

Настроим таймер на период приблизительно 2 секунды

image06

Также включим в таймере прерывания

image07

Настроим проект, увеличив размер стека и кучи в двое (на будущее) и выбрав в качестве среды разработки Keil, а также назовём наш проект соответствующим теме занятия именем

image04

Применим настройки, соберём проект, откроем его в Keil, настроим программантор на авторезет, а также уровень оптимизации убавим до уровня 1.

Давайте посмотрим схему подключения модуля к контроллеру (нажмите на картинку для увеличения изображения)

image08_0500

Вернёмся к проекту и добавим в main.c библиотеку для работы со строками

Добавим также глобальный строковый массив

char str1[60]=;

В main() инициируем приём данных в USART, а также запустим наш таймер

HAL_TIM_Base_Start_IT(&htim2);

Добавим глобальную структуру для свойств USART, а также переменную её типа

typedef struct USART_prop

Читайте также:  Samsung телевизор usb bluetooth

uint8_t usart_buf [60];

uint8_t usart_cnt ;

uint8_t is_tcp_connect ; //статус попытки создать соединение TCP с сервером

uint8_t is_text ; //статус попытки передать текст серверу

> USART_prop_ptr ;

USART_prop_ptr usartprop;

Тажке добавим глобальную переменную для счётчика выводимых в модуль строк, а также массив этих самых строк

Добавим также функцию разбора строки. Пока она будет почти пустая. Наполняться она будет в более поздних занятиях, а пока же в ней будет лишь изменение состояния свечения светодиода, а также возврат эхом строки источнику, его пославшему, то есть в нашем случае смартфону посредством передачи в USART

void string_parse( char * buf_str)

HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);

Теперь добавим обработчик приёма символа из USART

void UART2_RxCpltCallback( void )

//если вдруг случайно превысим длину буфера

if (usartprop. usart_cnt >59)

usartprop. usart_cnt =0;

usartprop. usart_buf [usartprop. usart_cnt ] = b;

usartprop. usart_buf [usartprop. usart_cnt +1]=0;

string_parse(( char *)usartprop. usart_buf );

usartprop. usart_cnt =0;

usartprop. usart_cnt ++;

Данный обработчик принимает символ из порта USART, заносит его в буфер по адресу, находящемуся в счётчике, проверяет на символ перевода строки, если таковой имеет место, то приём прекращается, набранная в буфере строка передаётся в функцию разбора строки и счётчик обнуляется, если другой символ, то счётчик наращивается. Также на ряду с этим в функцию был включен код проверки на превышение строкой размера буфера.

Добавим теперь официальный обработчик приёма из USART, в котором и вызовем наш «самодельный» обработчик

void HAL_UART_RxCpltCallback( UART_HandleTypeDef *huart)

if (huart==&huart2)

UART2_RxCpltCallback();

Соберём код, прошьём контроллер и проверим работу кода в терминальной программе на смартфоне.

Чтобы не мучиться и постоянно не вводить строки, в программе предусмотрены пять кнопок, в обработчики нажатий которых можно добавить любые строки. Вот эти кнопки

image09

Давайте, например, пятой кнопке назначим строку, которую она будет по нажатию отправлять в bluetooth. Зайти в настройки мы можем по нажатию на кнопку

image10

Мы можем здесь настроить несколько параметров. Изменить имя кнопки (имя отображаемое на самой кнопке, также тип данных, саму отправляемую строку, а также заканчивать ли строку кодами возврата каретки и перевода строки. Настроим всё как на скриншоте и сохраним настройки. Теперь по нажатию на нашу кнопку строка, текст которой мы добавили в поле Command, будет отправляться в порт. Конечно, будет логичный вопрос: «а как же зайти обратно в настройки и перенастроить свойства кнопки?». Ответ: «посредством длинного нажатия на кнопку (длинного тапа)»

Нажмём на кнопку и строка наша из кнопки попадёт в чат отправки, а также попадёт и в чат приёма. А в чат приёма она попадёт благодаря эху в функции разбора строки. Тем самым мы проверили, что строка отправляется в микроконтроллер и отправляется обратно из микроконтроллера в смартфон посредством подключенного модуля HC-05

image11

Теперь давайте добавим также обработчик события от таймера, благодаря которому строки из массива будут отправляться в смартфон

Читайте также:  Dualshock 4 windows 10 bluetooth сопряжено

void HAL_TIM_PeriodElapsedCallback( TIM_HandleTypeDef *htim)

if (htim==&htim2)

HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);

Соберём в очередной раз код и прошьём контроллер. После этого строки приблизительно раз в 2 секунды из нашего контроллера по интерфейсу bluetooth будут приходить в окно терминальной программе на смартфоне

image12

Отлично! Строки приходят, причём за период в 2 секунды контроллер может выполнять любые операции благодаря использованию прерывания от таймера. проверим это, нажимая на нашу кнопку со строкой в терминальной программе смартфона. Если всё нормально, то строки, посланные по кнопке, должны эхаться практически мгновенно, не дожидаясь вывода следующей строки из МК

image13

Так и есть, мы можем сколько угодно отправлять данные и они не уходят ни в какую очередь, прочесс рабоает мгновенно.

Таким образом, мы за столь короткий урок научились подключать модуль bluetooth HC-05 к микроконтроллеру, принимать и отправлять данные из контроллера и в контроллер другим устойствам с поддержкой bluetooth, в частности, смартфону.

Модуль bluetooth HC-05 можно купить здесь bluetooth HC-05

Отладочную плату можно приобрести здесь STM32F103C8T6

Программатор недорогой можно купить здесь ST-Link V2

Смотреть ВИДЕОУРОК (нажмите на картинку)

Источник

Подключение Bluetooth-модуля HC-05 к микроконтроллеру AVR ATmega8

В этой статье мы рассмотрим подключение Bluetooth-модуля HC-05 к микроконтроллеру ATmega8 (семейство AVR), а затем установим связь между смартфоном под управлением операционной системы Android и микроконтроллером ATmega8 с помощью Bluetooth-модуля, который будет использовать для связи с микроконтроллером универсальный асинхронный приемопередатчик (UART). Для контроля за успешностью процесса взаимосвязи будем использовать светодиод.

Подключение Bluetooth-модуля HC-05 к микроконтроллеру AVR ATmega8: внешний вид

Необходимые компоненты

Аппаратное обеспечение

  1. Микроконтроллер ATmega8 (купить на AliExpress).
  2. Программатор AVR-ISP (купить на AliExpress), USBASP (купить на AliExpress) или другой подобный.
  3. Bluetooth-модуль HC-05 (купить на AliExpress).
  4. 10-пиновый FRC кабель.
  5. Светодиод (купить на AliExpress).
  6. Макетная плата.
  7. Соединительные провода.
  8. Источник питания с напряжением 5 Вольт.

Программное обеспечение

CodeVisionAVR (или другое подобное, например, Atmel Studio)
SinaProg – для загрузки программы в микроконтроллер ATmega8 с помощью программатора USBASP

Скачать CodeVisionAVR — http://www.hpinfotech.ro/cvavr_download.html.

Общие принципы работы Bluetooth-модуля HC-05

Bluetooth-модуль может работать в двух режимах:

В режиме управления можно конфигурировать свойства Bluetooth-модуля такие как: имя источника сигнала Bluetooth, пароль, бодовая скорость и т.д. В режиме функционирования можно получать и передавать данные между Bluetooth-модулем и микроконтроллером, поэтому в данном проекте мы будем использовать режим функционирования. Для режима управления оставим его настройки по умолчанию. То есть имя устройства будет HC-05 (автор статьи использует HC-06), пароль будет 0000 или 1234, а скорость передачи будет равна 9600 бод/с.

Внешний вид Bluetooth-модуля HC-05

Модуль работает при напряжении питания 5В, а его сигнальные контакты оперируют напряжением 3.3В, поэтому регулятор данного напряжения (3.3В) присутствует в данном модуле. Следовательно, нам не нужно беспокоиться о стабильности этого напряжения. У модуля 6 выходных контактов, но в режиме функционирования используются только 4. Схема соединения контактов модуля приведена в следующей таблице.

Создание проекта для ATmega8 в программной среде CodeVision

Аналогичные операции можно произвести и в других программных средах для программирования микроконтроллеров AVR, например, Atmel Studio.

Читайте также:  Телефон забыл блютуз наушники

После установки CodeVision вам необходимо выполнить следующие ниже перечисленные шаги чтобы создать проект и написать программу.

Шаг 1. Создайте новый проект в CodeVision, выбрав пункт меню File -> New -> Project. В появившемся диалогом окне нажмите Yes.

Создание нового проекта в CodeVision

Шаг 2. Откроется CodeWizard. Кликните в ней на первой опции, то есть AT90, затем нажмите OK.

Выбор первой опции в CodeVision

Шаг 3. Выберите свой микроконтроллер, в нашем случае им будет Atmega8.

Выбор модели микроконтроллера в CodeVision

Шаг 4. Кликните на Ports (порты). В нашем проекте мы будем использовать Port C4 и C5 для управления светодиодом. Таким образом, необходимо сконфигурировать биты 4 и 5 как выходные кликнув на них, как показано на рисунке:

Выбор портов в CodeVision

Шаг 5. Мы будем использовать универсальный асинхронный последовательный приемопередатчик (USART) для Rx и Tx (приема и передачи данных). Поэтому необходимо выбрать настройки USART, в них кликнуть на настройки приема и оставить их по умолчанию.

Выбор параметров последовательного порта в CodeVision

Шаг 6. Выберите Program -> Generate, Save and Exit. Теперь более половины вашей работы по программированию микроконтроллера Atmega8 можно считать выполненной.

Выбор опций сохранения в CodeVision

Шаг 7. Создайте новую папку на рабочем столе чтобы записывать туда наши файлы.

Выбор директория для сохранения проекта

У нас будет 3 диалоговых окна (будут появляться последовательно одно за другим) для сохранения наших файлов.

Сделайте то же самое (что и на представленном рисунке) с двумя другими диалоговыми окнами – то есть сохраните предлагаемые ими файлы.

После этого рабочая область программы будет выглядеть следующим образом:

Фрагмент кода программы в CodeVision

Теперь большая часть работы по программированию микроконтроллера Atmega8 нами выполнена с использованием такой удобной программной среды как CodeVision. Но ели вы не хотите использовать данную программную среду, то вы можете запрограммировать работу с последовательным портом микроконтроллера вручную по аналогии с последовательностью действий в таких статьях на нашем сайте как:

Работа схемы

Схема подключения Bluetooth-модуля HC-05 к микроконтроллеру AVR ATmega8 приведена на следующем рисунке.

Схема подключения Bluetooth-модуля HC-05 к микроконтроллеру AVR ATmega8

Подключите одну сторону FRC кабеля к программатору USBASP, а другую к контактам SPI микроконтроллера.

Назначение контактов FRC кабеля

Необходимо сделать следующие соединения:
1. Pin1 of FRC female connector -> Pin 17 ,MOSI of Atmega8
2. Pin 2 connected to Vcc of atmega8 i.e. Pin 7
3. Pin 5 connected to Reset of atmega8 i.e. Pin 1
4. Pin 7 connected to SCK of atmega8 i.e. Pin 19
5. Pin 9 connected to MISO of atmega8 i.e. Pin 18
6. Pin 8 connected to GND of atmega8 i.e. Pin 8

Соедините остальные компоненты на макетной плате в соответствии с представленной выше схемой.

Пояснение части кода программы

Полный код программы вместе с видео, демонстрирующим работу схему, приведен в конце статьи. В этой же части статьи мы лишь поясним как правильно объявить переменные в программе, в которых будут храниться символы, поступающие от Bluetooth-модуля.

Источник

Оцените статью
Adblock
detector