实验六:LinkSprite IO
实验介绍
LinkSprite IO是一个支持RESTful API和WebSocket的物联网平台,这使得手机应用程序、网页应用程序或设备的连接变得很容易。
通过让LinkNode D1连接到LinkSprite IO,可以对设备实现以下控制:
更新设备的状态信息到 LinkSprite IO
通过 LinkSprite IO 来改变设备的状态
本次实验中以控制ESP8266芯片右上角蓝色LED灯的开关状态为例,说明LinkNode D1和 LinkSprite IO 的通信过程。
实验目的
了解并掌握LinkSprite IO与设备进行互通信的机制
了解并掌握LinkNode D1连接到云端的具体配置过程
- 提高动手实践和解决问题的能力
软硬件清单
硬件
- LinkNode D1 x 1
- 具有WiFi AP的设备 x 1
软件
- Arduino IDE开发环境
实验步骤
1. 注册并登录 LinkSprite IO
- 进入 www.linksprite.io,注册一个帐号并登录。
- 创建一个设备。
- 进入My Profile 获取“API Key”。
图1.6.1 获取API key
- 点击“created DIY device”按钮,进入Create New Device,其中“Device Name”、“Group Name”可以任意,“Device Type”选02(Simple light),点击“Create”按钮,即可创建一个设备。
图1.6.2 创建一个设备
点击创建的设备,获取设备的“Device ID”。
图1.6.3 获取Device ID
2.编译运行代码
将LinkNode D1与PC相连,打开Arduino IDE,新建一个文件,将其命名为 LinkspriteIO.ino
修改代码中的deviceID和apikey
编译代码并上传
打开串口监视器,查看串口打印信息,并登录www.linksprite.io查看设备的状态信息
点击Linksprite IO 上的“Light On”和“Light Off”按钮,看LED灯的状态是否有所改变?串口监视器又打印什么信息?
图1.6.4 实验结果图
实验源码
#include <ESP8266WiFi.h>
#include <WString.h>
//the library are needed for autoconfig WiFi
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
// replace with your own API key and device ID,
String apikey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx";
const char* deviceID="xxxxxxxxxxxxx";
const char* server = "www.linksprite.io";
WiFiClient client;
void setup() {
Serial.begin(115200);
pinMode(BUILTIN_LED, OUTPUT);
WiFiManager wifiManager;
wifiManager.setAPStaticIPConfig(IPAddress(10,0,1,1), IPAddress(10,0,1,1), IPAddress(255,255,255,0));
wifiManager.autoConnect("LinkNodeAP");
Serial.print("WiFi Connected ...\n");
Serial.println("WiFi connected");
}
void loop() {
if (client.connect(server,80)) {
String postStr ="{";
postStr +="\"action\":\"query\",";
postStr +="\"apikey\":\"";
postStr += apikey;
postStr +="\",";
postStr +="\"deviceid\":\"";
postStr += deviceID;
postStr +="\",";
postStr += "\"params\":";
postStr += "[";
postStr += "\"light\"";
postStr +="]";
postStr +="}";
client.print("POST /api/http HTTP/1.1\n");
client.print("Host: ");
client.print(server);
client.print("\nContent-Type: application/json\n");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("\n\n");
client.print(postStr);
}
delay(1000);
Serial.println("Store response...");
String request = "";
while (client.available()) {
char c = client.read();
request +=c;
}
if (request!= NULL)
{
int index1 = request.indexOf(":{");
int index2 = request.indexOf("},");
String param = request.substring(index1, index2 + 1);
Serial.print("The param is ");
Serial.println(param);
if(param.indexOf("off")>0){
digitalWrite(BUILTIN_LED, HIGH);
Serial.println("OFF");
} else if(param.indexOf("on")>0){
digitalWrite(BUILTIN_LED, LOW);
Serial.println("ON");
}
client.stop();
Serial.println("Waiting...");
delay(2000);
}
}
参考文献
[1] http://www.linksprite.com/wiki/index.php5?title=LinkNode_D1