2015-5-12 22:50:37 [显示全部楼层]
5497浏览
查看: 5497|回复: 2

[已解决] 帮忙看下代码,WIDO启动后只能连接yeelink服务器一次的问题

[复制链接]
下面的代码传到我的WIDO上,每次重新启动可以连接yeelink服务器一次,这个时候LED灯的状态是和服务器一样的。但是,这个时候我在服务器上修改了灯的状态,WIDO的灯还是不会变的,必须要重新启动一次才能获取服务器灯的状态。
下面是我的代码和COM口信息:com口信息:
Connected
Request DHCP
Yeelink:Try to connect the cloud server
api.yeelink.net -> 42.96.164.52Connecting...
Print get done.
{"timestamp":"2015-05-08T15:09:17","value":1
Turn on the LED

Disconnecting.
Yeelink:Try to connect the cloud server
api.yeelink.net -> 42.96.164.52Connecting...



代码:

#include <SPI.h>
#include <Adafruit_CC3000.h>
#include <ccspi.h>
#include <string.h>
#include "utility/debug.h"

#define WEBSITE         "api.yeelink.net"
#define APIKEY          "5b1fb34ee17278a360fc3772888888"
#define DEVICEID        "20888"
#define SENSORID1       "36888"

#define Wido_IRQ   7
#define Wido_VBAT  5
#define Wido_CS    10

Adafruit_CC3000 Wido = Adafruit_CC3000(Wido_CS, Wido_IRQ, Wido_VBAT, SPI_CLOCK_DIVIDER);
Adafruit_CC3000_Client WidoClient;

#define WLAN_SSID       "xx88888"
#define WLAN_PASS       "8888888"
#define WLAN_SECURITY   WLAN_SEC_WPA2

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


void setup()
{
  pinMode(13, OUTPUT);
  Serial.begin(9600);
  Serial.println(F("Initialising the CC3000 ..."));
  if (!Wido.begin())
  {
    Serial.println(F("Unable to initialise the CC3000! Check your wiring?"));
    while(1);
  }

  char *ssid = WLAN_SSID;
  Serial.print(F("Attempting to connect to "));
  Serial.println(ssid);

  if (!Wido.connectToAP(WLAN_SSID, WLAN_PASS, WLAN_SECURITY))
  {
    Serial.println(F("Failed!"));
    while(1);
  }
  Serial.println(F("Connected"));

  Serial.println(F("Request DHCP"));
  while (!Wido.checkDHCP())
  {
    delay(100);
  }
    while (! displayConnectionDetails()) {
    delay(1000);
  }
}


void loop()
{
  if (WidoClient.available())
  {
    char c = WidoClient.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(13, HIGH);
    }
    else if(returnValue.charAt(returnValue.length() - 1) == '0')
    {
      Serial.println("Turn off the LED");
      digitalWrite(13, LOW);
    }
    returnValue = "";
  }


  if (!WidoClient.connected() && lastConnected)
  {
    Serial.println();
    Serial.println("Disconnecting.");
    WidoClient.close();
  }

  if(!WidoClient.connected() && (millis() - lastConnectionTime > postingInterval))
  {
    Serial.print("Yeelink:");
    getData();
  }
  lastConnected = WidoClient.connected();
}


void getData(void)
{
  if(!WidoClient.connected())
  {
    Serial.println(F("Try to connect the cloud server"));
    WidoClient.close();

    Serial.print(F("api.yeelink.net -> "));
    while (ip  ==  0)
    {
      if (!Wido.getHostByName(WEBSITE, &ip))
      {
        Serial.println(F("Couldn't resolve!"));
      }
      delay(500);
    }
    Wido.printIPdotsRev(ip);
    WidoClient = Wido.connectTCP(ip, 80);
  }

  if (WidoClient.connected())
  {
    Serial.println("Connecting...");

    WidoClient.fastrprint("GET /v1.0/device/");
    WidoClient.fastrprint(DEVICEID);
    WidoClient.fastrprint("/sensor/");
    WidoClient.fastrprint(SENSORID1);
    WidoClient.fastrprint("/datapoints");
    WidoClient.fastrprintln(" HTTP/1.1");
    WidoClient.fastrprintln("Host: api.yeelink.net");
    WidoClient.fastrprint("Accept: *");
    WidoClient.fastrprint("/");
    WidoClient.fastrprintln("*");
    WidoClient.fastrprint("U-ApiKey: ");
    WidoClient.fastrprintln(APIKEY);
    WidoClient.fastrprintln("Content-Length: 0");
    WidoClient.fastrprintln("Connection: close");
    WidoClient.fastrprintln("");

    Serial.println("Print get done.");
  }
  else
  {
    Serial.println("Connection failed");
    Serial.println();
    Serial.println("Disconnecting.");
    WidoClient.close();
  }
  lastConnectionTime = millis();
}


bool displayConnectionDetails(void)
{
  uint32_t ipAddress, netmask, gateway, dhcpserv, dnsserv;

  if(!Wido.getIPAddress(&ipAddress, &netmask, &gateway, &dhcpserv, &dnsserv))
  {
    Serial.println(F("Unable to retrieve the IP Address!\r\n"));
    return false;
  }
  else
  {
    Serial.print(F("\nIP Addr: ")); Wido.printIPdotsRev(ipAddress);
    Serial.print(F("\nNetmask: ")); Wido.printIPdotsRev(netmask);
    Serial.print(F("\nGateway: ")); Wido.printIPdotsRev(gateway);
    Serial.print(F("\nDHCPsrv: ")); Wido.printIPdotsRev(dhcpserv);
    Serial.print(F("\nDNSserv: ")); Wido.printIPdotsRev(dnsserv);
    Serial.println();
    return true;
  }
}


Cain  初级技匠

发表于 2015-5-13 17:29:47

试了一下你的程序,可以一直连接的,会有一定延迟,等一下就行。
回复

使用道具 举报

Cain  初级技匠

发表于 2015-6-3 16:57:08

亲,不知道是不是这原因,用1.0.6版本的arduinoIDE好像就可以了
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail