首先非常荣幸能够参与此次内测,虽然自己现在不是从事这个行业了,但是我依然对它热爱着。而且通过这个内测,自己也对物联网开发有了新的认识,因为之前做的时候只是做底层部分,并未涉及上层相关。
接着说说开发板部分,设计方面看得出是非常用心的,比如模组接口的防呆设计,如下图:
最后回到正题,记录一下这个开发板的折腾过程。我做的是一个智能灯,可通web端、手机端调节灯的亮度。做这个实验的过程感觉也是挺简单的,因为大多数功能已经实现了,只需配置一下通讯端口即可使用,我这边唯一写的就是一个亮度的调节,使用这个开发环境可以说是傻瓜式的开发了。
实验过程
1.LED亮度调节实现原理
当点亮一个LED到我们人眼看到光亮是需要经过一段时间的,所以通过控制点灯的时间便可以实现亮度的调节。
2.配置LED
E53_SC1这个模块提供了一个非常“豪华”LED,记得第一次开机的时候刚治好的眼睛差点又被亮瞎,哈哈。通过查看线路图及datasheet可知,该LED由GPIO_PIN_9控制。
我使用的是tencent_cloud_sdk_data_template这个demo code,参考了部分代码,先写一个开关LED的函数:
代码语言:javascript复制/*
LED 开关
*/
void led_switch(GPIO_PinState Status)
{
GPIO_InitTypeDef GPIO_InitStruct;
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, Status);
GPIO_InitStruct.Pin = GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
再设置两个全局变量,用于记录下发指令中的开灯及亮度级别。
代码语言:javascript复制int g_is_led_on = 0;
float g_brightness = 0;
亮度调节实现逻辑如下:
代码语言:javascript复制void task_led()
{
while (1) {
if (g_is_led_on && g_brightness > 0)
{
led_switch(LED_ON);
LED_Delay(((int)g_brightness) * 5);
led_switch(LED_OFF);
tos_task_delay(1);
}
else
{
led_switch(LED_OFF);
tos_task_delay(10); // 避免阻塞
}
}
}
最后,由于不断开关灯需要用到一个死循环,需创建一个任务:
代码语言:javascript复制osThreadCreate(osThread(task_led), NULL);
MQTT部分配置指导书有详细说明便不详述了。
3.实现效果
这里使用的腾讯云物联开发平台提供的腾讯物联助手这个APP发送指令。
不足之处
软件方面:
1、在调试过程中,发现串口打印部分出现乱码
2、在网络较差的环境下板子容易跑挂,指令下发频繁也会导致此问题
3、腾讯物联助手APP还不完善,比如在上面示例的页面中按手机返回键不会返回主页面,而是提示退出
4、Web端使用在线调试时,设置下发指令后,又会被板子上报的信息覆盖,除非设置完快速点发送
硬件方面:板子在连接ST-link的时候power button关机是无效的。
其它方面再慢慢体验,时间关系就写到这里了。