首先奉上精美PPT
前言:
取暖器在我们日常生活中已经很常见了,冬天的保命法宝,但是平时浏览新闻的时候发现因取暖器使用不当造成人身财产安全问题的事件频频出现,严重的威胁到生命安全,基于此种现象,此次大赛特设计一款可以接入腾讯云平台的智能取暖器,不仅可以通过手机远程操作取暖器是否工作,还能辅助日常感知环境温度,结合智能硬件带来的智能关停,智能联动提升安全性的同时更让生活多姿多彩.
一. 设计思路
本次结合腾讯AIOT开发板,通过自购的发热丝,温度传感器,液晶显示屏等组成,温湿度传感器负责检测环境温湿度,将数据传送给开发板,主机将该数据显示在液晶显示屏的同时上传到腾讯云物联网平台(以下简称云平台),我们可以通过腾讯连连小程序或者从云平台上的在线调试功能发出指令,控制取暖器的开关,同时腾讯连连还有智能场景功能,可以设置智能场景当温度超过制定值的时候让设备自动关闭加热.
以下是设备图片:
元器件展示:
二.原理介绍
系统框架如如下所示:
固件端主要框架:
三.代码介绍:
代码采用keil编辑器编译及编辑,从TencentOS Tiny主仓库拉取,结合Qcloud_SDK_3.20连接云平台收发数据
关于为何使用qcloud_sdk而没有用官方的mqttdemo,看这篇文章:https://cloud.tencent.com/developer/article/1946203
由以下代码启动加云线程
代码语言:c复制
void *data_template_light_thread(const char *arg)
{
DeviceProperty *pReportDataList[TOTAL_PROPERTY_COUNT];
int ReportCont;
Timer reportTimer;
int rc;
sReplyPara replyPara;
//printf("ddffffffffffn");
//init connection
TemplateInitParams init_params = {
"china", USING_TENCENT_IOT_EXPLORER_PRODUCT_ID, USING_TENCENT_IOT_EXPLORER_DEVICE_NAME, USING_TENCENT_IOT_EXPLORER_DEVICE_SECRET, 2000, 240 * 1000, 1, 1, {0}, NULL};
rc = _setup_connect_init_params(&init_params);
if (rc != QCLOUD_RET_SUCCESS)
{
Log_e("init params err,rc=%d", rc);
return NULL;
}
void *client = IOT_Template_Construct(&init_params, NULL);
if (client != NULL)
{
led_on(led_green);
Log_i("Cloud Device Construct Success");
}
else
{
Log_e("Cloud Device Construct Failed");
return NULL;
}
//init data template
_init_data_template();
#ifdef EVENT_POST_ENABLED
rc = IOT_Event_Init(client);
if (rc < 0)
{
Log_e("event init failed: %d", rc);
return NULL;
}
#endif
//register data template propertys here
rc = _register_data_template_property(client);
if (rc == QCLOUD_RET_SUCCESS)
{
Log_i("Register data template propertys Success");
}
else
{
Log_e("Register data template propertys Failed: %d", rc);
return NULL;
}
//register data template actions here
#ifdef ACTION_ENABLED
rc = _register_data_template_action(client);
if (rc == QCLOUD_RET_SUCCESS)
{
Log_i("Register data template actions Success");
}
else
{
Log_e("Register data template actions Failed: %d", rc);
return NULL;
}
#endif
rc = IOT_Template_GetStatus_sync(client, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT);
if (rc != QCLOUD_RET_SUCCESS)
{
Log_e("get device shadow failed, err: %d", rc);
return NULL;
}
InitTimer(&reportTimer);
running_state = 1;
while (IOT_Template_IsConnected(client) || rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT || rc == QCLOUD_RET_MQTT_RECONNECTED || QCLOUD_RET_SUCCESS == rc)
{
if (0 == running_state)
{
break;
}
// sg_ProductData.m_ill = 0;//getIllumination();
rc = IOT_Template_Yield(client, 2000);
if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT)
{
tos_task_delay(tos_millisec2tick(1000));
continue;
}
else if (rc != QCLOUD_RET_SUCCESS)
{
Log_e("Exit loop caused of errCode: %d", rc);
}
/*鏈嶅姟绔笅琛屾秷鎭紝涓氬姟澶勭悊閫昏緫1鍏ュ彛*/
if (sg_control_msg_arrived) //(sg_delta_arrived)
{
deal_down_stream_user_logic(&sg_ProductData);
/*涓氬姟閫昏緫澶勭悊瀹屽悗闇�瑕佸悓姝ラ�氱煡鏈嶅姟绔�:璁惧鏁版嵁宸叉洿鏂帮紝鍒犻櫎dseire鏁版嵁*/
memset((char *)&replyPara, 0, sizeof(sReplyPara));
replyPara.code = eDEAL_SUCCESS;
replyPara.timeout_ms = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT;
replyPara.status_msg[0] = '