通过前面的功能实现,我们将主要的基本功能都是实现了:
LED灯的控制与电池电压采集:
https://forum.eepw.com.cn/thread/389424/1
蓝牙相关:
https://forum.eepw.com.cn/thread/389423/1
接下来就是把这些内容融合到一起,让这些成为一个独立的蓝牙控制的台灯,可以试试检测供电电池电压,简述一些硬件模块:
供电部分可以通过电池供电也可以通过USB供电,这里用到了一个电源管理模块(带开关的)可以实现充电、开关控制、LDO输出等功能;
采集部分为电池电量采集,通过电阻分压;
LED灯珠控制部分通过PWM控制,这里加了一个开关电路,有电池直接供电;开发板通过电源管理的LED输出进行供电。
整体实物连接效果如下:

上位机采用的是讲师分享的微信小程序方式进行控制,这样的方式有一点好处现实的内容可控,可以根据我们自己的要求进行显示内容的变化,不止是HEX的数据格式,更加的直观,我们本次显示的内容是电池电压,这里我们可以通过修改小程序的显示内容:
<!-- 电压显示控件 -->
<view class="display-item">
<text>电池电压:</text>
<text>{{temperature}} mV</text>
</view>这里偷懒了,直接用解析的temperature数据进行显示。
对应的开发板的程序需要进行适配管理,主要的内容就是如下:
定时采集电池电压,这里是通过定时器17进行定时1s采集:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == TIM17) {
HAL_IncTick();
ADC_cnt++;
if(ADC_cnt > 100)
{
ADC_cnt = 0;
if (HAL_ADC_Start(&hadc4) != HAL_OK)
{
/* ADC conversion start error */
Error_Handler();
}
/* Wait for ADC conversion completed */
if (HAL_ADC_PollForConversion(&hadc4, 10) != HAL_OK)
{
/* End Of Conversion flag not set on time */
Error_Handler();
}
uhADCxData = HAL_ADC_GetValue(&hadc4);
uhADCxData = uhADCxData*3300/4096*2;
uhADCxConvertedData[0] = uhADCxData;
UTIL_SEQ_SetTask( 1<<CFG_TASK_SEND_NOTIF_ID, CFG_SEQ_PRIO_0);
}
}
}这里采集完数据之后直接启动CFG_TASK_SEND_NOTIF_ID认为发送,对应的数据发送需要修改一下:
a_P2P_SERVER_UpdateCharData[0] = uhADCxConvertedData[0]>>8; /* Device Led selection */ a_P2P_SERVER_UpdateCharData[1] = uhADCxConvertedData[0];
P2P_SERVER_Switch_c_SendNotification(void)中主要是修改这两处就可以实现数据发送关联了;
而LED灯珠的控制测试在P2P_SERVER_Notification中进行:
case P2P_SERVER_LED_C_WRITE_NO_RESP_EVT:
/* USER CODE BEGIN Service1Char1_WRITE_NO_RESP_EVT */
if(p_Notification->DataTransfered.p_Payload[0] == 0x00)
{
if(p_Notification->DataTransfered.p_Payload[1] == 0x01)
{
BSP_LED_On(LED_BLUE);
LED_flag = 1;
LOG_INFO_APP("-- P2P APPLICATION SERVER : LED1 ON\n");
P2P_SERVER_APP_Context.LedControl.Led1 = 0x01; /* LED1 ON */
}
if(p_Notification->DataTransfered.p_Payload[1] == 0x00)
{
BSP_LED_Off(LED_BLUE);
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_2,0);
LED_flag = 0;
LOG_INFO_APP("-- P2P APPLICATION SERVER : LED1 OFF\n");
P2P_SERVER_APP_Context.LedControl.Led1 = 0x00; /* LED1 OFF */
}
}
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);
}
/* USER CODE END Service1Char1_WRITE_NO_RESP_EVT */
break;可以看到我们没有更改之前的控制(蓝灯的控制),在此基础上我们增加了LED灯珠的控制,开启和关闭是同步的,而亮度是只有在开启的情况下才会进行控制。
综合的视频展现和讲解如下:
【WBA55CG无线MCU开发大作战效果展示】 https://www.bilibili.com/video/BV1FacgedEu2/?share_source=copy_web&vd_source=1a9d212763ed1cd1e393681740edda64
我要赚赏金
