编辑推荐: |
本文来自于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接入,很方便。
|