[i=s] 本帖最后由 zxfeee 于 2025-4-4 05:01 编辑 [/i]
Ai-wb2-32s腾讯物联网开发平台+温度上传+led控制
效果

关于腾讯物联网开发平台
优点
集成进腾讯连连如果不在乎样式界面端可以一行代码都不写
每个设备每日赠送消息数为2000条。虽然有少但也够用。详情

缺点
只能10个设备
新版本开发平台中H5自定义面板受限
-
新版本

-
旧版本

环境搭建
搭建
https://bbs.ai-thinker.com/forum.php?mod=viewthread&tid=45149&ctid=23
说明:
新版本eclipse和楼主提供的新建项目方法不一样建议用楼主提供的https://pan.baidu.com/s/1inIIFZn-Fh-swwpNKc-EXA?pwd=1234
避坑
https://bbs.ai-thinker.com/forum.php?mod=viewthread&tid=41771&ctid=23
附阿里云盘分享:
Ai-Thinker-WB2_20250401.exe https://www.alipan.com/s/z4GrZZesQ3n 提取码: dn81 点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。
驱动
https://docs.ai-thinker.com/_media/tools/serial_driver_windos.7z
烧录
https://bbs.ai-thinker.com/forum.php?mod=viewthread&tid=45221&ctid=23

参考
dht11温湿度传感器
\applications\iot-solution\demo_dht11
腾讯物联网平台控制LED
\applications\iot-solution\qcloud_demo
示意图

连线
dht11的VCC连开发版3V3
dht11的GND连开发版GND
dht11的DATA连开发版IO11
修改dht11的DATA连接端口
文件路径
\applications\iot-solution\demo_dht11\demo_dht11\driver_dht11_interface_bl602.c

开发流程
注意事项
wifi2.4G模式
wifi密码安全模式【WPA/WPA2 PSK 混合模式】
物联网平台相关
- 新建产品
** 公共实例--->产品开发--->新建产品--->内容如图--->点击下方【新建产品】

-
添加模型
物理模型--->新建自定义功能--->内容如下--->确定

-
界面
交互开发--->面板配置--->配置--->标准面板--->保存


-
添加设备到腾讯连连
设备调试--->新建设备--->二维码--->微信--->腾讯连连小程序--->点击中间的【+】--->点击【扫一扫】扫描二维码
-
获取设备信息
点击刚刚新建的设备,在设备信息中获取并记录【设备名称】、【设备密钥】、【产品ID】的值
代码相关
-
替换设备信息
在
\applications\iot-solution\qcloud_demo\components\qcloud_iot_c_sdk\platform\platform/HAL_Device_freertos.c
中替换下述内容
sg_product_id 的值修改为产品ID的值。sg_device_name 的值修改为设备名称的值sg_product_secret 的值修改为设备密钥的值。sg_device_secret 的值修改为设备密钥的值
-
复复制demo_dht11中的类库到 \applications\iot-solution\qcloud_demo 目录下

-
实现上传温度实现
实现文件位于:
\applications\iot-solution\qcloud_demo\sdk_app_qcloud\light_data_template_sample.c
- 在文件中添加头文件:
#include "driver_dht11_basic.h"
- 在【static void _usr_init(void)】方法上面添加温度相关方法
static Timer sg_temperatureReportTimer;
void temperature_report_task(void* params)
{
printf("dht11 init.\r\n");
dht11_basic_init();
float temperature;
uint8_t humidity;
for (;;)
{
if (expired(&sg_temperatureReportTimer))
{
dht11_basic_read(&temperature, &humidity);
blog_info("%.2f C degree\t%u%%", temperature, humidity);
sg_ProductData.m_current_temp = temperature;
// 标记current_temp属性已更改
set_property_state(&sg_ProductData.m_current_temp, eCHANGED);
// 触发报告任务,通知有新的数据需要上报
xTaskNotifyGive(report_task_handle);
countdown_ms(&sg_temperatureReportTimer, 10 * 1000); // 设置下一次触发时间间隔
}
vTaskDelay(1000 / portTICK_PERIOD_MS); // 每秒检查一次是否到期
}
}
- 调整代码顺序。将下面方法放在【void temperature_report_task(void* params)】上面,避免报错
/*set property state, changed or no change*/
static void set_property_state(void* pProperyData, eDataState state)
{
int i;
for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) {
if (sg_DataTemplate[i].data_property.data == pProperyData) {
sg_DataTemplate[i].state = state;
break;
}
}
}
- 修改static void _usr_init(void)方法
static void _usr_init(void)
{
// led_gpio_init(LED_PIN);
// key_init(KEY_PIN);
xTaskCreate(report_task, "rptask", 2048, NULL, 16, &report_task_handle);
// 初始化温度上报定时器,设定首次触发时间为立即执行
countdown_ms(&sg_temperatureReportTimer, 0);
xTaskCreate(temperature_report_task, "tempReportTask", 2048, NULL, 16, NULL);
blog_debug("add your init code here");
}
- **修改代码

**
-
#define TOTAL_PROPERTY_COUNT 6 // 5改6
#define MAX_STR_NAME_LEN (64)
static sDataPoint sg_DataTemplate[TOTAL_PROPERTY_COUNT];
typedef enum {
eCOLOR_RED = 0,
eCOLOR_GREEN = 1,
eCOLOR_BLUE = 2,
} eColor;
typedef struct _ProductDataDefine {
TYPE_DEF_TEMPLATE_BOOL m_light_switch;
TYPE_DEF_TEMPLATE_ENUM m_color;
TYPE_DEF_TEMPLATE_INT m_brightness;
TYPE_DEF_TEMPLATE_STRING m_name[MAX_STR_NAME_LEN + 1];
TYPE_DEF_TEMPLATE_OBJECT m_position;
TYPE_DEF_TEMPLATE_FLOAT m_current_temp; // 添加新的温度属性
} ProductDataDefine;
- 添加新的代码
_init_struct_position();
sg_ProductData.m_position = (void*)&sg_StructTemplatePosition;
sg_DataTemplate[4].data_property.data = sg_ProductData.m_position;
sg_DataTemplate[4].data_property.struct_obj_num = TOTAL_PROPERTY_STRUCT_POSITION_COUNT;
sg_DataTemplate[4].data_property.key = "position";
sg_DataTemplate[4].data_property.type = TYPE_TEMPLATE_JOBJECT;
sg_DataTemplate[4].state = eCHANGED;
//温度
sg_ProductData.m_current_temp = 0.00; // 设置初始值
sg_DataTemplate[5].data_property.key = "current_temp"; // 注意索引应根据实际总数调整
sg_DataTemplate[5].data_property.data = &sg_ProductData.m_current_temp;
sg_DataTemplate[5].data_property.type = TYPE_TEMPLATE_FLOAT;
sg_DataTemplate[5].state = eCHANGED;
- 修改WiFi连接信息(可选。也可以蓝牙配网,但要注意手机权限和功能需要正常开启,调整部分产品选项)
在
\applications\iot-solution\qcloud_demo\sdk_app_qcloud\main.c
中将【static bool wifi_info_read()】方法修改如下
static bool wifi_info_read()
{
// 硬编码设置 WiFi 名称和密码
const char *default_ssid = "WiFi名";
const char *default_passwd = "WiFi密码";
// 设置 SSID
strncpy(sta_ssid, default_ssid, sizeof(sta_ssid) - 1);
sta_ssid[sizeof(sta_ssid) - 1] = '\0'; // 确保字符串以 NULL 结尾
blog_info("sta_ssid:%s", sta_ssid);
// 设置密码
strncpy(sta_passwd, default_passwd, sizeof(sta_passwd) - 1);
sta_passwd[sizeof(sta_passwd) - 1] = '\0'; // 确保字符串以 NULL 结尾
blog_info("sta_passwd:%s", sta_passwd);
// 返回 true 表示成功
return true;
}
- 根据提示编译并上传。过程中可能需要按2号按键位置以便上传。上传完成后需要按2号按键重启设备。
注意:
上传时避免COM口被其它软件占用
其它内容
腾讯物联网代码生成和调试网址
腾讯云物联网开发平台小程序 SDK 的使用示例
IoT 应用端 App & SDK
物联网开发平台说明
基于 TCP 的 MQTT 接入文档
物模型协议
**Topic列表

**