极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10319|回复: 1

物联网数据和开关控制延迟厉害,求助

[复制链接]
发表于 2016-10-21 20:55:29 | 显示全部楼层 |阅读模式
最近接触了物联网,就找yeelink编了代码测试,目的是想让yeelink能够获取温度数据,同时接了一个LED开关,希望能够上传温度数据的过程中,也能够随时控制LED开关。现在功能能够实现,但是数据经常好几分钟传一个,而且没什么规律。开关点击后很长时间才能够看到设备效果。

有哪位大神指点下,看看哪里错了?



#include <SPI.h>
#include <Ethernet.h>
#define ledpin 3
#define APIKEY         "0683c31991703ace433e551e9443233"
#define DEVICEID       35104
#define SENSORID      39511
#define SENSORID2       39430

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
EthernetClient client;
char server[] = "api.yeelink.net";  

unsigned long lastConnectionTime = 0;         
boolean lastConnected = false;               
const unsigned long postingInterval = 3*1000;
String returnValue = "";
boolean ResponseBegin = false;

void setup()
{
  pinMode(ledpin, OUTPUT);
  Serial.begin(9600);
  
  if (Ethernet.begin(mac) == 0)
      {
         Serial.println("Failed to configure Ethernet using DHCP");
         for(;;)
          ;
      }
  else
      {
          Serial.println("Ethernet configuration OK");
      }
}

void loop() {
   while(client.available())
   {   
  char c = client.read();
  if (c == '{')
      
        {
           ResponseBegin = true;  
         }
      else if (c == '}')
        {
           ResponseBegin = false;
        }      
      if (ResponseBegin)
        
        {
          returnValue += c;
         }
      if (returnValue.length() !=0 && (ResponseBegin == false))
       {
          Serial.println(returnValue);   
          if (returnValue.charAt(returnValue.length() - 1) == '1')
              {
                Serial.println("turn on the LED");
                digitalWrite(ledpin, HIGH);
               }
           else if(returnValue.charAt(returnValue.length() - 1) == '0')
           {
                Serial.println("turn off the LED");
                digitalWrite(ledpin, LOW);
            }
           returnValue = "";
      }      
   }



  if (!client.connected() && lastConnected) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
  }
   if(!client.connected() && (millis() - lastConnectionTime > postingInterval))
      {Serial.print("yeelink:");
           getData();
       int sensorReading = analogRead(0);//读取传感器数据并发送到yeelink服务。
       Serial.print("yeelink:");
       Serial.println(sensorReading);   
       sendData(sensorReading);
      }
  lastConnected = client.connected();
  
  }
  
void getData(void) {

  if (client.connect(server, 80))
  {
    Serial.println("connecting...");
   
   
    client.print("GET /v1.0/device/");
    client.print(DEVICEID);
    client.print("/sensor/");
    client.print(SENSORID2);
    client.print("/datapoints");
    client.println(" HTTP/1.1");
    client.println("Host: api.yeelink.net");
    client.print("Accept: *");
    client.print("/");
    client.println("*");
    client.print("U-ApiKey: ");
    client.println(APIKEY);
    client.println("Content-Length: 0");
    client.println("Connection: close");
    client.println();
    Serial.println("print get done.");
   
  }
  else {
   
    Serial.println("connection failed");
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
  }

  lastConnectionTime = millis();
}
void sendData(int thisData)
  {  
       if (client.connect(server, 80))
          {
             Serial.println("connecting...");     
             client.print("POST /v1.0/device/");
             client.print(DEVICEID);
             client.print("/sensor/");
             client.print(SENSORID);
             client.print("/datapoints");
             client.println(" HTTP/1.1");
             client.println("Host: api.yeelink.net");
             client.print("Accept: *");
             client.print("/");
             client.println("*");
             client.print("U-ApiKey: ");
             client.println(APIKEY);
             client.print("Content-Length: ");

   
             int thisLength = 10 + getLength(thisData);
             client.println(thisLength);
   
             client.println("Content-Type: application/x-www-form-urlencoded");
             client.println("Connection: close");
             client.println();
   
             client.print("{\"value\":");
             client.print(thisData);
             client.println("}");
          }
      else
         {   
            Serial.println("connection failed");
            Serial.println();
            Serial.println("disconnecting.");
            client.stop();
         }
   
      lastConnectionTime = millis();
  }
  
int getLength(int someValue)
   {
     int digits = 1;
     int dividend = someValue /10;
     while (dividend > 0)
        {
          dividend = dividend /10;
          digits++;
        }
      return digits;
   }

回复

使用道具 举报

发表于 2016-10-22 23:06:32 | 显示全部楼层
如果是无线的建议检查下网速
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-20 06:04 , Processed in 0.043506 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表