您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
教你如何运用 ARM mbed OS 接入 OneNET—HTTP 篇
 
  2905  次浏览      15
 2019-4-11
 
编辑推荐:
本文来自于OneNET论坛,本文着重介绍运用mbed OS接入OneNET的方法,为了便于说明,例子中用到的上传数据并非真实采集的传感器数据,而是用函数产生的随机数。

一、引言

mbed OS是专为基于ARM Cortex-M处理器的设备所设计的免费操作系统.,将物联网所需的所有基础组件,包括安全, 通信传输与设备管理等功能,整合为一套完整软件,以协助开发低功耗、产品级的物联网设备并实现量产。为了降低 mbed OS用户开发的工作量,ARM公司提供了一套强大的编译系统,支持本地编译和在线编译。如果你在你的设备上运用mbed OS进行开发,那么,在线编译会大大降低你的工作量。

对于接入OneNET的用户来讲,为了应对硬件差异性,开发者大部分时间浪费在和硬件相关的代码上开发和调试上,为了省去用户开发环境安装的麻烦,mbed提供了一个完备的基于浏览器的微处理器软件开发环境,包括代码编写,程序编译,版本控制等功能,用户只要上网就可以开发,编译结果只要下载保存到mbed开发板上即可工作,非常方便。在这里详细介绍运用mbed OS的在线编译方式接入OneNET。

二、硬件准备

你只需要一块mbed enabled的开发板,就可以很方便的实现接入,这里顺便提一下,由于ARM公司在硬件领域的强大影响力,在mbed OS推荐后不久,已经有数十家硬件厂商完成对ARM mbed的支持,你可以在某宝很方便的获取各种硬件资源,包括开发板、传感器等。在本例中选择frdm-k64f的硬件开发板,如下图:

frdm-k64f开发板

USB线

三、安装驱动

将frdm-k64f连接到PC,系统会提醒安装驱动,可以到如下地址下载驱动并安装: https://developer.mbed.org/handbook/Windows-serial-configuration

安装完成后,在Win7下面会多出一个盘符:

系统的设备管理器里查看设备状态:

为什么会多出一个盘符呢,卖个关子。硬件我们搭好了,接下来就是软件环境了,一直在讲mbed的web在线开发环境多么方便,那我们就来亲身体验一下吧。

四、在线编译环境

点击进入MBED的官网 https://developer.mbed.org/, 如下图:

点击LGOIN OR SIGUUP:

进行注册,注册过程比较简单,就是邮箱和密码,注册成功选择登陆:

如果是第一次进入网站,那么我们就要选择我们的目标硬件,点击Platforms,出现一大堆的开发板。如下图所示:

在左边我们选择硬件厂商,筛选硬件平台:

看见了吧,出现的全是freescale的,我们的目标设备是frdm-k64f,选择 frdm-k64f 进入如下界面,这个页面里的信息就是frdm-k64f这个开发板的所有信息。很直观的一个图。选择“Add your mbed Compiler”:

点击 Open mbed Compiler:

经过加载后进入编译器界面,如下图:

选择例程,点击OK后,编辑自动导入例程。由于我们要进行网络编程,选择Ethernet_UDP_client例子作为模板,将名字改成“Ethernet_TCP_client”。如下图:

五、编辑代码

在代码编辑之前,要在OneNET平台端做好创建设备、数据流、APIkey等相关的准备工作,由于这些都比较简单,这里不在详细介绍,假设我们已经做好了平台端准备工作。 双击main.cpp。将其中代码替换成如下:

#include "mbed.h"
#include "EthernetInterface.h"
EthernetInterface eth;
TCPSocketConnection sock;
char http_cmd[500];
char devid[] = "your device id";//替换成你的设备id
char api_key[] ="your apikey"//替换成你自己设备的apikey
char host[] = "api.heclouds.com";
void creat_cmd(char* dev_id, char* apikey)
{
char tmp[30];
char pJson[30];
int cnt = 0;
cnt = rand() % 99;
sprintf(pJson,"{\"sys_time\":%d}", cnt);
http_cmd[0] = 0;
strcat(http_cmd,"POST /devices/");
strcat(http_cmd,dev_id);
strcat(http_cmd,"/datapoints?type=3 HTTP/1.1\r\n");
strcat(http_cmd,"api-key:");
strcat(http_cmd,apikey);
strcat(http_cmd,"\r\n");
strcat(http_cmd,"Host:");
strcat(http_cmd,host);
strcat(http_cmd,"\r\n");
sprintf(tmp,"Content-Length:%d\r\n\r\n", strlen(pJson));
strcat(http_cmd,tmp);
strcat(http_cmd,pJson);
}
int main()
{
eth.init(); //DHCP
while(1) {
eth.connect();
printf("IP Address is %s\n", eth.getIPAddress());
sock.connect("api.heclouds.com", 80);
while(1) {
/*create the http message about add datapoint */
creat_cmd(devid, api_key);
if(sock.is_connected()) {
sock.send(http_cmd, strlen(http_cmd));
printf("%s\n",http_cmd);
} else {
/*******start reconnect**************/
printf("sock.is_connected = false\n");
sock.close();
eth.disconnect();
break;
}
wait(4);
/**********receive response data*******************/
char buffer[300];
int ret = 0;
buffer[0] = '\0';
ret = sock.receive(buffer, sizeof(buffer)-1);
if(ret >= 0) {
buffer[ret] = '\0';
}
printf("Received %d chars from server:\n%s\n", ret, buffer);
}
}
}

然后点击编译,如下图:

编译完成后,出现保存二进制文件的提示:

点击“另存为”,选择存储路径,在选择存储路径的时候,选择前面提到的多出的mbed盘符:

点击“保存”,你会发现,开发板上的LED等不停的闪烁,这个时候实际上是将程序下载到开发板上,很神奇吧!这个是mbed支持的开发板的特殊之处,这样大大简化了程序烧写过程。

六、数据查看

程序烧写完成后,登录OneNET查看数据上传情况,如果不出意外,在相应数据流下面会出现类似下面的曲线,如下图:

打开串口调试工具,查看数据上传的响应信息:

以上就是运用arm mbed OS上传数据到OneNET的整个过程,无需自己搭建编译环境、无需关注硬件细节、无需专用的烧写工具,只需编写一小段数据上传的应用程序就实现了OneNET接入,很方便。

 
   
2905 次浏览       15
 
相关文章

云计算的架构
对云计算服务模型
云计算核心技术剖析
了解云计算的漏洞
 
相关文档

云计算简介
云计算简介与云安全
下一代网络计算--云计算
软浅析云计算
 
相关课程

云计算原理与应用
云计算应用与开发
CMMI体系与实践
基于CMMI标准的软件质量保证