简介
在之前的章节中我们完成了完成蓝牙台灯的每一个步骤,那么在本章节中我们将代码整合在一起。使其通过微信小程序来控制台灯的亮度。下面我将介绍具体的实现步骤。一共是分为两个部分,分别是微信开发者工具的使用和STM32代码的编写。让我们逐步开始。
微信开发者工具的使用
首先我们在官网下载微信开发者工具。微信开发者工具
安装完成后扫码进行登录。
在主界面中选择导入项目。
项目中一共有两个比较重要的页面,分别是index.wxml 和 device.wxml. 两个文件分别管理蓝牙设备扫描链接和具体的设备交互等。由于这个项目并不是自己的独有项目,而是使用别人已经开发好的项目。 所以如果想预览这个项目的话需要将project.config.json中的appid换成自己的。如下图所示。
之后来修改位于device.xml page下的slider控件, 由于我们需要设置PWM的占空比来调整LED的亮度,因此,控件的MAX最好保持整数。我们在这里直接修改为100方便在程序中计算。
之后我们可以点击编译,然后点击预览。
此时我们便可以使用微信扫描这个二维码来打开这个小程序。到此为止。微信开发者工具的使用完毕。
STM32端代码修改
我们知道程序中所有控制蓝牙业务的代码都在STM32WPAN下的App目录下,我们在这里需要修改的是p2p_server_app.c
在程序的大概120行位置,判断蓝牙事件的P2P_SERVER_LED_C_WRITE_NO_RESP_EVT下,增加以下的代码控制。
case P2P_SERVER_LED_C_WRITE_NO_RESP_EVT: /* USER CODE BEGIN Service1Char1_WRITE_NO_RESP_EVT */ if (p_Notification->DataTransfered.p_Payload[1] == 0x01) { BSP_LED_On(LED_BLUE); 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); LOG_INFO_APP("-- P2P APPLICATION SERVER : LED1 OFF\n"); P2P_SERVER_APP_Context.LedControl.Led1 = 0x00; /* LED1 OFF */ } if (p_Notification->DataTransfered.p_Payload[0] == 0x03) { LOG_INFO_APP("Value 1 is %d\r\n", p_Notification->DataTransfered.p_Payload[1]); __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, (p_Notification->DataTransfered.p_Payload[1]) * 10); } /* USER CODE END Service1Char1_WRITE_NO_RESP_EVT */ break;
需要注意的一点是, 这里的占空比一定要对应初始化PWM时的计数器的值。具体的占空比需要自己计算。如下代码所示。
Counter 值为1000, Pulse值为800, 即占空比为80%, 所以在此处设置PWM的时候需要将silder中的值 * 100 倍。 这样正好在0 - 1000 之间。从而来控制PWM的亮度。也别忘了htim2的外部定义。
extern TIM_HandleTypeDef htim2;
此时便可以通过手机端来扫描开发板蓝牙的广播从而发送数据来控制台灯的亮度了。
效果展示
1-搜索界面
2- 连接成功界面和具体的PWM值
对应的灯珠亮度和示波器输出。
50 % 占空比左右的PWM输出和灯珠亮度。
100% 占空比的灯珠亮度和PWM输出。
成果视频
https://www.bilibili.com/video/BV1EkcWexEtV/?vd_source=fa81ee8dac5a78e9ccb692c6642f6fe2
工程文件