我是靠谱客的博主 飘逸牛排,最近开发中收集的这篇文章主要介绍Arduino+ESP8266 远程控制LED灯,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Arduino+ESP8266


#include <aJSON.h>
//=============  此处必须修该============
String DEVICEID = "123"; // 你的设备ID   ==
String  APIKEY = "222241f"; //设备密码=
//=======================================

const int LED = 4;// LED正极连接针脚4
unsigned long lastCheckStatusTime = 0; //记录上次报到时间
const unsigned long postingInterval = 10000; // 每隔40秒向服务器报到一次
unsigned long checkoutTime = 0;//登出时间

void setup() {
  pinMode(LED, OUTPUT);
  Serial.begin(115200);
  delay(5000);//等一会儿ESP8266
}
void loop() {
  //每一定时间查询一次设备在线状态,同时替代心跳
  if (millis() - lastCheckStatusTime > postingInterval) {
    checkStatus();
  }
  //checkout 50ms 后 checkin
  if ( checkoutTime != 0 && millis() - checkoutTime > 50 ) {
    checkIn();
    checkoutTime = 0;
  }
  //读取串口信息
  while (Serial.available()) {
    String inputString = Serial.readStringUntil('n');
    //检测json数据是否完整
    int jsonBeginAt = inputString.indexOf("{");
    int jsonEndAt = inputString.lastIndexOf("}");
    if (jsonBeginAt != -1 && jsonEndAt != -1) {
      //净化json数据
      inputString = inputString.substring(jsonBeginAt, jsonEndAt + 1);
      int len = inputString.length() + 1;
      char jsonString[len];
      inputString.toCharArray(jsonString, len);
      aJsonObject *msg = aJson.parse(jsonString);
      processMessage(msg);
      aJson.deleteItem(msg);
    }
  }
}
//设备登录
//{"M":"checkin","ID":"xx1","K":"xx2"}n
void checkIn() {
  Serial.print("{"M":"checkin","ID":"");
  Serial.print(DEVICEID);
  Serial.print("","K":"");
  Serial.print(APIKEY);
  Serial.print(""}rn");
}
//处理网络接收到到指令,执行相关动作
void processMessage(aJsonObject *msg) {
  aJsonObject* method = aJson.getObjectItem(msg, "M");
  if (!method) {
    return;
  }
  String M = method->valuestring;
  if (M == "WELCOME TO BIGIOT") {
    checkOut();
    checkoutTime = millis();
    return;
  }
  if (M == "connected") {
    checkIn();
  }
  if (M == "say") {
    aJsonObject* content = aJson.getObjectItem(msg, "C");
    aJsonObject* client_id = aJson.getObjectItem(msg, "ID");
    String C = content->valuestring;
    String F_C_ID = client_id->valuestring;
    if (C == "play") {
      digitalWrite(LED, HIGH);
      say(F_C_ID, "LED on!");
    }
    if (C == "stop") {
      digitalWrite(LED, LOW);
      say(F_C_ID, "LED off!");
    }
  }
}

//发送say指令,用于设备与用户、设备与设备间通讯
//{"M":"say","ID":"xx1","C":"xx2","SIGN":"xx3"}n
void say(String ID, String c) {
  Serial.print("{"M":"say","ID":"");
  Serial.print(ID);
  Serial.print("","C":"");
  Serial.print(c);
  Serial.print(""}rn");
}
//强制设备下线,用消除设备掉线延时
//{"M":"checkout","ID":"xx1","K":"xx2"}n
void checkOut() {
  Serial.print("{"M":"checkout","ID":"");
  Serial.print(DEVICEID);
  Serial.print("","K":"");
  Serial.print(APIKEY);
  Serial.print(""}n");
}
//查询设备在线状态
//{"M":"status"}n
void checkStatus() {
  Serial.print("{"M":"status"}n");
  lastCheckStatusTime = millis();
}

参考:远程控制通讯——基于Arduino + ESP8266控制LED灯并返回控制结果-贝壳物联,让你与智能设备沟通更方便的物联网云平台

参考:温馨提示

最后

以上就是飘逸牛排为你收集整理的Arduino+ESP8266 远程控制LED灯的全部内容,希望文章能够帮你解决Arduino+ESP8266 远程控制LED灯所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部