AIoT应用创新大赛-基于TencentOS Tiny 的智慧灯

2022-03-15 08:54:21 浏览数 (1)

视频内容

基于腾讯云的智能灯

一、总体设计

本次有幸参与2021 TencentOS Tiny AIoT应用创新大赛,智能灯基于腾讯云和恩智浦联合推出的TencentOS Tiny EVB_AIoT开发套件,使用数字型光强度传感器监测环境亮度,并传输至腾讯云物联网开发平台,同时利用腾讯连连通过微信远程控制灯。

二、硬件设计

系统基于TencentOS Tiny AIoT开发套件,核心板采用的RT1062处理器属于i.MX RT系列MCU,是由NXP推出的跨界处理器,跨界是指该系列MCU的定位既非传统的微控制器、也非传统的微处理器,i.MX RT系列MCU则综合了两者的优势,既具备高频率(最高主频600M)、高处理性能,也具备中断响应迅速、实时性高的特点。此外,板载Type-C接口CMSIS DAP仿真器。

bh1750传感器有接近视觉灵敏度的光谱灵敏度特性,它支持I2CBUS接口,支持1.8v逻辑输入接口。传感器有两种可选的I2Cslave地址,无需其他外部件。光源依赖性弱,受红外线影响很小。传感器通过降低功率功能,实现低电流化。通过50Hz/60Hz除光噪音功能实现稳定的测定,最小误差变动在±20%.

外设

接口

TencentOS Tiny AIoT引脚

ESP8266

UART

GPIO_AD_B0_12/GPIO_AD_B0_13

BH1750

IIC

GPIO_AD_B1_00/GPIO_AD_B1_01

LED

PIN

GPIO_B1_15

恩智浦的MCU针脚识别对于新手不够友好,好在其MCUXpresso IDE提供了个有意思的模块PINS,可以比较方便的配置针脚,配置好以后选择点击“更新源代码”,生成的代码保存在pin_mux.c和pin_mux.h文件中。

三、软件实现

软件设计较简单,bh1750在Tiny的BSP中可以找到驱动程序bh1750_i2c_drv.c。通过TencentOS tiny 提供的丰富的物联网组件(选择了MQTT),快速接入腾讯云物联网平台IoT Explorer,通过注册MQTT事件,并且在订阅事件的回调函数中完成云端下发事件的处理。

上报数据代码:

while (1) {

bh1750_start(ONCE_H_MODE);

bh1750_read_lux(&lux);

memset(&msg, 0, sizeof(msg));

snprintf(report_buf, sizeof(report_buf), REPORT_DATA_TEMPLATE, lux);

msg.payload = (void *) report_buf;

error = mqtt_publish(client, "$thing/up/property/EXAMPLE/dev001", &msg);

MQTT_LOG_D("mqtt publish error is %#0x", error);

}

接受灯光控制处理代码:

cjson_root = cJSON_Parse((char*)msg->message->payload);

if (cjson_root == NULL) {

printf("report reply message parser failrn");

event_flag = report_fail;

goto exit;

}

cjson_method = cJSON_GetObjectItem(cjson_root, "method");

method = cJSON_GetStringValue(cjson_method);

if (cjson_method == NULL || method == NULL) {

printf("report reply status parser failrn");

event_flag = report_fail;

goto exit;

}

if (strstr(method, "control")) {

cjson_params = cJSON_GetObjectItem(cjson_root, "params");

cjson_switch = cJSON_GetObjectItem(cjson_params, "power_switch");

if (cjson_params == NULL || cjson_switch == NULL) {

printf("control data parser failrn");

cJSON_Delete(cjson_root);

return;

}

//control LED

power_switch = cjson_switch->valueint;

if (power_switch == 0) {

GPIO_PinWrite(GPIO2, 31, 0);

} else if (power_switch == 1) {

GPIO_PinWrite(GPIO2, 31, 1);

}

cJSON_Delete(cjson_root);

return;

}

MQTT接入的用户名密码信息需要一个python脚本生成,需要到github上下载mqtt_config_gen.py,执行脚本生成后更新源码的MQTT接入信息。

编译代码生成开发板固件:

四、腾讯云端(IoT Explorer)配置

端侧处理完毕后,接下来需要在腾讯云端(IoT Explorer)创建产品和设备,主要包括产品开发中的物模型建立,一个亮度用于上传云端环境亮度,一个开关用户云端控制LED。

随后在“产品开发”的“设备调试”页面中,使用微信的腾讯连连扫描产品二维码,接入通讯连连。

五、实际运行

(一)端侧log。通过DAP将固件烧入开发板,接上串口软件,波特率设置115200,可以看到MQTT连接成功的日志,如果WIFI和MQTT密码信息正确的话。

(二)云端调试。利用IoT Explorer的功能对系统进行调式。

包括历史上报数据统计。

(三)总体运行效果

(三)腾讯连连控制。

最后感谢腾讯公司的2021 TencentOS Tiny AIoT应用创新大赛。

0 人点赞