App Inventor 2 — автоподключение к Bluetooth-устройству

В предыдущем руководстве я показал, как подключить Android-приложение на App Inventor к Bluetooth-модулю, подключённому к Arduino, для управления светодиодом. Смотрите Включение и выключение светодиода с Arduino, HC-06 и Android.

Несколько человек спрашивали, как сделать так, чтобы приложение автоматически подключалось к Arduino при запуске, и я решил предложить своё решение. Этот пример расширяет предыдущее руководство.

Самый простой способ добавить автоподключение — использовать фиксированный адрес и поместить вызов функции подключения в блок Screen1.Initialize. Поскольку блок Screen1.Initialize запускается автоматически при старте приложения, приложение будет пытаться установить соединение при каждом запуске.

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/martyncurrey/app-inventor-auto-connect-8.jpg

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

Лучший способ — позволить пользователю подключиться к любому BT-модулю и затем сохранить адрес для следующего раза. При повторном запуске приложение может использовать сохранённый адрес для автоподключения к Bluetooth-модулю. Сохраняя адрес при каждом новом подключении, пользователь может легко менять Bluetooth-модули.

Приложение

При первом запуске приложения нет сохранённого адреса, и приложение ожидает, пока пользователь установит соединение.

— Нажмите кнопку BT, чтобы открыть список сопряжённых устройств.
— Выберите одно из сопряжённых устройств, в моём случае HC-06.
— Если подключение успешно, кнопка BT меняется на «Connected».
— Адрес подключённого BT-устройства отображается на экране.
https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/martyncurrey/app-inventor-auto-connect-6.jpg

При следующем запуске приложение попытается автоматически подключиться к сохранённому устройству.

— Во время попытки подключения кнопка BT отображает «Connecting».
— Если подключение успешно, кнопка BT покажет «Connected».
https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/martyncurrey/app-inventor-auto-connect-7.jpg

Экран дизайнера

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/martyncurrey/app-inventor-auto-connect-9.jpg

Необходимые элементы экрана:

— Кнопка для активации процесса подключения.
— Метка для отображения сохранённого адреса.
— Кнопка LED для включения/выключения светодиода.
— Список для хранения списка сопряжённых устройств.

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

— TinyDB.
— Clock1.
— И, конечно, Bluetooth Client.

Блоки

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/martyncurrey/app-inventor-auto-connect-1.jpg

Основные детали

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/martyncurrey/app-inventor-auto-connect-2.jpg

Когда приложение запускается, вызывается функция Screen1.Initialize. Она извлекает сохранённый адрес Bluetooth из TinyDB и копирует его в глобальную переменную savedDeviceAddress, затем запускает таймер. Если сохранённого адреса нет, переменная устанавливается в "" и таймер не запускается.

Я использую таймер, чтобы обойти небольшую неприятность, вызванную особенностями работы App Inventor. Если блоки подключения размещены непосредственно в функции Screen1.Initialize, процесс подключения работает, но экран не обновляется корректно и текст кнопки «Connecting» не отображается.

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/martyncurrey/app-inventor-auto-connect-4.jpg

Когда таймер срабатывает, вызывается функция Clock1.Timer. Именно здесь приложение пытается подключиться к сохранённому адресу Bluetooth. Если подключение успешно, текст кнопки BT_BUTTON меняется на «Connected». Если подключение не удалось, отображается сообщение об ошибке. Функция также проверяет, включён ли Bluetooth, перед попыткой подключения.

Кнопка BT_BUTTON позволяет устанавливать новые подключения — при нажатии она активирует список и позволяет пользователю выбрать другое устройство. При новом подключении MAC-адрес подключённого BT-модуля сохраняется в TinyDB.

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/martyncurrey/app-inventor-auto-connect-3.jpg https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/martyncurrey/app-inventor-auto-connect-5.jpg

Остальной код аналогичен предыдущему примеру. Для подробностей смотрите Включение и выключение светодиода с Arduino, HC-06 и Android.

Скачать

Скачать файл App Inventor aia — arduinoBTcontrol_Basic_Saved_Connection (92.78 KB)