实验三:通过spriteIO来控制LinkNode R4\/R8的继电器开关

实验说明

本实验通过使用LinkSprite公司的IO平台spriteIO来实现控制LinkNode R4\/R8上的继电器开关,从而来实现通过网络来控制硬件开关的功能,主要的实用处在于用来做智能的排插。

本实验的主要工作是:通过LinkNode的wifi模块连接到网络后,然后与spriteIO平台进行网络通信,读取spriteIO上的数据来实现远程控制继电器的功能。

实验目的

了解spriteIO平台的功能,及熟练掌握使用的方法。

能够在LinkNode上使用wifi模块链接网络,并且向spriteIO平台发出简单的POST请求。

能够熟悉LinkNode上的各个IO口的端口号,能基本实现智能插座的功能。

软硬件清单

硬件

  • LinkNode R4\/R8
  • 串口连接线 x1

软件

Arduino IDE开发环境

实验步骤

1.spriteIO平台上的配置

在spriteIO平台上创建一个DIY的类型的数据,然后存储入d1,d2,d3,d4的数据分别表示继电器的状态,1表示连通,0表示断开。同理如果是LinkNode R8就是需要设置8个数据来存储8个继电器的状态。

具体操作如下图:

2.实现网络请求

把LinkNode连接电脑,并将LinkNode链接wifi网络之后,通过Arduino IDE将以下的程序源码烧录进去即可。(程序只是一个基本4个继电器的query操作,如果你选用的是LinkNode R8需要你自己实现读取8个继电器的query操作。)

源程序如下:

#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 = "ea2fe81a-dee3-4026-8743-328ad12ce1db";

const char* deviceID = "00000000df";

const char* server = "www.linksprite.io";

WiFiClient client;

int CONTROL_1 = 12;

int CONTROL_2 = 13;

int CONTROL_3 = 14;

int CONTROL_4 = 16;

int LED = 20;

void setup() {

Serial.begin(115200);

pinMode(CONTROL_1, OUTPUT);

pinMode(CONTROL_2, OUTPUT);

pinMode(CONTROL_3, OUTPUT);

pinMode(CONTROL_4, OUTPUT);

pinMode(LED_BUILTIN, 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() {

String ss;

String s1 = "d1";

String s2 = "d2";

String s3 = "d3";

String s4 = "d4";

ss = "\"";

ss += s1;

ss += "\"";

ss += ",";

ss += "\"";

ss += s2;

ss += "\"";

ss += ",";

ss += "\"";

ss += s3;

ss += "\"";

ss += ",";

ss += "\"";

ss += s4;

ss += "\"";

if (client.connect("www.linksprite.io", 80))

{

String postStr = "{";

postStr += "\"action\":\"query\",";

postStr += "\"apikey\":\"";

postStr += apikey;

postStr += "\",";

postStr += "\"deviceid\":\"";

postStr += deviceID;

postStr += "\",";

postStr += "\"params\":";

postStr += "[";

postStr += ss;

postStr += "]";

postStr += "}";

client.print("POST /api/http HTTP/1.1\n");

client.print("Host: ");

client.print("www.linksprite.io");

client.print("\nContent-Type: application/json\n");

client.print("Content-Length: ");

client.print(postStr.length());

client.print("\n\n");

client.print(postStr);

}

delay(200);

String request = "";

while (client.available())

{

char c = client.read();

request += c;

}

if (request != NULL)

{

int index1 = request.indexOf(":{");

int index2 = request.indexOf("}");

int index3 = request.indexOf(s1);

int index4 = request.indexOf(s2);

int index5 = request.indexOf(s3);

int index6 = request.indexOf(s4);

String param = request.substring(index1, index2 + 1);

int le = s1.length();

String val_1 = request.substring(index3 + le + 3, index3 + le + 4);

int ld = s2.length();

String val_2 = request.substring(index4 + ld + 3, index4 + ld + 4);

int lf = s3.length();

String val_3 = request.substring(index5 + lf + 3, index5 + lf + 4);

int lg = s4.length();

String val_4 = request.substring(index6 + lg + 3, index6 + lg + 4);

Serial.println(param);

Serial.println(val_1);

Serial.println(val_2);

Serial.println(val_3);

Serial.println(val_4);

int v_1 = val_2.toInt();

digitalWrite(CONTROL_1, val_1.toInt());

//digitalWrite(CONTROL_2,val_2.toInt());

digitalWrite(CONTROL_3, val_3.toInt());

digitalWrite(CONTROL_4, val_4.toInt());

if (val_1.toInt() == 0)

digitalWrite(CONTROL_1, LOW);

else

digitalWrite(CONTROL_1, HIGH);

if (val_2.toInt() == 0)

digitalWrite(CONTROL_2, LOW);

else

digitalWrite(CONTROL_2, HIGH);

if (val_3.toInt() == 0)

digitalWrite(CONTROL_3, LOW);

else

digitalWrite(CONTROL_3, HIGH);

if (val_4.toInt() == 0)

digitalWrite(CONTROL_4, LOW);

else

digitalWrite(CONTROL_4, HIGH);

client.stop();

delay(20);

}

}

results matching ""

    No results matching ""