基于Arduino ESP8266控制LED灯并返回控制结果 实验不成功,是不是提供代码有问题?

作者:devilzh | 更新时间:2016-11-16 | 浏览量:2459

教程地址  http://www.arduino.cn/thread-19051-1-1.html

按着这个来连接的,但代码好像不完整,整篇代码里,没找到 WIFI密码的设置和云服务器的连接啊??绝对新手,请指教。。。

 

kaiguan.ino 文件代码如下,只烧这部分代码总感觉有问题??

#include <aJSON.h>
//=============  此处必须修该============
String DEVICEID="1047"; // 你的设备编号   这个编号和下面的密码自己随便起吗?增加设备时也没让输入啊,还是先增加设备,生成后再写到这里??
String  APIKEY="f54631de6"; // 设备密码==
//=======================================
const int LED = 4;// LED正极连接针脚4
unsigned long lastCheckInTime = 0; //记录上次报到时间
const unsigned long postingInterval = 40000; // 每隔40秒向服务器报到一次
String inputString = "";
boolean stringComplete = false;
boolean CONNECT = true; 
char* parseJson(char *jsonString);
void setup() {
  pinMode(LED, OUTPUT);
  Serial.begin(115200);
  delay(5000);
}
void loop() {
  if(millis() - lastCheckInTime > postingInterval || lastCheckInTime==0) {
    checkIn();
  }
  serialEvent();
    if (stringComplete) {
      inputString.trim();
      //Serial.println(inputString);
      if(inputString=="CLOSED"){
        Serial.println("connect closed!");
        CONNECT=false;        
      }else{
        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);          
        }
      }      
      // clear the string:
      inputString = "";
      stringComplete = false;    
  }
}
void checkIn() {
  if (!CONNECT) {
    Serial.print("+++");
    delay(500);  
    Serial.print("\r\n"); 
    delay(1000);
    Serial.print("AT+RST\r\n"); 
    delay(6000);
    CONNECT=true;
    lastCheckInTime=0;
  }
  else{
    Serial.print("{\"M\":\"checkin\",\"ID\":\"");
    Serial.print(DEVICEID);
    Serial.print("\",\"K\":\"");
    Serial.print(APIKEY);
    Serial.print("\"}\r\n");
    lastCheckInTime = millis();   
  }
}
void processMessage(aJsonObject *msg){
  aJsonObject* method = aJson.getObjectItem(msg, "M");
  aJsonObject* content = aJson.getObjectItem(msg, "C");     
  aJsonObject* client_id = aJson.getObjectItem(msg, "ID");  
  //char* st = aJson.print(msg);
  if (!method) {
    return;
  }
    //Serial.println(st); 
    //free(st);
    String M=method->valuestring;
    String C=content->valuestring;
    String F_C_ID=client_id->valuestring;
    if(M=="say"){
      if(C=="play"){
        digitalWrite(LED, HIGH);
        sayToClient(F_C_ID,"LED on!");    
      }
      if(C=="stop"){
        digitalWrite(LED, LOW);
        sayToClient(F_C_ID,"LED off!");    
      }
    }
}
void sayToClient(String client_id, String content){
  Serial.print("{\"M\":\"say\",\"ID\":\"");
  Serial.print(client_id);
  Serial.print("\",\"C\":\"");
  Serial.print(content);
  Serial.print("\"}\r\n");
  lastCheckInTime = millis();
}
void serialEvent() {
  while (Serial.available()) {
    char inChar = (char)Serial.read();
    inputString += inChar;
    if (inChar == '\n') {
      stringComplete = true;
    }
  }
}


评论:共19条

贝壳物联 评论于:2016-11-17 08:58:37
esp模块在本示例中的使用前提是要进行透传设置,参见:http://www.bigiot.net/talk/1.html
联网相关设置在透传中进行,教程里在硬件部分有说明。
devilzh 回复于:2016-11-17 11:16:35
回复 @贝壳物联:
如果按您的教程里,先烧录 config.ino,再按 上面的教程,烧录 kaiguan.ino,岂不是把 配置的代码覆盖了,还是没有用啊??我是小白,麻烦了。
贝壳物联 回复于:2016-11-17 11:38:17
回复 @devilzh:config.ino完成它的设置使命之后,可有放心覆盖了。
devilzh 回复于:2016-11-17 15:00:47
回复 @贝壳物联:
多谢,config将联网的配置写入ESP,重启后,ESP按写入的配置自动联网。kaiguan.ino 只负责处理通信,控制LED就完事了,是这个意思吧。
devilzh 回复于:2016-11-17 15:02:00
回复 @贝壳物联:
再麻烦一下,那个编号和下面的密码是自己随便起吗?增加设备时也没让输入啊,还是先增加设备,生成后再写到那里??
贝壳物联 回复于:2016-11-18 16:09:38
回复 @devilzh:在用户中心添加设备,每一个设备都有对应的id和apikey。
hyd8058 回复于:2017-06-09 11:34:17
回复 @贝壳物联您好,我想先烧录webconfig的init.lua和main.lua,然后再烧录kaiguan的nit.lua和main.lua,而kaiguan里的wifi配置我隐藏掉,这样可以把kaiguan和webconfig两者结合,您看这样可以吗?
ignore 评论于:2016-11-18 14:29:03
问一下,你是否实现了LED 的控制,我有个情况搞不明白,显示在线,发送play,返回不了LED turn on
贝壳物联 回复于:2016-11-18 16:11:19
回复 @ignore:改动过源代码吗?除了id和key
ignore 回复于:2016-11-18 16:59:21
回复 @贝壳物联:没有,
贝壳物联 回复于:2016-11-18 17:03:44
回复 @ignore:具体细节问题可进群交流。
ignore 回复于:2016-11-18 17:27:30
回复 @贝壳物联:具体原因搞不懂,刷nodemcu是可以的,唯独刷arduino不行,刚接触,不知道是不是提供的代码有问题!
贝壳物联 回复于:2016-11-18 21:21:28
回复 @ignore:代码都经过大家检验的,应该没有问题,当然也可能设备的特殊性引起问题。
devilzh 回复于:2016-11-19 16:18:12
回复 @ignore:
我的费了很大劲才连成功,但有一些还在理解中,刚接触这块,需要学习的东西太多了。

ignore 回复于:2016-11-21 13:54:46
回复 @devilzh:我想请教你下,你具体是卡在什么地方?
devilzh 回复于:2016-11-21 14:08:51
回复 @ignore: 先烧写config 后烧写 kaiguan.ino,连线弄错了,我用的arduino,没用TTL,两次用的串口的引脚不同,我注意,浪费时间了。
ignore 回复于:2016-11-22 14:12:16
回复 @devilzh:kaiguan的程序中没有写明串口,config里面是2、3,kaiguan.ino怎么没写啊?
zwa7788 回复于:2016-12-29 12:45:55
回复 @devilzh:是kaiguan.ino还是kaiguan.lua?
吱吱吱 评论于:2017-05-03 18:06:20
能不能用UDP协议实现?
返回顶部