查看: 1730|回复: 5

W5100和DTH驱动冲突问题

[复制链接]

8

主题

0

好友

176

积分

注册会员

Rank: 2

发表于 2013-4-27 14:34:42 |显示全部楼层
用W5100采集模拟温度上传到YeeLink,监看COM口,回传显示正常,将传感器换成DHT22,调用相应的库函数后,监看COM会传说字符一个个蹦出来.网站上曲线的刷新周期慢到了8分钟一个轮回了,如果不要W5100回传,只用COM口打印温度,湿度正常,怀疑W5100和DHT22库有冲突,那位大侠能有对策.
回复

使用道具 举报

2

主题

0

好友

398

积分

版主

Rank: 7Rank: 7Rank: 7

发表于 2013-4-27 16:44:16 |显示全部楼层
哦?不太可能吧,很多人试了这个没问题啊
回复

使用道具 举报

1

主题

0

好友

67

积分

注册会员

Rank: 2

发表于 2013-4-27 16:51:06 |显示全部楼层
本帖最后由 paublo 于 2013-4-27 16:53 编辑

上传下我的程序,供你参考吧,我用的是W5100和DHT11。拿别人程序改的。具体工程,详见附件。
---------------------------------------------------------------------------------------------------
#include <dht.h>
#include <SPI.h>
#include <Ethernet.h>
#include <math.h>

byte buff[2];
dht DHT;  
#define APIKEY         "************"// Your APIKEY
#define DEVICEID       ****  //Your device ID
#define SENSORIDTemp      ****  //Your sensor ID
#define SENSORIDHum       ****  //Your sensor ID
#define DHT11_PIN A1  //IO for DHT11
uint8_t i=0;
byte mac[] = { 0x00, 0x1D, 0x72, 0x82, 0x35, 0x9D};
EthernetClient client;
char server[] = "api.yeelink.net";   
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 = 11*1000; // delay between 2 datapoints, 30s

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

void loop()
{
  if (client.available())
    {
    char c = client.read();
    Serial.print(c);
    }
  if (!client.connected() && lastConnected)
    {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    }
  if(!client.connected() && (millis() - lastConnectionTime > postingInterval))
    {
    int DHTchk = DHT.read11(DHT11_PIN);
    switch(i)
            {  
              case 0: //DHT.temperature
                {
                sendData(DHT.temperature);
                i++;
                if (i == 2) i=0;  
                break;
                }
      case 1: //DHT.humidity
                {
                sendData(DHT.humidity);
                i++;
                if (i == 2) i=0;  
                break;
                }
            }
    }
  lastConnected = client.connected();
}

void sendData(uint8_t thisData)
{  
    if (client.connect(server, 80))
      {
        Serial.println("connecting...");
        client.print("POST /v1.0/device/");
        client.print(DEVICEID);
        client.print("/sensor/");
        switch(i)
                {  
                  case 0: //DHT.temperature
                           {
                          client.print(SENSORIDTemp);
                            break;
                        }
                      case 1: //DHT.humidity
                        {
                          client.print(SENSORIDHum);
                        break;
                        }
                }
        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();   
          }
   // note the time that the connection was made or attempted:
  lastConnectionTime = millis();
}

int getLength(int someValue) {
  // there's at least one byte:
  int digits = 1;
  int dividend = someValue /10;
  while (dividend > 0) {
    dividend = dividend /10;
    digits++;
  }
  return digits;
}

w5100dht11.zip

2.89 KB, 下载次数: 660

回复

使用道具 举报

8

主题

0

好友

176

积分

注册会员

Rank: 2

发表于 2013-4-28 12:58:06 |显示全部楼层
参考了pauplo例程,问题解决了,谢谢.原来安排温度和湿度数据一起接收,在顺序传送,现在将读传感器的数据嵌入各自的sendData前,分别读数据,效率提高了。重复传输的时间间隔也参照例程从30秒减低到11秒。现在实现了两个参数间隔10S左右,每个参数间隔20S左右。
回复

使用道具 举报

3

主题

0

好友

78

积分

注册会员

Rank: 2

发表于 2013-6-1 11:35:40 |显示全部楼层
提示: 该帖被管理员或版主屏蔽
回复

使用道具 举报

2

主题

0

好友

46

积分

新手上路

Rank: 1

发表于 2013-8-4 12:16:42 |显示全部楼层
paublo 发表于 2013-4-27 16:51
上传下我的程序,供你参考吧,我用的是W5100和DHT11。拿别人程序改的。具体工程,详见附件。
------------- ...

你这个DHT11的库版本很老啊
回复

使用道具 举报

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

Archiver|手机版|Yeelink.net

Powered by Discuz! X2.5

回顶部