实验六:LinkSprite IO

实验介绍

LinkSprite IO是一个支持RESTful API和WebSocket的物联网平台,这使得手机应用程序、网页应用程序或设备的连接变得很容易。

通过让LinkNode D1连接到LinkSprite IO,可以对设备实现以下控制:

  • 更新设备的状态信息到 LinkSprite IO

  • 通过 LinkSprite IO 来改变设备的状态

本次实验中以控制ESP8266芯片右上角蓝色LED灯的开关状态为例,说明LinkNode D1和 LinkSprite IO 的通信过程。

实验目的

  1. 了解并掌握LinkSprite IO与设备进行互通信的机制

  2. 了解并掌握LinkNode D1连接到云端的具体配置过程

  3. 提高动手实践和解决问题的能力

软硬件清单

硬件

  • LinkNode D1 x 1
  • 具有WiFi AP的设备 x 1

软件

  • Arduino IDE开发环境

实验步骤

1. 注册并登录 LinkSprite IO

  1. 进入 www.linksprite.io,注册一个帐号并登录。
  2. 创建一个设备。
  • 进入My Profile 获取“API Key”。

图1.6.1 获取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 创建一个设备 图1.6.2 创建一个设备

  • 点击创建的设备,获取设备的“Device ID”。

    图1.6.3 获取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 实验结果图 图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

results matching ""

    No results matching ""