• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

【代码库】通过 FRDM-MCXW71 上的 BLE 无线 UART 控制 LED

09/03 16:57
565
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

dm-mcx-wireless-uart-leds-main.zip

共1个文件

通过 FRDM-MCXW71 上的 BLE 无线 UART 控制 LED

此演示允许用户通过串行终端与设备交互。它还允许用户通过智能手机通过 IoT Toolbox 发送的命令更改 LED 的颜色。

主板:FRDM-MCXW71、FRDM-MCXW7X

类别:无线连接

外设:GPIO、UART

工具链:MCUXpresso IDE、IAR

目录

  1. 软件
  2. 硬件
  3. 设置
  4. 结果
  5. 常见问题解答
  6. 支持
  7. 发行说明

1.软件

此代码使用 MCUXpresso IDE 版本 11.9.0 和 SDK 版本 2.16.000 实现。

笔记:

要在 MCXW71 中使用任何无线示例,请上传 NBU 镜像。此镜像包含在您在本例中使用的 SDK 版本中:

2.硬件

购买支持的主板:

3. 设置

3.1 步骤 1

使用 MCUXpresso IDE 页面文档部分中的“MCUXpresso IDE - 用户指南”的以下部分将项目“w_uart”导入 MCUXpresso IDE

笔记:

要在 IoT 工具箱中查看无线 UART,请在应用程序中更改 GAP 角色:按 SW4,然后按 SW2。

待定

3.2 第 2 步

将无线 UART 示例导入工作区后,添加正确的配置以启用 LED 命令。以下部分介绍了您应该关注的主要方面:

  • wireless_uart.c文件

需要此文件来添加声明、变量,并包含配置 LEDS 命令的说明:

声明和变量:

c
uint8_t command_uart;
uint8_t command_lenght;

必要功能:

需要声明并创建将 LED 配置到项目中的函数:

```c
void commandLed(void)
{
if (commanduart == '1' && commandlenght <= 2)
{
GPIOPortSet(GPIOA, 1U << 20U);
GPIO
PortSet(GPIOA, 1U << 19U);
GPIO_PortSet(GPIOA, 1U << 21U);

    gpio_pin_config_t rgbled_config = {
        kGPIO_DigitalOutput,
        0,
    };

    PORT_SetPinMux(PORTA, 21U, kPORT_MuxAsGpio);
     GPIO_PinInit(GPIOA, 21U, &rgbled_config);
     GPIO_PortClear(GPIOA, 1U << 21U);
     GPIO_PortSet(GPIOA, 1U << 20U);
     GPIO_PortSet(GPIOA, 1U << 19U);
}
else if (command_uart == '2' && command_lenght <= 2)
{
    gpio_pin_config_t rgbled_config = {
        kGPIO_DigitalOutput,
        0,
    };

    PORT_SetPinMux(PORTA, 20U, kPORT_MuxAsGpio);
     GPIO_PinInit(GPIOA, 20U, &rgbled_config);
     GPIO_PortClear(GPIOA, 1U << 20U);
     GPIO_PortSet(GPIOA, 1U << 19U);
     GPIO_PortSet(GPIOA, 1U << 21U);

}
else if (command_uart == '3' && command_lenght <= 2)
{
    gpio_pin_config_t rgbled_config = {
        kGPIO_DigitalOutput,
        0,
    };

    PORT_SetPinMux(PORTA, 19U, kPORT_MuxAsGpio);
     GPIO_PinInit(GPIOA, 19U, &rgbled_config);
     GPIO_PortClear(GPIOA, 1U << 19U);
     GPIO_PortSet(GPIOA, 1U << 20U);
     GPIO_PortSet(GPIOA, 1U << 21U);
}
else if (command_uart == '0' && command_lenght <= 2)
{

    gpio_pin_config_t rgbled_config = {
        kGPIO_DigitalOutput,
        0,
    };

    PORT_SetPinMux(PORTA, 21U, kPORT_MuxAsGpio);
    GPIO_PinInit(GPIOA, 19U, &rgbled_config);
    GPIO_PinInit(GPIOA, 20U, &rgbled_config);
    GPIO_PinInit(GPIOA, 21U, &rgbled_config);


    GPIO_PortClear(GPIOA, 1U << 20U);
    GPIO_PortClear(GPIOA, 1U << 21U);
    GPIO_PortClear(GPIOA, 1U << 19U);

}
else
{
    gpio_pin_config_t rgbled_config = {
        kGPIO_DigitalOutput,
        0,
    };

    PORT_SetPinMux(PORTA, 21U, kPORT_MuxAsGpio);
    GPIO_PinInit(GPIOA, 19U, &rgbled_config);
    GPIO_PinInit(GPIOA, 20U, &rgbled_config);
    GPIO_PinInit(GPIOA, 21U, &rgbled_config);

    GPIO_PortSet(GPIOA, 1U << 19U);
    GPIO_PortSet(GPIOA, 1U << 20U);
    GPIO_PortSet(GPIOA, 1U << 21U);
}

}
```

无线 UART 示例中使用了 LED,以便用户以不同的方式与开发板交互。因此,需要在 BLE 功能中调用以下函数:

在BLE接收UART中调用命令LED函数:

c
static void BleApp_ReceivedUartStream
(
deviceId_t peerDeviceId,
uint8_t *pStream,
uint16_t streamLength
)

就在这一行之后:

```c

if (defined(SERIALMANAGERNONBLOCKINGMODE) && (SERIALMANAGERNONBLOCKINGMODE > 0U))

    serial_manager_status_t status = SerialManager_InstallTxCallback((serial_write_handle_t)s_writeHandle, Uart_TxCallBack, pBuffer);
    (void)status;
    assert(kStatus_SerialManager_Success == status);

    (void)SerialManager_WriteNonBlocking((serial_write_handle_t)s_writeHandle, pBuffer, streamLength);

endif /SERIAL_MANAGER_NON_BLOCKING_MODE > 0U/

}

CommandLed();

/* update the previous device ID */
previousDeviceId = peerDeviceId;

}
```

用户使用智能手机发送的命令需要在函数中捕获:

```c
static void BleAppGattServerCallback
(
deviceId
t deviceId,
gattServerEventt *pServerEvent
)
{
uint16
t tempMtu = 0;

switch (pServerEvent->eventType)
{
    case gEvtAttributeWrittenWithoutResponse_c:
    {
        if (pServerEvent->eventData.attributeWrittenEvent.handle == (uint16_t)value_uart_stream)
        {
            command_uart = *pServerEvent->eventData.attributeWrittenEvent.aValue;
            command_lenght = pServerEvent->eventData.attributeWrittenEvent.cValueLength;

            BleApp_ReceivedUartStream(deviceId, pServerEvent->eventData.attributeWrittenEvent.aValue,
                                      pServerEvent->eventData.attributeWrittenEvent.cValueLength);
        }

        break;
    }
    .
    .
    .
}
.
.
.

}
```

4. 运行演示

当 MCXW71 通电时,它开始发挥广告作用,您可以使用 IoT Toolbox 应用程序连接您的智能手机:

将手机与 MCXW71 连接后,您会在终端窗口中看到此消息:

结果1

您可以从手机向终端发送消息:

待定

您可以使用“命令”在屏幕之间切换:

RGB 白色(命令‘0’)

RGB 红色(命令‘1’)

RGB 蓝色(命令‘2’)

RGB 绿色(命令‘3’)

** 任何其他命令“RGB OFF”

5. 常见问题解答

6. 支持

项目元数据

董事会徽章 董事会徽章

类别徽章

周边徽章 周边徽章

工具链徽章 工具链徽章

有关此示例的内容/正确性的问题可以作为此 GitHub 存储库中的问题输入。

来源:恩智浦appcodehub

  • dm-mcx-wireless-uart-leds-main.zip
    下载
恩智浦

恩智浦

恩智浦半导体创立于2006年,其前身为荷兰飞利浦公司于1953年成立的半导体事业部,总部位于荷兰埃因霍温。恩智浦2010年在美国纳斯达克上市。恩智浦2010年在美国纳斯达克上市。恩智浦半导体致力于打造全球化解决方案,实现智慧生活,安全连结。

恩智浦半导体创立于2006年,其前身为荷兰飞利浦公司于1953年成立的半导体事业部,总部位于荷兰埃因霍温。恩智浦2010年在美国纳斯达克上市。恩智浦2010年在美国纳斯达克上市。恩智浦半导体致力于打造全球化解决方案,实现智慧生活,安全连结。收起

查看更多

相关推荐