Цель этого проекта Bluetooth LE – считывать данные датчика качества воздуха и отображать их на ЖК-дисплее, подключенном к плате STM32. Веб-браузер считывает данные датчика и передает их на плату STM32 с помощью BleuIO.


Вступление


Проект основан на STM32 Nucleo-144, который управляет ЖК-дисплеем с помощью BleuIO.


Для этого проекта нам понадобятся [два USB-ключа BleuIO] (https://www.bleuio.com/), один из которых подключен к плате Nucleo, а другой — к компьютеру, на котором запущен веб-скрипт, и HibouAir — устройство для мониторинга качества воздуха . Когда BleuIO Dongle подключен к USB-порту платы Nucleo, STM32 распознает его и сразу начнет рекламу. Это позволяет ключу на порту компьютера подключаться к веб-скрипту.


С помощью веб-скрипта на компьютере мы можем сканировать и получать данные датчика качества воздуха от HibouAir. Затем мы отправляем эти данные на ЖК-экран, подключенный к STM32 с помощью Bluetooth.


В этом примере мы использовали плату разработки STM32 Nucleo-144 с микроконтроллером STM32H743ZI (STM32H743ZI с поддержкой micro mbed Development Nucleo-144, серия ARM® Cortex®-M7 MCU, 32-разрядная встроенная оценочная плата). Эта плата разработки имеет USB-хост, к которому мы подключаем ключ BleuIO.


Если вы хотите использовать другую настройку, вам нужно убедиться, что она поддерживает USB-хост, и помнить, что настройка GPIO может отличаться и может потребоваться перенастройка в файле .ioc.


О коде


Исходный код проекта доступен на Github.


Либо клонируйте проект, либо загрузите его в виде zip-файла и разархивируйте в рабочую область STM32CubeIDE.


Если вы загружаете проект в виде zip-файла, вам нужно будет переименовать папку проекта с «stm32_bleuio_lcd-master» на «stm32_bleuio_lcd».



Подключите SDA к PF0 на плате Nucleo, а SCL к PF1.


Затем настройте I2C2 в файле ioc STM32Cube следующим образом. (Обязательно измените частоту скорости I2C на 50 кГц в соответствии с требованиями ЖК-дисплея.)





В функции USBH_CDC_ReceiveCallback в USB_HOST\usb_host.c мы копируем CDC_RX_Buffer во внешнюю переменную с именем dongle_response, которая доступна из файла main.c.


```нажмите


недействительным USBH_CDC_ReceiveCallback (USBH_HandleTypeDef * phost)


если (фост == &hUsbHostFS)


// Обрабатывает данные, полученные от хоста USB CDC, здесь просто распечатывает их на UART


rx_size = USBH_CDC_GetLastReceivedDataSize (фост);


HAL_UART_Transmit(&huart3, CDC_RX_Buffer, rx_size, HAL_MAX_DELAY);


// Копируем буфер во внешний буфер dongle_response


strcpy((char )dongle_response, (char )CDC_RX_Buffer);


// Сбросить буфер и перезапустить функцию обратного вызова, чтобы получить больше данных


набор памяти (CDC_RX_Buffer, 0, RX_BUFF_SIZE);


USBH_CDC_Receive(фост, CDC_RX_Buffer, RX_BUFF_SIZE);


возврат;


В main.c мы создаем простой интерпретатор, чтобы мы могли реагировать на данные, которые мы получаем от ключа.


```нажмите


недействительный ключ_интерпретатор (uint8_t * ввод)


если (стрлен ((символ *) ввод)! = 0)


if(strstr((char *)input, "\r
РЕКЛАМА...") != NULL)


реклама = правда;


if(strstr((char *)input, "\r
РЕКЛАМА ПРЕКРАЩЕНА") != NULL)


реклама = ложь;


if(strstr((char *)input, "\r
CONNECTED") != NULL)


Подключен = Истина;


HAL_GPIO_WritePin(GPIOE, GPIO_PIN_1, GPIO_PIN_SET);


if(strstr((char *)input, "\r
ОТКЛЮЧЕНО") != NULL)


Подключен = Ложь;


HAL_GPIO_WritePin(GPIOE, GPIO_PIN_1, GPIO_PIN_RESET);


if(strstr((char *)ввод, "L=0") != NULL)


isLightBulbOn = ложь;


//HAL_GPIO_WritePin(Lightbulb_GPIO_Port, Lightbulb_Pin, GPIO_PIN_RESET);


lcd_clear();


writeToDongle((uint8_t*)DONGLE_SEND_LIGHT_OFF);


uart_buf_len = sprintf(uart_tx_buf, "\r
Очистить экран\r
");


HAL_UART_Transmit(&huart3, (uint8_t *)uart_tx_buf, uart_buf_len, HAL_MAX_DELAY);


if(strstr((char *)input, "L=1") != NULL)


isLightBulbOn = истина;


writeToDongle((uint8_t*)DONGLE_SEND_LIGHT_ON);


lcd_clear();


lcd_write (ввод);


memset(&dongle_response, 0, RSP_SIZE);


Мы помещаем функцию интерпретатора в основной цикл.


```нажмите


/ Бесконечный цикл /


/ КОД ПОЛЬЗОВАТЕЛЯ НАЧИНАЕТСЯ, ПОКА /


пока (1)


/ КОД ПОЛЬЗОВАТЕЛЯ КОНЕЦ ПОКА /


MX_USB_HOST_Process();


/ КОД ПОЛЬЗОВАТЕЛЯ НАЧАЛО 3 /


// Простой обработчик ввода uart


обработатьUartInput(uartStatus);


// Интерпретирует данные ключа


dongle_interpreter(dongle_response);


// Начинает рекламу, как только ключ будет готов.


if(!isAdvertising && !isConnected && isBleuIOReady)


HAL_Delay(200);


writeToDongle((uint8_t*)DONGLE_CMD_AT_ADVSTART);


реклама = правда;


/ КОД ПОЛЬЗОВАТЕЛЯ КОНЕЦ 3 /


Использование примера проекта


Что нам понадобится


  • Два [ключа BleuIO] (https://www.bleuio.com/)

  • Плата с микроконтроллером STM32 с портом USB. (Для разработки этого примера использовалась макетная плата Nucleo-144: NUCLEO-H743ZI2. Для подключения ключа к плате Nucleo можно использовать кабель «USB A — Micro USB B» с переходником USB A «мама-мама». использоваться.)


  • [STM32CubeIDE] (https://www.st.com/en/development-tools/stm32cubeide.html)

  • Модуль жидкокристаллического дисплея — [NHD-0420D3Z-NSW-BBW-V3] (https://www.digikey.com/en/products/detail/newhaven-display-intl/NHD-0420D3Z-NSW-BBW-V3/ 2626390?s=N4IgTCBcDaIHIAkAiBaADAFjGpBmAWinAMoDqKAQheQGq4gC6AvkA)

  • [HibouAir] (https://www.hibouair.com/) — устройство для контроля качества воздуха.

Импорт в качестве существующего проекта


В STM32CubeIDE выберите File>Import…



Затем выберите «Общие»> «Существующие проекты» в рабочей области, затем нажмите «Далее >».



Убедитесь, что вы выбрали свое рабочее пространство в «Выбрать корневой каталог:»


Вы должны увидеть проект «stm32_bleuio_SHT85_example», проверьте его и нажмите «Готово».



Запуск примера


Загрузите код в STM32 и запустите пример. USB-ключ, подключенный к STM32, автоматически начнет рекламу.


Отправка данных датчика на ЖК-экран из веб-браузера


Подключите ключ BleuIO к компьютеру. Запустите веб-скрипт для подключения к другому ключу BleuIO на STM32. Теперь вы можете отправлять данные датчика на ЖК-экран.


Для работы этого скрипта нам нужно


  • [USB-ключ BleuIO] (https://www.bleuio.com/), подключенный к компьютеру.

  • [Библиотека javascript BleuIO] (https://www.npmjs.com/package/bleuio)

  • Chrome 78 или более поздней версии, и вам необходимо включить флаг #enable-experimental-web-platform-features в chrome://flags

  • Веб-бандер

Создайте простой HTML-файл с именем index.html, который будет служить интерфейсом скрипта. Этот HTML-файл содержит несколько кнопок, которые помогают подключиться, прочитать рекламные данные с HibouAir, чтобы получить данные датчика качества воздуха и отправить эти данные на ЖК-экран, который подключен к stm32.


```разметка




<голова>


<метакодировка="UTF-8" />




<ссылка


href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"


отн = "таблица стилей"


целостность = "sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3"


кроссоригин = "анонимный"


Данные датчика качества воздуха Bluetooth LE на ЖК-экран



<тело класс="мт-5">



<изображение


src="https://www.bleuio.com/blog/wp-content/themes/bleuio/images/logo.png"


Данные датчика качества воздуха Bluetooth LE на ЖК-экран


<дел класс = "строка">