【IoT迷你赛】开发板使用感受及智能灯的实现

2019-08-27 14:33:27 浏览数 (1)

首先非常荣幸能够参与此次内测,虽然自己现在不是从事这个行业了,但是我依然对它热爱着。而且通过这个内测,自己也对物联网开发有了新的认识,因为之前做的时候只是做底层部分,并未涉及上层相关。

接着说说开发板部分,设计方面看得出是非常用心的,比如模组接口的防呆设计,如下图:

防呆设计防呆设计

最后回到正题,记录一下这个开发板的折腾过程。我做的是一个智能灯,可通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亮度为1
亮度100亮度100

不足之处

软件方面:

1、在调试过程中,发现串口打印部分出现乱码

2、在网络较差的环境下板子容易跑挂,指令下发频繁也会导致此问题

3、腾讯物联助手APP还不完善,比如在上面示例的页面中按手机返回键不会返回主页面,而是提示退出

4、Web端使用在线调试时,设置下发指令后,又会被板子上报的信息覆盖,除非设置完快速点发送

在线调试在线调试

硬件方面:板子在连接ST-link的时候power button关机是无效的。

其它方面再慢慢体验,时间关系就写到这里了。

0 人点赞