精华内容
参与话题
问答
  • OneNET云平台

    2020-11-24 00:05:25
    OneNET云平台 由中国移动打造的PaaS物联网开放平台。平台能够帮助开发者轻松实现设备接入与设备连接,快速完成产品开发部署,为智能硬件、智能家居产品提供完善的物联网解决方案。 OneNET致力于开发者的体验,逐步...

    OneNET云平台

    由中国移动打造的PaaS物联网开放平台。平台能够帮助开发者轻松实现设备接入与设备连接,快速完成产品开发部署,为智能硬件、智能家居产品提供完善的物联网解决方案。

    OneNET致力于开发者的体验,逐步提升云服务体量,着手用户运营,深化运维管理和云端大数据分析,协同产业上下游,长期发展以“大连接、云平台、轻应用、大数据”为架构的平台级服务,打造用户导向的物联网生态环境。作为“云管端”核心布局的OneNET秉承中国移动的发展理念。

    云平台架构

    OneNET已构建“云-网-边-端”整体架构的物联网能力,具备接入增强、边缘计算、增值能力、AI、数据分析、一站式开发、行业能力、生态开放8大特点。全新版本OneNET平台,向下延展终端适配接入能力,向上整合细分行业应用,可提供设备接入、设备管理等基础设备管理能力,以及位置定位LBS、远程升级OTA、数据可视化View、消息队列MQ等PaaS能力。同时随着5G网络的到来,平台也在打造5G+OneNET新能力,重点提供并优化视频能力Video、人工智能AI、边缘计算Edge等产品能力,通过高效、稳定、多样的组合式服务,让各项应用实现轻松上云,完美赋能行业端到端应用。

    架构

    主要功能

    设备接入(主流标准协、多种语言开发SDK)
    设备管理(数据存储、生命周期)
    位置定位LBS(NB-IoT基站定位)
    远程升级OTA(终端模组、终端MCU)
    消息队列MQ(TLS加密传输)
    数据可视化View(对接OneNET内置数据)
    人工智能AI(API方式)
    视频能力Video(Onvif视频)
    边缘计算Edge (“云-边”协同)
    应用开发环境(SaaS应用)

    应用场景

    OneNET物联网专网已经应用于环境监控、远程抄表、智慧农业、智能家电、智能硬件、节能减排、车联网、工业控制、物流跟踪等多种商业领域。物联网开放平台OneNET通过打造接入平台、能力平台、大数据平台能力满足物联网领域设备连接、协议适配、数据存储、数据安全、大数据分析等平台级服务需求。

    功能

    产品创建

    1、OneNET网址
    2、OneNET支持“个人用户”和“企业用户”两种入驻方式,您可以根据您的实际情况选择注册方式
    注册
    3、注册完成后,回到主页点击“登录”,即可进入OneNET的官方主页,并由此进入到您的“控制台”,点击“控制台”,进入全部产品服务,选择多协议接入

    控制台4、MQTT、HTTP、EDP等是不同协议,选择一个协议,下图选择的是HTTP协议。组点击右上角的 “添加产品”,在弹出页面中按照提示填写产品的基本信息,进行产品创建;在创建过程中,有些内容若还不能确定,可暂时先选一个,后期再进行修改

    协议
    添加产品

    产品
    5、创建完成之后,在多协议接入—HTTP下面可以看到刚创建的产品,单击产品,进入产品详情页面,选择设备列表,点击右上方添加设备

    产品
    添加设备

    设备6、使用在线模拟器

    1)、创建产品后,可以利用OneNET云平台提供的在线调试功能,模拟数据的上传,需要知道设备ID和产品API-key
    APIKey在产品概况中,点击Master-APIKey下的查看,会发送验证码到注册时用的手机号,输入验证码,再次点击查看,可以看到APIkey

    API

    2)、数据模拟器

    上传内容范例:,;hightemp,89

    API

    3)、反馈

    反馈
    4)、回到设备列表,点击设备对应的数据流,看到刚上传的数据内容

    数据流
    7、使用网络调试助手调试

    网络调试助手

    // 数据范例
    POST /devices/650072788/datapoints?type=5 HTTP/1.1
    api-key: R5TdhYNJ=zg1=zi3Gkfi8LGl=Ng=
    Host:api.clouds.com
    Content-Length:13
    
    ,;hightemp,86
    
    

    调试

    设计原则

    • 使用标准HTTP方法实现资源CURD操作;
    • 采用json作为API输入输出;
    • 以json输出错误信息。
    HTTP 方法 描述
    POST 新增资源信息
    PUT 更新资源信息
    GET 查看资源信息
    DELETE 删除资源

    支持的返回码列表:

    表格

    文本数据上传

    HTTP方法 POST
    URL http://api.heclouds.com/devices/<device_id>/datapoints
    HTTP头部 api-key:xxxx-ffff-zzzzz
    HTTP内容 有多种数据格式
    请求返回 {“errno”: 0,
    “error”:“succ”,}

    二进制数据上传

    功能:将二进制的数据保存到设备云,设备云返回该二进制数据的索引;并根据参数,将二进制数据作为数据点保存到设备下的某个数据流

    HTTP方法 POST
    URL http://api.heclouds.com/bindata
    HTTP头部 api-key:xxxx-ffff-zzzzz
    URL参数 device_id,必选,该数据所属设备。
    datastream_id,必选,该数据所属数据流。
    HTTP内容 普通二进制数据、文件、图像
    请求返回 {“errno”: 0,
    “error”:“succ”,
    “data”:{
    //该数据在设备云的索引
    "index":“AJOWFW1133OFO2Z93”}}
    展开全文
  • 使用OneNET云平台所配备的应用编辑器功能,可以自定义的生成开发者所需要的应用。 4.3触发器的使用 触发器功能同时也是该平台所赋予的功能,实现当数据超过阈值时,发出邮件提醒用户。 4.4 与OneNET云平台...

    4.1设备的注册
    在进行OneNET平台开发者账号注册之后,进入开发者中心,进行项目应用以及设备的新建、添加数据流等操作。
    这里写图片描述

    4.2应用的编辑
    使用OneNET云平台所配备的应用编辑器功能,可以自定义的生成开发者所需要的应用。
    这里写图片描述

    4.3触发器的使用
    触发器功能同时也是该平台所赋予的功能,实现当数据超过阈值时,发出邮件提醒用户。
    这里写图片描述

    4.4 与OneNET云平台交互控制程序(部分)

    //==========================================================
    //	函数名称:	ESP8266_GetIPD
    //
    //	函数功能:	获取平台返回的数据
    //
    //	入口参数:	等待的时间(乘以10ms)
    //
    //	返回参数:	平台返回的原始数据
    //
    //	说明:		不同网络设备返回的格式不同,需要去调试
    //				如ESP8266的返回格式为	"+IPD,x:yyy"	x代表数据长度,yyy是数据内容
    //==========================================================
    unsigned char *ESP8266_GetIPD(unsigned short timeOut)
    {
    	char *ptrIPD = NULL;
    	do
    	{
    		if(ESP8266_WaitRecive() == REV_OK)								//如果接收完成
    		{
    			ptrIPD = strstr((char *)esp8266_buf, "IPD,");				//搜索“IPD”头
    			if(ptrIPD == NULL)											//如果没找到,可能是IPD头的延迟,还是需要等待一会,但不会超过设定的时间
    			{
    				//UsartPrintf(USART_DEBUG, "\"IPD\" not found\r\n");
    			}
    			else
    			{
    				ptrIPD = strchr(ptrIPD, ':');							//找到':'
    				if(ptrIPD != NULL)
    				{
    					ptrIPD++;
    					return (unsigned char *)(ptrIPD);
    				}
    				else
    					return NULL;	
    			}
    		}
    		DelayXms(5);													//延时等待
    	} while(timeOut--);
    	return NULL;														//超时还未找到,返回空指针
    }
    
    //==========================================================
    //	函数名称:	OneNet_RevPro
    //
    //	函数功能:	平台返回数据检测
    //
    //	入口参数:	dataPtr:平台返回的数据
    //
    //	返回参数:	无
    //
    //	说明:		
    //==========================================================
    void OneNet_RevPro(unsigned char *cmd)
    {
    	EDP_PACKET_STRUCTURE edpPacket = {NULL, 0, 0, 0};	//协议包
    	char *cmdid_devid = NULL;
    	unsigned short cmdid_len = 0;
    	char *req = NULL;
    	unsigned int req_len = 0;
    	unsigned char type = 0;
    	short result = 0;
    	char *dataPtr = NULL;
    	char numBuf[10];
    	int num = 0;
    	type = EDP_UnPacketRecv(cmd);
    	switch(type)							//判断是pushdata还是命令下发
    	{
    		case CMDREQ:									//解命令包
    	    result = EDP_UnPacketCmd(cmd, &cmdid_devid, &cmdid_len, &req, &req_len);
    			if(result == 0)					//解包成功,则进行命令回复的组包
    			{
    				EDP_PacketCmdResp(cmdid_devid, cmdid_len, req, req_len, &edpPacket);
    				UsartPrintf(USART_DEBUG, "cmdid: %s, req: %s, req_len: %d\r\n", cmdid_devid, req, req_len);
    			}
    			
    		break;	
    		case SAVEACK:
    		if(cmd[3] == MSG_ID_HIGH && cmd[4] == MSG_ID_LOW)
    		{
    UsartPrintf(USART_DEBUG, "Tips:	Send %s\r\n", cmd[5] ? "Err" : "Ok");
    		}
    			else
    	UsartPrintf(USART_DEBUG, "Tips:	Message ID Err\r\n");
    	break;
    			
        default:
    		result = -1;
    		break;
    	}
    	
    	ESP8266_Clear();									//清空缓存
    	if(result == -1)
    		return;
    	dataPtr = strchr(req, ':');							//搜索':'
    	if(dataPtr != NULL)									//如果找到了
    	{
    	dataPtr++;
    	while(*dataPtr >= '0' && *dataPtr <= '9')//判断是否是下发的命令控制数据
    		{
    			numBuf[num++] = *dataPtr++;
    		}
    		num = atoi((const char *)numBuf);				//转为数值形式
    		if(strstr((char *)req, "button"))				//搜索"button"
    		{
    			if(num == 1)						//控制数据如果为1,代表开
    			{
    				relay_on();
    			}
    			else if(num == 0)					//控制数据如果为0,代表关
    			{
    				relay_off();
    			}
    		}
    
    	}
    	
    	if(type == CMDREQ && result == 0)			//如果是命令包 且 解包成功
    	{
    		EDP_FreeBuffer(cmdid_devid);						//释放内存
    		EDP_FreeBuffer(req);
    															//回复命令
    		ESP8266_SendData(edpPacket._data, edpPacket._len);	//上传平台
    		EDP_DeleteBuffer(&edpPacket);						//删包
    	}
    
    }
    

    在此感谢OneNET云平台所给与的强大的开发平台。

    2020-10-18更新
    PS:源码已share在github。

    https://github.com/tancolin/SmartHome_proto.git
    
    展开全文
  • ESP8266连接OneNet云平台的方法

    万次阅读 多人点赞 2019-04-25 10:57:41
    图1 ESP8266引脚图 图2.2 ESP8266实物图 图2.2 ESP8266实物图 1.如何接线? VCC/CH_PD 接3.3V的电压。(朋友说CH_PD 不用接,但我...配置OneNet端,步骤如下: 进入OneNet的开发者中心,如上图,点击“添加产品”...


    图1 ESP8266引脚图
    在这里插入图片描述
    图2.2 ESP8266实物图
    在这里插入图片描述
    图2.2 ESP8266实物图
    1.如何接线?
    VCC/CH_PD 接3.3V的电压。(朋友说CH_PD 不用接,但我试了下,不接串口收不到数据)
    GND接地(烧录器需与电源共地)
    RX接下载器的TXD
    TX接下载器的RXD

    2.如何进行配置?
    配置OneNet端,步骤如下:
    在这里插入图片描述
    进入OneNet的开发者中心,如上图,点击“添加产品”。
    在这里插入图片描述
    像上图一样配置好参数后,HTTP方式要选对,点击”确认“,就会添加成功,我尝试了下,添加第四个产品的时候受到了限制,最多可以添加三个。
    在这里插入图片描述
    选择“立即添加”,进入到下图界面。
    在这里插入图片描述
    我们继续“添加设备”。
    在这里插入图片描述
    填写信息后,点击“确认”。
    在这里插入图片描述
    我们的一个设备就添加进来了。

    2.配置串口端
    在这里插入图片描述
    首先,我们需要下载好最新版的串口助手,如上图所示。如果你用的是旧版本,我们打开旧版本,找到里面的“下载升级版”这条信息,下载最新版本。
    在这里插入图片描述

    完成ESP8266的接线之后,打开最新版的串口助手。界面如下:
    在这里插入图片描述
    点击“拓展”,有个多字符串发送,我们把命令写进去之后,点击后面的按钮即可发送。
    在这里插入图片描述
    接下来,我们“打开串口”,选择“加回车换行”,波特率选择“9600”。ESP8266出产波特率为115200,我这边是已经设置好了的,如果你没有进行配置,这里应该选择115200的波特率,接下来输入AT+UART=9600,8,1,0,0——设置波特率为9600,点击发送之后,再选择9600。
    在这里插入图片描述
    接下来,我们在多条字符串发送这里输入我们准备发送的指令:
    AT//测试模块是否能正常通讯,返回"ok"即为正常
    AT+CWMODE=3//配置成 AP+STA模式
    AT+RST//重启生效
    AT+CIFSR//查询设备IP
    AT+CWJAP=“777”,“guaishou”//连接你手机的热点“777”为热点的名称,"guaishou"为密码。
    AT+CIPSTART=“TCP”,“183.230.40.33”,80//HTTP服务器183.230.40.33/80
    AT+CIPMODE=1//开启透传模式
    AT+CIPSEND//开始透传
    在这里插入图片描述
    按照以上顺序, 发送完所有指令,会显示如下界面
    在这里插入图片描述
    这时候,我们根据官方提供的协议,照下面的格式发送指令
    POST /devices//datapoints?type=5 HTTP/1.1
    api-key:
    ***************************************
    Host:api.heclouds.com
    Content-Length:10

    ,;temp,89

    第一行的“”是你的设备号,在下图中获取。
    在这里插入图片描述
    第二行的“
    ”是你的管理员APIKEY,在下图中获取:
    在这里插入图片描述
    选择好之后,我们准备发送
    在这里插入图片描述
    显示:“succ”即表示发送成功
    在这里插入图片描述
    我们进入开发者中心,如下图。能够看到我们发出去的3条数据。
    在这里插入图片描述
    接下来我们需要给它添加应用,如下图
    在这里插入图片描述
    设置好参数,点击“新增”。
    在这里插入图片描述
    单击一下红色框,进入“应用详情”。
    在这里插入图片描述
    选择“编辑应用”。
    在这里插入图片描述
    选择仪表盘
    在这里插入图片描述
    单击仪表盘的图标后,在右侧选择我们先前创建的设备,数据流选择temp,都设置好之后点击“保存”。
    在这里插入图片描述
    接下来,我们通过串口发送数据,等待3秒,仪表盘上就能显示出我们发的数据。
    在这里插入图片描述
    在下图中点击全屏观看,即可观察温度变化。

    在这里插入图片描述
    在这里插入图片描述
    鉴于网上没有详细步骤,我在这里贴出来。贴的步骤比较详细,希望大家都能够实现自己想要的功能。
    【HTTP协议接入流程】(https://open.iot.10086.cn/doc/art/id/190#43)

    展开全文
  • mqttclient连接到OneNET云平台

    千次阅读 2020-06-15 23:07:02
    文章目录mqttclient连接到OneNET云平台使用OneNET测试连接手动安装相关的依赖包拉取mqttclient仓库简单介绍mqttclient仓库文件夹编译运行代码使用到的API mqttclient连接到OneNET云平台 有了前面连接百度云的经验,...

    mqttclient连接到OneNET云平台

    有了前面连接百度云的经验,废话不多说,直接使用OneNET,OneNET平台应该是最开放,对开发者最友好的平台了。

    使用OneNET

    首先注册与登陆OneNET,然后进入开发者中心:https://open.iot.10086.cn/develop/global/product/#/public?protocol=3&other=1, 选择公有协议产品,点击“添加产品”,填写产品相关的信息,联网方式选择wifi(其实我们是以太网,但是没有这个选项,那就选择wifi,没啥影响的),接入协议必须选择MQTT,操作系统选择“linux”,运营商这个随意选择,具体见:

    mqtt-onenet001

    在添加产品完毕,继续添加设备,填写设备的相关信息,鉴权信息就是登陆密码,不过需要注意的是,这个鉴权信息在产品内是唯一的,一般推荐使用产品序列号,可作为设备登录参数之一,不同协议设备可能鉴权信息的参数不一致,不过现在是做实验,选择一个好记的即可,数据保密性要选择公有,除此之外还剩下一些设备相关的信息,就不过多赘述,具体见图:

    mqtt-onenet002

    mqtt-onenet003

    mqtt-onenet004

    经过上面的步骤,我们就创建完成一个产品了,此时可以去测试连接它。

    测试连接

    OneNET的数据交互做的很好,它支持动态创建主题(除系统主题外),即不用我们在平台上创建任何的主题,只需要随意订阅某个主题即可,同一个产品下,即使是不同设备之间的主题之间的消息是共享的,简单来说,我们在开发板上可以随意向某个主题发起订阅请求,也可以向这个主题发布消息,而同一产品的其他设备如果订阅了这个主题,那么将收到开发板发布的消息数据,这样子更加方便嵌入式的开发者,只不过这样子的信息安全就没有阿里云物联那么好。

    我们可以在这个网页中去查看服务器的IP地址:https://open.iot.10086.cn/doc/multiprotocol/book/problem/platformaddress.html, 对于服务器的地址,onenet分为了不同的地区平台,不过我们一般正常使用的都是中心平台。

    mqtt-onenet005

    现在我们打开MQTT软件,进行连接测试,与前面的实验操作是一样的,配置好相关信息,即可,这些信息都可以在平台上找到,需要注意的是服务器地址是183.230.40.39;端口号是6002,这与我们常见的1883是不一样的;Client ID是设备ID,在设备列表中是可以找到的;用户名是产品ID,在产品概况页面中可以找到;密码就是创建设备时候的鉴权信息,具体见:

    mqtt-onenet006

    mqtt-onenet007

    mqtt-onenet008

    接下来我们可以通过MQTT软件来测试一下能否正常连接,在这一步之前必须已在物联网平台控制台中创建产品和设备,并获取设备相关的信息。

    其实连接是与百度天工差不多的,直接填写相关的内容即可:

    mqtt-onenet009

    配置好就可以连接,然后随便订阅一个主题,因为OneNet平台支持动态创建主题(除系统主题外),所以对我们来说是非常方便的,直接订阅就好了,然后再用客户端进行发布消息,如果收到消息,表明通信成功,

    mqtt-onenet010

    mqtt-onenet011

    回到OneNet的设备列表界面,可以看到刚刚创建的设备是处于在线状态的:

    mqtt-onenet012

    手动安装相关的依赖包

    这些依赖包是使用mqttclient库去连接OneNet云时必须要安装的。

    sudo apt-get -y install git
    
    sudo apt-get -y install mkae
    
    sudo apt-get -y install gcc
    
    sudo apt-get -y install g++
    
    sudo apt-get -y install cmake
    

    拉取mqttclient仓库

    接着到github拉取这个仓库,仓库非常小,下载下来是很快的,注意,这里也需要拉取下来。

    git clone https://github.com/jiejieTop/mqttclient.git
    

    当然也可以从gitee仓库下载。

    git clone https://gitee.com/jiejieTop/mqttclient.git
    

    简单介绍mqttclient仓库文件夹

    • common文件夹:是一些通用的文件内容,比如链表的处理,错误代码的处理、随机数生成器、日志库等内容。

    • mqtt文件夹:著名的paho mqtt库。

    • mqttclient文件夹:实现mqttclient的主要文件,并且包含了一个默认的配置文件。

    • network文件夹:网络抽象层,封装了mbedtls加密库、网络数据的通道类型,自动选择tls加密传输或者是tcp直连。

    • platform文件夹:平台抽象层,此处封装了各种平台的内存管理、互斥锁、线程管理、时间管理等内容,如linux平台,freertos平台、rt-thread平台、TencentOS tiny平台等。

    • test文件夹:一些测试的代码,比如我们连接OneNet云的时候,就会使用test文件夹的OneNet云平台的测试代码。

    编译

    拉取下来后看到本地有mqttclient文件夹,我们进去mqttclient目录下,运行它提供的编译脚本,它主要是通过cmake去自动构建整个代码工程。

    ./build.sh
    
    # 产生的信息如下:
    
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /home/jiejie/github/mqttclient/build
    [  9%] Built target mqtt
    [ 12%] Built target common
    [ 17%] Built target platform
    [ 21%] Built target wrapper
    [ 85%] Built target mbedtls
    [ 88%] Built target network
    [ 90%] Built target mqttclient
    [ 92%] Built target arch
    [ 95%] Built target salof
    [ 97%] Built target emqx
    [ 98%] Built target onenet
    [ 99%] Built target baidu
    [100%] Built target ali
    

    运行

    当编译完成后,在./build/bin目录下会出现多个可执行文件,在./build/lib目录下会出现相关的动态库文件,具体如下:

    ➜  mqttclient git:(master) ls build/bin
    ali  baidu  emqx  onenet
    
    ➜  mqttclient git:(master) ls build/lib
    libarch.a  libcommon.a  libmbedtls.a  libmqtt.a  libmqttclient.a  libnetwork.a  libplatform.a  libsalof.a  libwrapper.a
    

    我们直接运行./build/bin/onenet这个可执行文件:

    ➜  mqttclient git:(master) ✗ ./build/bin/onenet 
    
    welcome to mqttclient test...
    
    [I] >> [TS: 1590547112] /home/jiejie/github/mqttclient/mqttclient/mqttclient.c:948 mqtt_connect_with_results()... mqtt connect success...
    [I] >> [TS: 1590547113] /home/jiejie/github/mqttclient/mqttclient/mqttclient.c:16 default_msg_handler()...
    topic: temp_hum, qos: 0, 
    message:welcome to mqttclient, this is a publish test, a rand number: 1804289383 ...
    [I] >> [TS: 1590547116] /home/jiejie/github/mqttclient/mqttclient/mqttclient.c:16 default_msg_handler()...
    topic: temp_hum, qos: 0, 
    message:welcome to mqttclient, this is a publish test, a rand number: 1837236902 ...
    

    此时表示已经连接上OneNet云了,并且实现了数据的收发。

    代码

    那么这个测试的例程代码如下,位于./test/onenet/test.c

    /*
     * @Author: jiejie
     * @Github: https://github.com/jiejieTop
     * @Date: 2020-04-18 12:37:34
     * @LastEditTime: 2020-06-08 20:32:33
     * @Description: the code belongs to jiejie, please keep the author information and source code according to the license.
     */
    #include <stdio.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <stdlib.h>
    #include <pthread.h>
    #include "mqttclient.h"
    
    extern const char *test_ca_get();
    
    
    static void interceptor_handler(void* client, message_data_t* msg)
    {
        (void) client;
        MQTT_LOG_I("-----------------------------------------------------------------------------------");
        MQTT_LOG_I("%s:%d %s()...\ntopic: %s\nmessage:%s", __FILE__, __LINE__, __FUNCTION__, msg->topic_name, (char*)msg->message->payload);
        MQTT_LOG_I("-----------------------------------------------------------------------------------");
    }
    
    void *mqtt_publish_thread(void *arg)
    {
        mqtt_client_t *client = (mqtt_client_t *)arg;
    
        char buf[100] = { 0 };
        mqtt_message_t msg;
        memset(&msg, 0, sizeof(msg));
        sprintf(buf, "welcome to mqttclient, this is a publish test...");
        
        msg.qos = 0;
        msg.payload = (void *) buf;
        while(1) {
            sprintf(buf, "welcome to mqttclient, this is a publish test, a rand number: %d ...", random_number());
            mqtt_publish(client, "topic1", &msg);
            sleep(4);
        }
    }
    
    int main(void)
    {
        int res;
        pthread_t thread1;
        mqtt_client_t *client = NULL;
        
        printf("\nwelcome to mqttclient test...\n");
    
        mqtt_log_init();
    
        client = mqtt_lease();
    
        mqtt_set_port(client, "6002");
        mqtt_set_host(client, "183.230.40.39");
        mqtt_set_client_id(client, "599908192");
        mqtt_set_user_name(client, "348547");
        mqtt_set_password(client, "mqttclienttest1");
        mqtt_set_clean_session(client, 1);
        
        mqtt_connect(client);
        
        mqtt_subscribe(client, "topic1", QOS0, NULL);
    
        mqtt_set_interceptor_handler(client, interceptor_handler);     // set interceptor handler
        
        res = pthread_create(&thread1, NULL, mqtt_publish_thread, client);
        if(res != 0) {
            MQTT_LOG_E("create mqtt publish thread fail");
            exit(res);
        }
    
        while (1) {
            sleep(100);
        }
    }
    

    使用到的API

    • 申请一个MQTT客户端

      mqtt_client_t *client = NULL;
      client = mqtt_lease();
      
    • mqtt客户端配置,主要是配置mqtt_client_t结构的相关信息,如果没有指定初始化参数,则系统会提供默认的参数。但连接部分的参数则必须指定,比如连接的端口号、云服务器的地址或者域名、用户名、密码,这些信息都是百度云平台得到的。

      mqtt_set_port(client, "6002");
      mqtt_set_host(client, "183.230.40.39");
      mqtt_set_client_id(client, "599908192");
      mqtt_set_user_name(client, "348547");
      mqtt_set_password(client, "mqttclienttest1");
      mqtt_set_clean_session(client, 1);
      
    • 连接服务器并建立mqtt会话。

      mqtt_connect(&client);
      
    • 订阅主题,字符串类型的主题(支持通配符"#" “+”),主题的服务质量,以及收到报文的回调处理函数,如不指定则有默认处理函数,订阅主题的处理方式是异步处理的,此处设置为NULL则表示使用默认的回调处理函数。

      mqtt_subscribe(client, "topic1", QOS0, NULL);
      
    • 创建一个发布主题的线程,并且发布主题数据,指定字符串类型的主题(支持通配符),要发布的消息(包括服务质量消息主体)。

      mqtt_message_t msg;
      msg.payload = (void *) buf;
      msg.qos = 0;
      
      mqtt_publish(&client, "topic1", &msg);
      
    • 由于onenet的设备会自动订阅系统主题,而用户是不能直接订阅的,比如我们在线调试的时候,他会下发一些系统主题,那么我们需要接收这些主题,就需要设置拦截器的处理函数,去拦截它们并且通过回调函数上报到应用层,设置如下:

      mqtt_set_interceptor_handler(&client, interceptor_handler); 
      

    我们在设备列表页面,点击下方命令,下发一些数据到开发板上:

    mqtt-onenet013

    mqtt-onenet014

    mqtt-onenet015

    在开发板上可以看到这些数据内容,可以看到他的主题是$creq/开头的,而且接下来的内容应该是经过平台加密生成的,是随机的,我们也无法主动去订阅,只能通过拦截器去接收这些数据内容。

    [I] >> [TS: 1590548249] -----------------------------------------------------------------------------------
    [I] >> [TS: 1590548249] /home/jiejie/github/mqttclient/test/onenet/test.c:26 interceptor_handler()...
    topic: $creq/f6132232-bbcd-5b1e-9b9a-806da959ce80
    message:hello world !
    [I] >> [TS: 1590548249] -----------------------------------------------------------------------------------
    
    [I] >> [TS: 1590548023] -----------------------------------------------------------------------------------
    [I] >> [TS: 1590548023] /home/jiejie/github/mqttclient/test/onenet/test.c:24 interceptor_handler()...
    topic: $creq/5d2670bb-a9a4-5bc9-93d5-107246135af8
    message:hello world !
    [I] >> [TS: 1590548023] -----------------------------------------------------------------------------------
    
    展开全文
  • M6312模组连接中移物联网云平台的设备要用到的专用AT指令集,而且介绍了M6312模组连接云平台并发送数据的方法和步骤
  • onenet云平台使用The other day I was listening to the latest Shop Talk Show podcast while out for my morning run. They had Jen Simmons on the show, talking about (among other things) the standards ...
  • OneNET云平台-EDP协议数据传输

    万次阅读 2018-01-12 09:31:07
    OneNet真是中移动的良心之作,对比阿里和庆科OneNet不但免费而且功能也足够嵌入式应用,对学生党而言真是大大的福利,感谢中移动!!!。 一、云端创建设备与应用 (1)创建产品:进入开发者中心有个蓝色...
  • 树莓派上传数据到onenet云平台

    千次阅读 2019-05-16 14:37:03
    背景:通过树莓派上传数据到onenet云平台 操作:看代码 # -*- coding:utf-8 -*- # File: cputemp.py #向平台已经创建的数据流发送数据点 import urllib2 import json import time import datetime APIKEY = '...
  • ESPDUINO上传数据到oneNet云平台

    千次阅读 2017-11-23 16:34:29
    最近对物联网上传数据产生了兴趣,成功上传数据到云平台了,这里跟大家分享下心得。 为什么选用ESPDUINO,因为arduino yun太贵,arduino+wifi模块也挺麻烦的也比较贵ESPDUINO只要40多+传感器不超过50元就可以实现了 ...
  • 本文是对已经了解怎么去上传单个数据流但...使用MQTT Simulate Device 进行模拟配置(在没有实体设备或者不太懂onenet到底怎么传输数据的时候可以先用这个工具进行模拟,工具下载连接在oennet官方论坛有或者使用这个:...

空空如也

1 2 3 4 5 ... 15
收藏数 287
精华内容 114
关键字:

onenet云平台