使用WIFI Shield V3上传温湿度到YEELINK,yeelink无数据

2014-10-221.6万
AI 快速预览详细 收起
本文介绍了使用WIFI Shield V3将DHT11传感器的温湿度数据上传到YEELINK平台时遇到无数据的问题。具体报错现象是数据未能成功上传。文章提供了详细的代码示例和故障排查步骤,特别是检查API请求的Content-Length字段与实际数据长度的一致性。通过修正Content-Length字段,可以确保数据正确上传。
弄了很久都没有弄好,现在只能找大家帮忙了,折腾好几个晚上了
程序:
#include <dht11.h>
dht11 DHT;
float TEMP;
int HUMI;
int thisLength;
int time=0;
void setup()
{
  Serial.begin(115200);
  pinMode(13,OUTPUT);
}
void loop()
{
  int chk = DHT.read(4);
  TEMP = DHT.temperature;
  HUMI = DHT.humidity;
  TEMP = (int(TEMP * 100.0)) / 100.0;
  char tempStr[20];
  floatToString(TEMP,tempStr);
  String data;
  data+="";
  data+=String(tempStr);
  int t=data.length();



  time=time+1;
  if (time%2==1)
  {
    Serial.println("POST http://api.yeelink.net/v1.0/device/14899/sensor/25567/datapoints/add");
    Serial.println("Host: api.yeelink.net");
  Serial.print("Accept: *");
   Serial.print("/");
   Serial.println("*");
   Serial.print("U-ApiKey: ");
   Serial.println("9d2b482044dfaa42ad59806af17ae5c3");   // 此处用你的APIKEY替代
    Serial.print("Content-Length: ");
    int thislength=17+t;
    Serial.println(thislength);
    Serial.println("Content-Type: application/x-www-form-urlencoded");
    Serial.println("Connection: close");   
    Serial.println();
    Serial.print("params={\"value\":");
    Serial.print(TEMP);
    Serial.println("}");
    delay(1000);
      digitalWrite(13,LOW);
   delay(5000);
  }

  else if(time%2==0)
  {
    Serial.println("POST http://api.yeelink.net/v1.0/device/14899/sensor/25786/datapoints/add");
    Serial.println("Host: api.yeelink.net");
  Serial.print("Accept: *");
   Serial.print("/");
   Serial.println("*");
   Serial.print("U-ApiKey: ");
   Serial.println("9d2b482044dfaa42ad59806af17ae5c3");
    Serial.print("Content-Length: ");
    int thislength=17+getLength(HUMI);
    Serial.println(thislength);
    Serial.println("Content-Type: application/x-www-form-urlencoded");
    Serial.println("Connection: close");   
    Serial.println();
    Serial.print("params={\"value\":");
    Serial.print(HUMI);
    Serial.println("}");
     delay(1000);
   digitalWrite(13,LOW);
   delay(5000);
  }
}

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;
}
  void floatToString(float in,char* out){
    uint16_t Tc_100 = in*100;
    uint8_t whole, fract;
    whole = Tc_100/100 ; // separate off the whole and fractional portions
    fract = Tc_100 % 100;
    sprintf(out,"%d.%d",whole,fract);
    delay (10000);
  }


COM的数据
POST http://api.yeelink.net/v1.0/device/14899/sensor/25567/datapoints/add
Host: api.yeelink.net
Accept: */*
U-ApiKey: 9d2b482044dfaa42ad59806af17ae5c3
Content-Length: 21
Content-Type: application/x-www-form-urlencoded
Connection: close
params={"value":28.00}
POST http://api.yeelink.net/v1.0/device/14899/sensor/25786/datapoints/add
Host: api.yeelink.net
Accept: */*
U-ApiKey: 9d2b482044dfaa42ad59806af17ae5c3
Content-Length: 19
Content-Type: application/x-www-form-urlencoded
Connection: close
params={"value":71}
POST http://api.yeelink.net/v1.0/device/14899/sensor/25567/datapoints/add
Host: api.yeelink.net
Accept: */*
U-ApiKey: 9d2b482044dfaa42ad59806af17ae5c3
Content-Length: 21
Content-Type: application/x-www-form-urlencoded
Connection: close
params={"value":28.00}


下面是wifi sheild的设置界面的截图,连续好几天都折腾到深夜,还是无果,求大家帮忙看一下

使用WIFI Shield V3上传温湿度到YEELINK,yeelink无数据图1
使用WIFI Shield V3上传温湿度到YEELINK,yeelink无数据图2
使用WIFI Shield V3上传温湿度到YEELINK,yeelink无数据图3
使用WIFI Shield V3上传温湿度到YEELINK,yeelink无数据图4
使用WIFI Shield V3上传温湿度到YEELINK,yeelink无数据图5
YEELINK界面
使用WIFI Shield V3上传温湿度到YEELINK,yeelink无数据图6
使用WIFI Shield V3上传温湿度到YEELINK,yeelink无数据图7

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(5)
caihuiwei
caihuiwei
作者
感谢楼上几位的回复,可是试了都不行啊,还是没有数据,直接放弃这块板了,买了其他的板再试,DFROBOT的客服做的太垃圾了,东西卖高价,客服对你不理不睬的
咆哮的过来
咆哮的过来回复caihuiwei
买了什么板呢?试了有用我也去买!seeeduino的板和wifi都太难懂了,网上的例程都找不到
咆哮的过来
咆哮的过来回复caihuiwei
买了什么板呢?试了有用我也去买!seeeduino的板和wifi都太难懂了,网上的例程都找不到
咆哮的过来
咆哮的过来
我买的是seeeduino的板和wifi shield(好像叫wifly吧),总是failed connect
咆哮的过来
咆哮的过来
我也是!数据都上传不了,好心塞
Youyou
Youyou
试试这段代码:
[code]//没有传感器,上传一个循环的1-10的数字
int i;
//for yeelink api
#define APIKEY "*******" //改为自己的
#define DEVICEID **** //改为自己的
#define SENSORID **** //改为自己的
void postData(int thisData) {
Serial.print("POST /v1.0/device/");
Serial.print(DEVICEID);
Serial.print("/sensor/");
Serial.print(SENSORID);
Serial.print("/datapoints");
Serial.println(" HTTP/1.1");
Serial.println("Host: api.yeelink.net");
Serial.print("Accept: *");
Serial.print("/");
Serial.println("*");
Serial.print("U-ApiKey: ");
Serial.println(APIKEY);
Serial.print("Content-Length: ");
int thisLength = 10 + getLength(thisData);
Serial.print(thisLength);
Serial.println();
Serial.println("Content-Type: application/x-www-form-urlencoded");
Serial.println();
Serial.print("{"value":");
Serial.print(thisData);
Serial.println("}");
}
int getLength(int someValue) {
int digits = 1;
int dividend = someValue /10;
while (dividend > 0) {
dividend = dividend /10;
digits++;
}
return digits;
}
void setup(){
Serial.begin(115200);
}
void loop() {
for(i=1;i<10;i++){
postData(i);
delay(5*1000);
}
}[/code]
参考:http://blog.sina.com.cn/s/blog_54bf41d30101qpq4.html#commonComment
洞洞龟
洞洞龟
POST 后面不用加 http://api.yeelink.net试试
- 没有更多了 -