WIdo联网代码中文注释

代码如下

/*************************************************** 
这是一个例子的dfrobot维多-无线集成物联网建兴传感器和控制节点
*产品页面及更多信息:http://www.dfrobot.com.cn/goods-997.html
*特别设计的dfrobot维多产品的工作:
*
*图书馆叉从Adafruit
*
*劳伦写的
* BSD许可证,所有以上文字必须包含在任何重
 * 
 ****************************************************/
 
/*
This example code is used to connect the Yeelink cloud service (Official homepage: www.yeelink.net).
这个示例代码用于连接Yeelink云服务(官方主页:www.yeelink.net)。
 The device required is just:
 需要的设备是:
 1. LM35 low cost temperature sensor or any device you used to upload data
 1。LM35低成本温度传感器或任何用于上传数据的设备
 2. And Wido
2。和Wido
注意:请不要忘记在使用前更改下面的设置!
1。wlan_ssid和wlan_pass
2。api_key
三.设备ID和传感器ID

 */


#include <Adafruit_CC3000.h>
#include <ccspi.h>
#include <SPI.h>
#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); // 你可以改变这个时钟速度。
//安全可以wlan_sec_unsec,wlan_sec_wep,wlan_sec_wpa或wlan_sec_wpa2
#define WLAN_SECURITY   WLAN_SEC_WPA2


#define WLAN_SSID       "modou-2002"           // 不能超过32个字符!
#define WLAN_PASS       "23456789"          //用于连接的路由器或AP,不要忘记设置SSID和密码!!


#define TCP_TIMEOUT      3000
//#define CC3000_TINY_DRIVER

#define WEBSITE  "api.yeelink.net"
#define API_key  "733115abefe88b0033c035ac9e000000"  // Update Your API Key. To get your API Key, please check the link below
                                                     // http://www.yeelink.net/user/user_profile

void setup(){

  Serial.begin(115200);
  Serial.println(F("Hello, CC3000!
"));

  /* Initialise the module */
  Serial.println(F("
Initialising the CC3000 ..."));//初始化的CC3000…
  if (!Wido.begin())
  {
    Serial.println(F("Unable to initialise the CC3000! Check your wiring?"));//无法初始化的CC3000!检查你的线路?”
    while(1);
  }

  /* 尝试连接到接入点*/
  char *ssid = WLAN_SSID;             /* Max 32 chars */
  Serial.print(F("
Attempting to connect to ")); 
  Serial.println(ssid);

  /* 注意:安全连接在“微”模式下不可用!
默认情况下connecttoap将重试下去,但是你可以通过
最大重试次数可选(大于零)作为第四个参数。
   */
  if (!Wido.connectToAP(WLAN_SSID, WLAN_PASS, WLAN_SECURITY)) {
    Serial.println(F("Failed!"));
    while(1);
  }

  Serial.println(F("Connected!"));

  /* 等待DHCP完成 */
  Serial.println(F("Request DHCP"));
  while (!Wido.checkDHCP())
  {
    delay(100); // ToDo: 插入DHCP超时!
  }  

}

uint32_t ip = 0;
float temp = 0;

void loop(){
  
  static Adafruit_CC3000_Client WidoClient;
  static unsigned long RetryMillis = 0;
  static unsigned long uploadtStamp = 0;
  static unsigned long sensortStamp = 0;

  if(!WidoClient.connected() && millis() - RetryMillis > TCP_TIMEOUT){
    // Update the time stamp更新时间戳
    RetryMillis = millis();

    Serial.println(F("Try to connect the cloud server"));
    WidoClient.close();

    // Get Yeelink IP address把Yeelink IP的地址
    Serial.print(F("api.yeelink.net -> "));
    while  (ip  ==  0)  {
      if  (!Wido.getHostByName(WEBSITE, &ip))  {    //  Get the server IP address based on the domain name根据域名获取服务器IP地址
        Serial.println(F("Couldn't resolve!"));
      }
      delay(500);
    }  
    Wido.printIPdotsRev(ip);
    Serial.println(F(""));
    
    // Connect to the Yeelink Server连接到服务器的yeelink
    WidoClient = Wido.connectTCP(ip, 80);          // Try to connect cloud server
  }
  
  if(WidoClient.connected() && millis() - uploadtStamp > 2000){
    uploadtStamp = millis();
    // If the device is connected to the cloud server, upload the data every 2000ms.如果设备连接到云服务器,上传数据的每一2000ms。
    
    // Prepare Http Package for Yeelink & get length准备和包装长度yeelink for HTTP get
    int length = 0;
    char lengthstr[3];
    
    // Create Http data package
    char httpPackage[60] = "";
    
    strcat(httpPackage,"{"value":");
    itoa(temp,httpPackage+strlen(httpPackage),10);          // push the data(temp) to the http data package日期(时间)Push the to the HTTP数据包
    strcat(httpPackage,"}");
    
    length = strlen(httpPackage);                           // get the length of data package获取数据包的长度
    itoa(length,lengthstr,10);                              // convert int to char array for posting
    Serial.print(F("Length = "));
    Serial.println(length);
    
    Serial.println(F("Connected to Yeelink server."));//yeelink服务器连接
    
    // Send headers
    Serial.print(F("Sending headers"));
    
    WidoClient.fastrprint(F("POST /v1.0/device/"));
    WidoClient.fastrprint(F("100/sensor/20/datapoints"));  //Please change your device ID and sensor ID here, after creating
                                                           //Please check the link: http://www.yeelink.net/user/devices
  /*请在创建后更改您的设备ID和传感器id
/ /请查看链接:http://www.yeelink.net/user/devices
//例网址:*/
                                                           //The example URL: http://api.yeelink.net/v1.0/device/100/sensor/20/datapoints
    WidoClient.fastrprintln(F(" HTTP/1.1"));
    Serial.print(F("."));
    
    WidoClient.fastrprintln(F("Host: api.yeelink.net"));
    Serial.print(F("."));
    
    WidoClient.fastrprint(F("U-ApiKey: "));
    WidoClient.fastrprintln(API_key);
    Serial.print(F("."));
    
    WidoClient.fastrprint("Content-Length: "); 
    WidoClient.fastrprintln(lengthstr);
    WidoClient.fastrprintln("");
    Serial.print(F("."));
    
    Serial.println(F(" done."));
    
    // Send data
    Serial.print(F("Sending data"));
    WidoClient.fastrprintln(httpPackage);

    Serial.println(F(" done."));
    
    /********** Get the http page feedback ***********/
    
    unsigned long rTimer = millis();
    Serial.println(F("Reading Cloud Response!!!
"));
    while (millis() - rTimer < 2000) {
      while (WidoClient.connected() && WidoClient.available()) {
        char c = WidoClient.read();
        Serial.print(c);
      }
    }
    delay(1000);             // Wait for 1s to finish posting the data stream
    WidoClient.close();      // Close the service connection
  
    RetryMillis = millis();  // Reset the timer stamp for applying the connection with the service
  }

  if(millis() - sensortStamp > 1000){
    sensortStamp = millis();
    // 读LM35温度传感器值转换为度每隔1000ms。

    int reading = analogRead(0);
    temp = reading *0.0048828125*100;
    Serial.print(F("Real Time Temp: ")); 
    Serial.println(temp); 
  }
}
原文地址:https://www.cnblogs.com/xiaohe520/p/7138375.html