极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 28598|回复: 17

ESP8266向yeelink发数据问题

[复制链接]
发表于 2015-3-19 10:46:34 | 显示全部楼层 |阅读模式
ESP8266用http://www.geek-workshop.com/for ... 6&highlight=ESP提供的库和方法向yeelink发数据,DTH有温度和湿度,只发一个时数据是连续的,但是循环分别发两个出现了,两个数据都不连续,一段时间温度发成功,湿度发布成功,一段是间湿度成功了,温度不成功,不知道问题出在哪儿了,我的yeelink网址是http://www.yeelink.net/devices/2512最下面的wifi的两个数据是通过ESP8266发的。
回复

使用道具 举报

发表于 2015-3-19 11:09:47 | 显示全部楼层
本帖最后由 huan 于 2015-3-19 11:16 编辑

按照要求上传数据间隔要10S,我不知道不同传感器的数据有没有这个要求,你的DHT22数据看起来不错,我用DHT11误差比较大,而且数据上下跳动厉害,小数部分根本没用的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-19 13:24:58 | 显示全部楼层
是的,dht11精确到个位,dht22精确到小数后1位。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-19 13:26:53 | 显示全部楼层
我用的是dht+uno+esp,请问你的系统是?
回复 支持 反对

使用道具 举报

发表于 2015-3-19 15:02:32 | 显示全部楼层
网络没问题吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-19 15:53:20 | 显示全部楼层
suoma 发表于 2015-3-19 15:02
网络没问题吗?

没有问题,因为我如果发一个温度或湿度可以是连续的,现在在某一时刻要么是温度,要么是湿度,都有中断,但隔一段时间又能续上。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-19 15:54:21 | 显示全部楼层
huan 发表于 2015-3-19 11:09
按照要求上传数据间隔要10S,我不知道不同传感器的数据有没有这个要求,你的DHT22数据看起来不错,我用DHT11 ...

我用的是dht+uno+esp,请问你的系统是?
回复 支持 反对

使用道具 举报

发表于 2015-3-19 17:42:01 | 显示全部楼层
林定祥 发表于 2015-3-19 15:54
我用的是dht+uno+esp,请问你的系统是?

一样,我看你的数据基本一分钟左右有一次,没什么问题啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-19 18:02:40 | 显示全部楼层
图像上面的4个使用lan送的,最后标有wifi的的两个是用esp送的,在曲线上拉一下能看出不连续,而且两条线是互斥的。
回复 支持 反对

使用道具 举报

发表于 2015-3-19 19:25:06 | 显示全部楼层
林定祥 发表于 2015-3-19 18:02
图像上面的4个使用lan送的,最后标有wifi的的两个是用esp送的,在曲线上拉一下能看出不连续,而且两条线是互 ...

dht+uno+esp  能给个完整的程序研究一下吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-19 21:33:00 | 显示全部楼层
martincccc 发表于 2015-3-19 19:25
dht+uno+esp  能给个完整的程序研究一下吗?

好,明天贴。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-20 08:24:41 | 显示全部楼层
martincccc 发表于 2015-3-19 19:25
dht+uno+esp  能给个完整的程序研究一下吗?

//#include <Wire.h>
  #include <DHT22.h>
  #define BMP085_ADDRESS 0x77  // BMP085的I2C地址
  #define OUT
  #define REQUEST_RATE 15000 // (毫秒)yeelink要求数据传输间隔必须大于15秒
  const unsigned char OSS = 0;  // 采样设置


  #define SSID       "Tenda_F780C0"               //type your own SSID name
  #define PASSWORD   "5416048388"                                //type your own WIFI password
  #include "uartWIFI.h"
  #include <SoftwareSerial.h>
  WIFI wifi;
  extern int chlID;        //client id(0-4)
  // for yeelink api
  #define APIKEY         "34bde5ff710374a81034bfbbe2981626" // replace your yeelink api key here
  #define DEVICEID        2512 // replace your device ID
  #define SENSORID0       31234 // sensor ID for temperature sensor of DHT22.3408
  #define SENSORID1       32357 // sensor ID for humidity sensor of    DHT22.3563
  #define SENSORID2       31234 // sensor ID for perature sensor of    BMP085.4381
  #define SENSORID3       31234 // sensor ID for temperature sensor of BMP085.4387
  char server[] = "api.yeelink.net";   // name address for yeelink API

  unsigned long lastConnectionTime = 0;          // last time you connected to the server, in milliseconds
  boolean lastConnected = false;                 // state of the connection last time through the main loop
  const unsigned long postingInterval = 5*1000; // delay between 2 datapoints, 5s
  String returnValue = "";
  boolean ResponseBegin = false;



//DHT22初始化
  #define DHT22_PIN 12 //DHT22采用1线制,数据线连Aduino D9
  DHT22 myDHT22(DHT22_PIN);

//定义使用函
  short  Btemperature;
  long   Bpressure;
  float  Temperature;
  float  Humidity;
  int    SendData;
  int    sensor=1;

void setup()
  {
   wifi.begin();
    bool b = wifi.Initialize(STA, SSID, PASSWORD);
      if(!b)
        {
  //    Serial.println("Init error");
        }
      delay(8000);  //make sure the module can have enough time to get an IP address
      String ipstring  = wifi.showIP();
      //Serial.println(ipstring);                //show the ip address of module

  }

void loop()
  {
   // Btemperature = bmp085GetTemperature(bmp085ReadUT());
   // Bpressure = bmp085GetPressure(bmp085ReadUP());
     
    DHT22_ERROR_t errorCode;
    delay(1000);
    errorCode = myDHT22.readData();
    Temperature=myDHT22.getTemperatureC();
    Humidity=myDHT22.getHumidity();
  
   //char message[400];
   // if you're not connected, and ten seconds have passed since
  // your last connection, then connect again and send data:
  if((millis() - lastConnectionTime > postingInterval)) {
  //  static char buf[20];
    switch(sensor){
        case 1:          //sensor 1 DHT22 Temperature
            sensor=sensor+1;  
            sendData(DEVICEID,SENSORID0,Temperature*10);
        break;
           
       case 2:    //sensor 2 DHT22 Humidity
           sensor=1;
           sendData(DEVICEID,SENSORID1,Humidity*10);
       break;
           
      /*  case 3:    //sensor 3 BMP085 Perature
          sensor=sensor+1;
         // get_send_string(buf,Bpressure/10);
          sendData(DEVICEID,SENSORID2,23);//Bpressure/10);
        break;
            
        case 4:    //sensor 4 BMP085 Temperature
          sensor=1;
         // get_send_string(buf,(Btemperature-40));
          sendData(DEVICEID,SENSORID3,30);//(Btemperature-40));*/
             }
               }
/* if(wifi.ReceiveMessage(message))
  {
      DebugSerial.println(message);   
  }*/
  delay(10);

  }
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-20 08:25:23 | 显示全部楼层
林定祥 发表于 2015-3-20 08:24
//#include
  #include
  #define BMP085_ADDRESS 0x77  // BMP085的I2C地址

// this method makes a HTTP connection to the server:
void sendData(int device_id,int sensor_id,int thisData) {
  // if there's a successful connection:
  if (wifi.ipConfig(TCP,server, 80)) {
   //Serial.println("connecting...");
    // send the HTTP PUT request:
    String cmd;
        cmd = "POST /v1.0/device/";
        cmd += String(device_id);
        cmd += "/sensor/";
        cmd += String(sensor_id);
        cmd += "/datapoints";
        cmd += " HTTP/1.1\r\n";
        cmd += "Host: api.yeelink.net\r\n";
        cmd += "Accept: *";
        cmd += "/";
        cmd += "*\r\n";
        cmd += "U-ApiKey: ";
        cmd += APIKEY;
        cmd += "\r\n";
        cmd += "Content-Length: ";
        int thisLength = 11 + getLength(thisData);
        cmd += String(thisLength);
        cmd += "\r\n";
        cmd  += "Content-Type: application/x-www-form-urlencoded\r\n";
        cmd += "Connection: close\r\n";
        cmd += "\r\n";
        cmd += "{\"value\":";
        cmd += String(thisData/10);
        cmd += ".";
        cmd += String(thisData%10);
        cmd += "}\r\n";
      // Serial.println(cmd);
      wifi.Send(cmd);
    // note the time that the connection was made:
    lastConnectionTime = millis();
  }
  else {
    // if you couldn't make a connection:
  //  DebugSerial.println("connection failed");
  //  DebugSerial.println("disconnecting.");
    wifi.closeMux();
  }
}

int getLength(int someValue) {
  // there's at least one byte:
  int digits = 1;
  // continually divide the value by ten,
  // adding one to the digit count for each
  // time you divide, until you're at 0:
  int dividend = someValue /10;
  while (dividend > 0) {
    dividend = dividend /10;
    digits++;
  }
  // return the number of digits:
  return digits;
}

回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-20 08:27:05 | 显示全部楼层
林定祥 发表于 2015-3-20 08:25
// this method makes a HTTP connection to the server:
void sendData(int device_id,int sensor_id,i ...

由于调试没有完成,因此程序较乱一些。
回复 支持 反对

使用道具 举报

发表于 2015-3-20 23:25:15 | 显示全部楼层
林定祥 发表于 2015-3-20 08:27
由于调试没有完成,因此程序较乱一些。

谢谢。!~~~我研究研究。。
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 22:18 , Processed in 0.038773 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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