【教程】教你如何运用 ARM mbed OS 接入 OneNET—HTTP 篇-Arduino中文社区 - Powered by Discuz! Archiver

OneNET 发表于 2016-1-28 13:43

【教程】教你如何运用 ARM mbed OS 接入 OneNET—HTTP 篇

一、 引言mbed OS是专为基于ARM Cortex-M处理器的设备所设计的免费操作系统.,将物联网所需的所有基础组件,包括安全, 通信传输与设备管理等功能,整合为一套完整软件,以协助开发低功耗、产品级的物联网设备并实现量产。为了降低 mbed OS用户开发的工作量,ARM公司提供了一套强大的编译系统,支持本地编译和在线编译。如果你在你的设备上运用mbed OS进行开发,那么,在线编译会大大降低你的工作量。对于接入OneNET的用户来讲,为了应对硬件差异性,开发者大部分时间浪费在和硬件相关的代码上开发和调试上,为了省去用户开发环境安装的麻烦,mbed提供了一个完备的基于浏览器的微处理器软件开发环境,包括代码编写,程序编译,版本控制等功能,用户只要上网就可以开发,编译结果只要下载保存到mbed开发板上即可工作,非常方便。在这里详细介绍运用mbed OS的在线编译方式接入OneNET。本文着重介绍运用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/, 如下图:
如果是第一次进入网站,那么我们就要选择我们的目标硬件,点击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;
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;
    char pJson;
    int cnt = 0;

    cnt = rand() % 99;
    sprintf(pJson,"{\"sys_time\":%d}", cnt);
    http_cmd = 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;
            int ret = 0;
            buffer = '\0';
            ret = sock.receive(buffer, sizeof(buffer)-1);
            if(ret >= 0) {
                buffer = '\0';
            }
            printf("Received %d chars from server:\n%s\n", ret, buffer);

      }
    }
}然后点击编译,如下图:
编译完成后,出现保存二进制文件的提示:
点击“另存为”,选择存储路径,在选择存储路径的时候,选择前面提到的多出的mbed盘符:
点击“保存”,你会发现,开发板上的LED等不停的闪烁,这个时候实际上是将程序下载到开发板上,很神奇吧!这个是mbed支持的开发板的特殊之处,这样大大简化了程序烧写过程。六、数据查看程序烧写完成后,登录OneNET查看数据上传情况,如果不出意外,在相应数据流下面会出现类似下面的曲线,如下图:打开串口调试工具,查看数据上传的响应信息:
以上就是运用arm mbed OS上传数据到OneNET的整个过程,无需自己搭建编译环境、无需关注硬件细节、无需专用的烧写工具,只需编写一小段数据上传的应用程序就实现了OneNET接入,很方便。

学而不止 发表于 2016-9-24 08:25

感谢老师分享
页: [1]
查看完整版本: 【教程】教你如何运用 ARM mbed OS 接入 OneNET—HTTP 篇