明天 发表于 2017-7-14 20:48:28

18b20温度传到yeelink,有没有解释,和Adafruit_CC3000.h的具体内容

#include <OneWire.h>
#include <DallasTemperature.h>
#include <Adafruit_CC3000.h>
#include <ccspi.h>
#include <SPI.h>

#define Wido_IRQ   7      //引脚定义,这三个引脚在wido中已经被定义死了,没必要改
#define Wido_VBAT5
#define Wido_CS    10

#define ONE_WIRE_BUS 3      //定义温度传感器引脚
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

Adafruit_CC3000 Wido = Adafruit_CC3000(Wido_CS, Wido_IRQ, Wido_VBAT,
SPI_CLOCK_DIVIDER);                                       //定义cc3000的名字和引脚
#define WLAN_SECURITY   WLAN_SEC_WPA2                  //加密方式


#define WLAN_SSID       "Xiaomi_8898"         //无线网名字
#define WLAN_PASS       "anyida2015"          //密码


#define TCP_TIMEOUT      3000
//#define CC3000_TINY_DRIVER

#define WEBSITE"api.yeelink.net"
#define API_key"1533dc46ece68df8f1524082fad83488"// Update Your API Key. To get your API Key, please check the link below
                                                   // http://www.yeelink.net/user/user_profile
double temp;
void setup(){
temp=sensors.getTempCByIndex(0);                  //获取温度值,把它赋给temp
sensors.begin();                                  //初始化总线
Serial.begin(115200);
Serial.println(F("Hello, CC3000!\n"));

/* wido初始化,如果wido初始化失败,那么串口返回信息进入死循环 */
Serial.println(F("\nInitialising the CC3000 ..."));
if (!Wido.begin())
{
    Serial.println(F("Unable to initialise the CC3000! Check your wiring?"));
    while(1);
}

/* Attempt to connect to an access point */
char *ssid = WLAN_SSID;             /* Max 32 chars */
Serial.print(F("\nAttempting to connect to "));
Serial.println(ssid);

/* 此函数用来连接WiFi的名字如果连接失败,返回failed,进入死循环*/
if (!Wido.connectToAP(WLAN_SSID, WLAN_PASS, WLAN_SECURITY)) {
    Serial.println(F("Failed!"));
    while(1);
}

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

/* 获取动态IP地址的,是一个Boolean的函数 */
Serial.println(F("Request DHCP"));
while (!Wido.checkDHCP())
{
    delay(100); // ToDo: Insert a DHCP timeout!
}

}

uint32_t ip = 0;


void loop(){
sensors.requestTemperatures();
temp=sensors.getTempCByIndex(0);
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
    Serial.print(F("api.yeelink.net -> "));
    while(ip==0){
      if(!Wido.getHostByName(WEBSITE, &ip)){    // 获取基于域名的服务器IP地址
      Serial.println(F("Couldn't resolve!"));
      }
      delay(500);
    }
    Wido.printIPdotsRev(ip);
    Serial.println(F(""));

    // Connect to the Yeelink Server
    WidoClient = Wido.connectTCP(ip, 80);          // 尝试连接云服务器
}

if(WidoClient.connected() && millis() - uploadtStamp > 10000){
    uploadtStamp = millis();
    // If the device is connected to the cloud server, upload the data every 2000ms.

    // Prepare Http Package for Yeelink & get length
    int length = 0;
    char lengthstr;

    // Create Http data package
    char httpPackage = "";

    strcat(httpPackage,"{\"value\":");
    itoa(temp,httpPackage+strlen(httpPackage),10);          //将数据(temp)推到http数据包
    strcat(httpPackage,"}");


   // strcat(httpPackage,"{\"value\":");这三行是湿度的
    //itoa(DHT.humidity,httpPackage+strlen(httpPackage),10);          // 将数据(temp)推到http数据包
    //strcat(httpPackage,"}");


    length = strlen(httpPackage);                           // 获取数据包的长度
    itoa(length,lengthstr,10);                              //将int转换为char数组,用于发布
    Serial.print(F("Length = "));
    Serial.println(length);

    Serial.println(F("Connected to Yeelink server."));

    // Send headers
    Serial.print(F("Sending headers"));

    WidoClient.fastrprint(F("POST /v1.0/device/"));
    WidoClient.fastrprint(F("359840/sensor/410293/datapoints"));//请在创建后更改您的设备ID和传感器ID

    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."));

    /********** 获取http页面反馈 ***********/

    unsigned long rTimer = millis();
    Serial.println(F("Reading Cloud Response!!!\r\n"));
    while (millis() - rTimer < 10000) {
      while (WidoClient.connected() && WidoClient.available()) {
      char c = WidoClient.read();
      Serial.print(c);
      }
    }
    delay(1000);             // 等待1s结束数据流
    WidoClient.close();      // 关闭服务连接

    RetryMillis = millis();//重置用于应用与服务的连接的计时器戳记
}
}

20060606 发表于 2020-8-13 05:23:36

请教一下2个18b20怎么连接到arduino
页: [1]
查看完整版本: 18b20温度传到yeelink,有没有解释,和Adafruit_CC3000.h的具体内容