基于腾讯云的智能灯
二、硬件设计
外设 | 接口 | 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 |
三、软件实现
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 fail\r\n");
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 fail\r\n");
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 fail\r\n");
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)创建产品和设备,主要包括产品开发中的物模型建立,一个亮度用于上传云端环境亮度,一个开关用户云端控制LED。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。