【简介】利用Arduino和Coolpy设计网关 —— 开源项目Coolpy

原创 2016年05月31日 18:20:50

Coolpy API 官方文档:http://www.icoolpy.com/docs.html

1. Coolpy简介

Coolpy是一个开放的通用物联网服务平台,主要提供传感器数据的接入、存储和展现服务;Coolpy是跨平台的,Coolpy服务端可以运行在Windows、Linux、Mac、Android等主流操作系统,甚至可以运行在openWRT路由器和Arduino Yun中。Coolpy客户端使用HTML5技术开发,既可以运行于桌面设备,也可以运行于移动设备;Coolpy是开放源代码的,因此用户可以基于Coolpy源代码进行二次开发,极大可能地满足用户需求。

1.1 Coolpy API简介

Coolpy对外有一套完整的API,使用这套API通过简单的HTTP请求,即可实现设备、传感器、数据点在服务端的创建、修改、查看、删除等动作。
(1)设备(Devices)相关API
分别对下表中的URL发出HTTP POST、PUT、GET、GET、DELETE请求,将分别创建、编辑、罗列、查看、删除一个设备。
设备URL
(2)传感器(Sensors) 相关API
分别对下表中的URL发出HTTP POST、PUT、GET、GET、DELETE请求,将分别创建、编辑、罗列、查看、删除一个传感器。
传感器URL
(3)数据点(Datapoints) 相关API
分别对下表中的URL发出HTTP POST、PUT、GET、DELETE请求,将分别创建、编辑、查看、删除一个数据点。
数据点URL

2. 开源软件Arduino Ethenet库简介

Arduino Ethenet是一个以AVR单片机和网络接口芯片W5100为硬件核心的软件库,它实现了AVR单片机的SPI接口驱动函数和网络接口芯片W5100的驱动函数,并在此基础上实现了Socket API函数,使开发者可以专注于应用程序的编写,而不需要花太多的精力在底层的驱动函数上。嵌入式HTTP应用开发因此变得简单、高效。
使用Arduino Ethenet库构建HTTP客户端示例:

//设置硬件物理地址
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//设置服务器地址
char server[] = "www.google.com";
//设置IP地址,假如DHCP分配IP失败,就使用这个IP
IPAddress ip(192,168,1,2);
EthernetClient client;
void setup() {
 Serial.begin(9600);
 if (Ethernet.begin(mac) == 0) {
   Ethernet.begin(mac, ip);
 }
 //延时1S,要硬件初始化
 delay(1000);
 //请求与服务器连接
 if (client.connect(server, 80)) {
   Serial.println("connected");
   // HTTP GET请求报文:
   client.println("GET /search?q=arduino HTTP/1.1");
   client.println("Host: www.google.com");
   client.println("Connection: close");
   client.println();
 } 
 else {
   Serial.println("connection failed");
 }
}
void loop()
{
 // 接收服务器返回的响应报文
 if (client.available()) {
   char c = client.read();
   Serial.print(c);
 }
 // 假如与服务器断开连接,那么停止HTTP客户端
 if (!client.connected()) {
   Serial.println();
   Serial.println("disconnecting.");
   client.stop();
 }
}

3. HTTP POST、PUT、GET、DELETE请求的具体实现

(1)POST方法的实现
POST请求报文格式:
POST请求报文
POST请求具体实现:

void Post(String PostData,byte deviceID, byte sensorID)
{
// if you get a connection, report back via serial:
  if (client.connect(server, port)) {
    Serial.println("connecting.");
    // Make a HTTP request:
    client.print("POST /v1.0/device/");
    client.print(deviceID);
    client.print("/sensor/");
    client.print(sensorID);
    client.println("/datapoints HTTP/1.1");
    client.print("Host:");
    client.println(server);
    client.println("Content-Type:application/json");
    client.print("U-ApiKey:");
    client.println(ukey);
    client.println("Connection: close");
    client.print("Content-Length: ");
    client.println(PostData.length()+1);
    client.println();
    client.println(PostData);
  } 
  else {
     //If you didn't get a connection to the server:
    Serial.println("connection failed.");
  }

(2)PUT方法的实现
PUT请求报文格式:
PUT请求报文
PUT方法具体实现:

void Post(String PostData,byte deviceID, byte sensorID)
{
if (client.connect(server, port)) {
    // Make a HTTP request:
    client.print("PUT /v1.0/device/");
    client.print(device);
    client.print("/sensor/");
    client.print(sensor);
    client.print("/datapoint/");
    client.print(dpkey);
    client.println(" HTTP/1.1");
    client.print("Host:");
    client.println(server);
    client.println("Content-Type:application/json");
    client.print("U-ApiKey:");
    client.println(ukey);
    client.println("Connection: close");
    client.print("Content-Length: ");
    client.println(PostData.length()+1);
    client.println();
    client.println(PostData);
  } 
  else {
    // kf you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

(3)GET方法的实现
GET请求报文格式:
GET请求报文
GET方法具体实现:

void Post(String PostData,byte deviceID, byte sensorID)
{
if (client.connect(server, port)) {
    // Make a HTTP request:
    client.print("GET /v1.0/device/");
    client.print(device);
    client.print("/sensor/");
    client.print(sensor);
    client.print("/datapoint/");
    client.print(dpkey);
    client.println(" HTTP/1.1");
    client.print("Host:");
    client.println(server);
    client.println("Accept:");
    client.print("U-ApiKey:");
    client.println(ukey);
    client.println("Connection: close");
    client.println();
  } 
  else {
    // kf you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

(4)DELETE方法的实现
DELETE请求报文格式:
DELETE请求报文
DELETE方法具体实现:

void Post(String PostData,byte deviceID, byte sensorID)
{
if (client.connect(server, port)) {
    // Make a HTTP request:
    client.print("DELETE /v1.0/device/");
    client.print(device);
    client.print("/sensor/");
    client.print(sensor);
    client.print("/datapoint/");
    client.print(dpkey);
    client.println(" HTTP/1.1");
    client.print("Host:");
    client.println(server);
    client.println("Accept:");
    client.print("U-ApiKey:");
    client.println(ukey);
    client.println("Connection: close");
    client.println();
  } 
  else {
    // kf you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Arduino开源智能家居DIY,网关教程(ZigBee)

(代码请点击下方原文链接) 这篇开始,我们就真正做《网关》升级版教程了,采用arduino+zigbee哦。arduino简单易学,zigbee自组网(如果不懂c语言,直接用就好,我们已经刷好自...

【简介】利用Arduino和Coolpy设计网关 —— HTTP协议

1、HTTP协议简介每天,都有数以亿万计的JPEG图片、HTML页面、文本文件、MPEG电影、WAV音频文件、Java小程序和其他资源在因特网上游弋。HTTP可以从遍布全世界的Web服务器上将这些信息...

【实战】Coolpy之点灯详解

/* Power By Coolpy Site:http://icoolpy.com This example code is in the public domain. */ #...

【记录】Coolpy开机自启之Windows

Coolpy开机“无窗”自启的一个方法 一、Coolpy“无窗”运行 1.1 隐藏执行bat的方法     可以通过执行vbs脚本来隐藏执行bat。     假设要执行c:\x.bat,将以下代码保存...

基于WIZ820io的以太网关(兼容XBEE、Arduino扩展)

这块开发板起名为“MAX1284”,使用ATmega 1284p, 以及一个基于WIZnet W5200的以太网模块,就能制作一个兼容Arduino的低成本以太网网关。   特点: ...

最新、最全、最潮的手机移动APP资源设计网,每天都有新精彩哦!

手机移动应用的设计童鞋有福了,专门针对设计人士和爱好人士制作的网站哦!  一起晃网站搜集了苹果系统下国内外的素材,界面、图标都有,资源量很大,可以直接下到最新的资源和应用,便于大家学习交流哦! ...

ASP.NET中Web DataGrid的使用指南(转自前沿设计网-找到这个真不容易啊!)

关键词:ASP.NET中Web DataGrid的使用指南 很久以前就想写一些关于DataGrid/DataList的东西,但是一直以来,一方面自感所学未深,另一方面,总觉无从下笔,一拖再拖,离刚开...

IPG3000——SAAB网关

  • 2015-01-28 17:40
  • 387KB
  • 下载

WIFI项目--Android 获取本机IP(wifi下),子网掩码,网关,dns等信息

近期在捣鼓一个小项目,利用wifi热点在两手机上传输文件。进度有点慢,下面是遇到的一些小问题: 1获取手机所连接的wifi路由器ip:ublic class MainActivity extends...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)