这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【STM32WBA55CG开发板】圣诞氛围灯的实现(控制加状态采集)

共1条 1/1 1 跳转至

【STM32WBA55CG开发板】圣诞氛围灯的实现(控制加状态采集)

高工
2025-01-19 11:24:09     打赏

        上一贴我们实现了SGP30模块的基本数据的采集,接下来我们通过同样的方式用另一个LPUART实现雷达模块的采集,这里就简单叙述一下。

1、雷达模块

        雷达模块基于毫米波雷达体制实现人体生物存在感知及人体运动感知,这个模块的功能有很多,我们这里主要实现的是是否有人的状态采集,雷达模块采用的是上报和查询模式并存的方式,硬件连接方面采用的是LPUART接口:

image.png

        LPUART可以在低功耗情况下持续运行,其他和USART完全一样,雷达模块的波特率是115200。

        还有一个特殊的连接,就是雷达模块的供电控制,这里使用的是继电器进行开关控制:

image.png

        因为来打模块上电会发送一些状态数据,虽然这些我们可以不接收,不过通过测试发现,有可能会造成STM32进入硬件错误报警,所以我们需要再开启串口中断接收程序后,在给雷达模块上电。

        初始化部分的程序如下:

HAL_UART_Receive_IT(&hlpuart1, (uint8_t *)LPRxBuff, 1);
__HAL_UART_CLEAR_IDLEFLAG(&hlpuart1);  
__HAL_UART_ENABLE_IT(&hlpuart1,UART_IT_IDLE); 
HAL_GPIO_WritePin(PA7_GPIO_Port, PA7_Pin, GPIO_PIN_SET);
delay_ms(2000);
HAL_UART_Transmit(&hlpuart1,CloseHumPre,10,0xffff);

        处理函数和SGP30模块的相类似:

if(LPCOM_Flag[0] == 1)
{
    HAL_UART_Transmit(&hlpuart1,CheckHumPre,10,0xffff);
    LPCOM_Flag[0] = 2;

}
if(LPRx_Flag[0]==0x01)
{
    LPRx_Flag[0] = 0;
    if(LPRxBuff[2] == 0x80 && LPRxBuff[3] == 0x81 && LPCOM_Flag[0] == 2)
    {
        HumPre_Flag = LPRxBuff[6];
        LPCOM_Flag[0] = 0;
    
    }
}

        最后获取的只有人体存在状态数据。

2、蓝牙demo的改装

        很多网友已经分享了蓝牙demo的使用,确实使用demo非常的方便,为了配合小程序功能的实现,我们梳理了一下整体性能参数都有哪些,最终实现如下参数:

        开关控制;亮度控制(PWM相关);温度;湿度:CO2;TVOC;电池电量;

        为此我们修改小程序内容,增加显示为如下:

<!-- 人员状态显示控件 -->
  <view class="display-item">
    <text>人员状态:</text>
    <text>{{HumPre}} </text>
  </view>
  <!-- 温度显示控件 -->
  <view class="display-item">
    <text>温度:</text>
    <text>{{temperature}} ℃,分辨率0.1</text>
  </view>
  <!-- 湿度显示控件 -->
  <view class="display-item">
    <text>湿度:</text>
    <text>{{humidity}} %,分辨率0.1</text>
  </view>
  <!-- CO2显示控件 -->
  <view class="display-item">
    <text>CO2:</text>
    <text>{{CO2}} ppm</text>
  </view>
  <!-- TVOC显示控件 -->
  <view class="display-item">
    <text>TVOC:</text>
    <text>{{TVOC}} ppb</text>
  </view>
  <!-- TVOC显示控件 -->
  <view class="display-item">
    <text>电池电压:</text>
    <text>{{BatV}} mV</text>
  </view>

        注意开关控制和亮度控制我们使用的是FE 41 对应的蓝牙服务,其他参数使用的是FE 42 对应的蓝牙服务,对应上报的部分(FE 42)我们只需要P2P_SERVER_Switch_c_SendNotification中的上报数据结构就可以:

a_P2P_SERVER_UpdateCharData[0] = Data_T>>8; 
a_P2P_SERVER_UpdateCharData[1] = Data_T;
a_P2P_SERVER_UpdateCharData[2] = Data_H>>8;
a_P2P_SERVER_UpdateCharData[3] = Data_H;
a_P2P_SERVER_UpdateCharData[4] = Data_CO2>>8;
a_P2P_SERVER_UpdateCharData[5] = Data_CO2;
a_P2P_SERVER_UpdateCharData[6] = Data_TVOC>>8;
a_P2P_SERVER_UpdateCharData[7] = Data_TVOC;
a_P2P_SERVER_UpdateCharData[8] = HumPre_Flag;
a_P2P_SERVER_UpdateCharData[9] = uhADCxConvertedData[0]>>8;
a_P2P_SERVER_UpdateCharData[10] = uhADCxConvertedData[0];
/* Update notification data length */
p2p_server_notification_data.Length = (p2p_server_notification_data.Length) + 11;

        这里有一点需要注意的是需要修改对应的配置:

image.png

        这里的Value length的数值要大于你实际的发送的数值。

        而控制部分都是使用的(FE 41)通道,我们直接修改P2P_SERVER_Notification中的对应代码就可以:

case P2P_SERVER_LED_C_WRITE_NO_RESP_EVT:

    if(p_Notification->DataTransfered.p_Payload[0] == 0x00)
    {
        if(p_Notification->DataTransfered.p_Payload[1] == 0x01)
        {

            LED_flag = 1;

        }
        if(p_Notification->DataTransfered.p_Payload[1] == 0x00)
        {

            __HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_2,0);

        }
    }
    else if(p_Notification->DataTransfered.p_Payload[0] == 0x03 && (LED_flag == 1))
    {
        __HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_2,p_Notification->DataTransfered.p_Payload[1]*10);
    }

  break;

3、氛围灯的LED控制

        这里我们使用的是PWM控制,对应的是定时器3的2通道,基本配置如下图:

image.png

4、整体的硬件连接

image.png

5、效果视频

        整体的简介视频如下:

        【氛围灯控制以及状态采集展示】 https://www.bilibili.com/video/BV19rwqe4Efb/?share_source=copy_web&vd_source=b04da51472e5874aa452f4a273672c46

6、总结

        通过本次活动我们初步掌握了STM32WBA55的蓝牙通信功能的基本使用的,确实非常的便捷,结合这STM32CubeMX的应用,可以对相关参数进行快速修改,demo设涉及的开发环境也很多,可以选择自己喜欢的进行程序开发。这次活动也让我们掌握了基本的SGP30模块和来打模块的使用,让我们熟悉了STM32基于HAL库的串口接收不定长数据的方式和处理方法。

        但是也有一点遗憾,就是在最后没有把电源管理部分加进去,原定设计是通过电池供电,可以进行USB和太阳能供电,这一部分的连接没有问题,主要问题出在了这两个传感器模块需要5V供电,电池供电有点不太够,缺少了一个升压模块的存在,所以最后电池电量的ADC采集并没有连接,采集的电压也是百mV级别的,这个可能就是底噪了。希望后续可以把这一部分都加进去,不过不是这样连线的方式了,可以看到硬件链接图中,已经将电地等信号进行了快接扩展,后续可以只是用射频板进行扩展设计,把圣诞氛围灯立起来。




关键词: STM32WBA55CG     氛围灯     SERVER    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]