111yyy2 发表于 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;
   }

zhang209a 发表于 2016-10-22 23:06:32

如果是无线的建议检查下网速
页: [1]
查看完整版本: 物联网数据和开关控制延迟厉害,求助