|
物聯(lián)網(wǎng)沒(méi)有服務(wù)器是不行的,那只能叫局域網(wǎng)。今天寫(xiě)一下通過(guò)貝殼物聯(lián)怎么打造屬于自己的智能開(kāi)關(guān)。首先說(shuō)一下要備一片8266的模塊,推薦ESP826 NodeMCU 因?yàn)檫@個(gè)比很方便一條安卓USB數(shù)據(jù)線就可以了。 其次是在貝殼物聯(lián)注冊(cè)一個(gè)賬號(hào),網(wǎng)址是 www點(diǎn)bigiot點(diǎn)net 然后添加智能設(shè)備,添加完成后你會(huì)得到設(shè)備的ID 和密碼 。這些準(zhǔn)備好了以后你還得有Arduino IDE,添加8266的開(kāi)發(fā)環(huán)境這個(gè)網(wǎng)上有很多教程。不會(huì)的自己百度一下。接下來(lái)就是代碼:
#include <ESP8266WiFi.h>#include <aJSON.h>
//============= 此處必須修該============
String DEVICEID="*****";//你的設(shè)備編號(hào)==改成你貝殼物聯(lián)里智能設(shè)備的ID
String APIKEY="*****";//設(shè)備密碼==改成你貝殼物聯(lián)里智能設(shè)備的密碼
const char* ssid="CMCC-hkws";//WiFi名稱 你的WIFI名稱
const char* password="147258369";//WiFi密碼 你的WIFI密碼
//=======================================
#define OUT 2//輸出控制繼電器端口
//=======================================
unsigned long lastCheckInTime=0;//記錄上次報(bào)到時(shí)間
const unsigned long postingInterval=40000;//每隔40秒向服務(wù)器報(bào)到一次
const char* host="www點(diǎn)bigiot點(diǎn)net";
const int httpPort=8181;
WiFiClient client;
void setup()
{
pinMode(OUT,OUTPUT);//設(shè)置輸出
digitalWrite(OUT,LOW);//上電打開(kāi)輸出
pinMode(LED_BUILTIN,OUTPUT);//設(shè)備板載LED輸出模式
digitalWrite(LED_BUILTIN,HIGH);//關(guān)閉LED
Serial.begin(115200);
Serial.println();
Serial.println();
WiFi.begin(ssid,password);//連接WiFi
while(WiFi.status()!= WL_CONNECTED)//等待WiFi連接成功
{
delay(500);
Serial.print(".");
}
Serial.println();
}
void loop()
{
// Use WiFiClient class to create TCP connections
if(!client.connected())
{
if(!client.connect(host, httpPort))
{
Serial.println("connection failed");
delay(5000);
return;
}
}
if(millis()-lastCheckInTime>postingInterval||lastCheckInTime==0)
checkIn();
// Read all the lines of the reply from server and print them to Serial
if (client.available())
{
String inputString=client.readStringUntil('\n');
inputString.trim();
Serial.println(inputString);
int len=inputString.length()+1;
if(inputString.startsWith("{") && inputString.endsWith("}"))
{
char jsonString[len];
inputString.toCharArray(jsonString,len);
aJsonObject *msg = aJson.parse(jsonString);
processMessage(msg);
aJson.deleteItem(msg);
}
}
}
void processMessage(aJsonObject *msg)
{
aJsonObject* method=aJson.getObjectItem(msg,"M");
aJsonObject* content=aJson.getObjectItem(msg,"C");
aJsonObject* client_id=aJson.getObjectItem(msg,"ID");
if(!method)
return;
String M=method->valuestring;
if(M=="say")
{
String C=content->valuestring;
String F_C_ID=client_id->valuestring;
digitalWrite(LED_BUILTIN,LOW);//接收到指令就閃一下LED
delay(50);
digitalWrite(LED_BUILTIN,HIGH);
if(C=="stop") //接收到的是停止指令
{
digitalWrite(OUT,HIGH);//關(guān)閉
sayToClient(F_C_ID,"LED All off!");
}
if(C=="play") //接收到的是停止指令//接收到的不是停止指令
{
digitalWrite(OUT,LOW);//打開(kāi)
sayToClient(F_C_ID,"LED All on!");
}
}
}
void checkIn()
{
String msg="{\"M\":\"checkin\",\"ID\":\"" + DEVICEID + "\",\"K\":\"" + APIKEY + "\"}\n";
client.print(msg);
lastCheckInTime=millis();
}
void sayToClient(String client_id, String content)
{
String msg="{\"M\":\"say\",\"ID\":\"" + client_id + "\",\"C\":\"" + content + "\"}\n";
client.print(msg);
lastCheckInTime=millis();
}
需要修改為你的設(shè)備的信息和你的WIFI信息 編譯下載到8266串口打贏信息如下
串口輸出的正確信息
|
-
8266 NodeMCU
-
智能設(shè)備添加后
評(píng)分
-
查看全部評(píng)分
|