一、mqtt协议简介
mqtt(消息队列遥测传输)是一个基于客户端-服务器的消息发布/订阅传输协议,是iso标准(iso/iec prf 20922)下基于发布/订阅范式的消息协议。mqtt工作在tcp/ip协议栈上,是为硬件性能低下的远程设备以及网络状况不理想的情况下而设计的发布/订阅型消息协议。由于mqtt协议的轻量、简便、开放的特点使它适用范围非常广泛。在很多情况下,包括受限的环境中使用,广泛应用于物联网(iot)。mqtt协议在卫星链路通信传感器、医疗设备、智能家居、及一些小型化设备中已广泛使用。
onenet移动云为国内主流的云平台,提供免费试用的物联网平台,本文使用小凌派rk2206开发板实现基于openharmony的onenet移动云iot服务。小凌派rk2206开发板采用瑞芯微高性能、高性价比的rk2206芯片。rk2206芯片是一款低功耗、高集成的mcu无线局域网处理器,它可以应用于不同的应用领域,如物联网、可穿戴设备、家庭自动化、云连接等。小凌派rk2206开发板内置wifi模块,外部接口丰富,使用一个小凌派rk2206开发板就能够轻松实现mqtt物联网多种应用。
二、硬件电路设计如图1所示,为小凌派rk2206开发板支持的外部接口,本文使用小凌派rk2206开发板内置的wifi和mqtt服务器通信。
图1 小凌派rk2206开发板
三、软件设计主程序设计 在iot_onenet_example函数中,通过los_taskcreate函数创建iot_onenet_thread线程,并设置线程优先级、线程堆栈大小等参数。
static void iot_onenet_example(){
unsigned int ret = los_ok;
unsigned int thread_id1;
tsk_init_param_s task1 = {0};
task1.pfntaskentry = (tsk_entry_func)iot_onenet_thread;
task1.uwstacksize = 10240;
task1.pcname = iot_onenet_thread;
task1.ustaskprio = 24;
ret = los_taskcreate(&thread_id1, &task1);
if (ret != los_ok)
{
printf(falied to create iot_onenet_thread ret:0x%x\n, ret);
return;
}
}
iot onenet服务程序设计iot_onenet_thread函数中,开发板先连接wifi,通过wifi和onenet iot平台通信;wifi连接成功后,初始化网络,初始化mqtt客户端,设置命令接收回调函数;初始化完成后,成功连接onenet iot平台。
void iot_onenet_thread(){
unsigned int data = 0;
/*wifi连接*/
setwifimodeon();
device_info_init(onenet_info_devid, onenet_info_proid, onenet_info_auth, onenet_info_apikey, onenet_master_apikey);
onenet_mqtt_init();
onenet_set_cmd_rsp_cb(onenet_cmd_rsp_cb);
while (1)
{
onenet_mqtt_upload_digit(data, data++);
sleep(1);
}
}
四、编译测试登录onenet平台设备连接onenet平台前,需要做一些准备工作;登录onenet平台,在平台注册个人用户账号,并且需要实名认证后才可以正常使用。如图2所示,为onenet平台地址:https://open.iot.10086.cn。
图2 onenet平台地址
创建产品在onenet平台注册个人用户账号并进行登录,登录后进入控制台首页,点击全部产品服务,选择多协议接入,如图3所示。
图3 控制台页面
进入多协议接入页面,点击添加产品按键,添加产品,如图4所示。
图4 多协议接入页面
进入添加产品页面,按照要求填写产品信息,点击确定,如图5所示。
图5 添加产品
添加产品成功后,进入产品概况页面,可以看到创建的产品,如图6所示。
图6 产品概况
添加设备点击侧边栏设备列表页面,点击添加设备,如图7所示。
图7 添加设备
按照要求填入设备名称和鉴权信息,点击添加设备,如图8所示。
图8 添加设备详情页
成功创建设备后,侧边栏点击设备列表,可以查看到创建的设备信息,如图9所示。
图9 设备列表页面
点击详情,进入刚添加的设备,可以查看到设备的详细信息,点击添加apikey,按照要求填写apikey,如图10所示。
图10 添加apikey
代码设备信息修改点击侧边栏产品概况页面,查看产品id和master-apikey,如图11所示。
图11 产品id和master-apikey
对应修改如下代码中的值,其中,onenet_info_proid为产品id,onenet_master_apikey为master-apikey。
#define onenet_info_proid 535158
#define onenet_master_apikey rhpzbax813t=uyjxb9cyf=gdxhw=
点击侧边栏设备列表页面,点击进入设备详情页面,查看设备id详情,如图12所示。
图12 设备id详情
对应修改如下代码的值,其中,onenet_info_devid为设备id,onenet_info_auth为鉴权信息,onenet_info_apikey为apikey。
#define onenet_info_devid 970784873
#define onenet_info_auth onenet2022
#define onenet_info_apikey e=fejclgjl2tuyw=aqy2abtmrfc=
wifi连接修改代码中的ssid和password为使用wifi的ssid和密匙,用于连接网络,设备通过wifi访问阿里云iot平台。代码如下所示:
#define ssid lzdz
#define password 12345678
运行结果例程代码编译烧写到开发板后,按下开发板的reset按键,通过串口软件查看日志,串口打印mqtt初始化、连接等日志。
networkconnect...
mqttclientinit...
mqttconnect...
mqttsubscribe...
此时登录onenet平台,点击进入设备详情页面,可以看到设备的当前状态为在线。如图13所示。
图13 设备上线onenet平台
点击进入设备详情页面,点击数据流展示页面,可以查看到开发板上报的数据在不断刷新。
图14 数据上报onenet平台
进入命令下发页面,点击下发命令按键,下发命令,如图15所示。
图15 下发命令
选择字符串命令,下发hello到开发板,如图16所示。
图16 下发字符串命令
此时,开发板串口会打印接收到的字符串信息,如下所示。
recv data is hello
TGS5141在储能领域的作用
气源处理器结构图_气源处理器的作用
LG电子将在美国建设首个生活家电工厂
关于在挑选工业插座时的一些提议
TASCAM公司推出全新Series话放产品
基于OpenHarmony的OneNet移动云IoT服务实现
O-RAN为何贴有5G标签
新品手机扎堆预热!联想拯救者坐不住了:我们首发双线性马达
电线的接线方法详细图文讲解
常见的几种汽车电感
MEMS等技术发展使微传感器成为可能
变电所运维云平台在成套设备有限公司中的应用
影响汽车充电速度的因素有哪些?
果蔬农残速测仪的介绍,它都有哪些优缺点
几种方法教你如何有效根治功放噪音
软通动力与华为联合发布“数字资源赋能中心”,助力资源高效运管
原型机就绪的印度IC设计初创公司旨在以60%的成本提供70%高端功能
加密货币和分布式分类账技术介绍
邬贺铨:目前芯片能力跟鼠脑子差不多,2030有望达人脑水平
索尼正式发布新一代全画幅电影摄影机FX6