国内综合精彩aⅤ无码不卡_日本少妇做爰全过程_欧美性爱在线播放免费_午夜?V日韩一区二区_免费a级毛片无码免费播放_成在人线av无码喷水_亚洲精品网站色视频_国产婷婷精品成人_老师撩起裙子让我桶的视频_秋霞影院国产

用ESP8266傳遞BMP180的溫度和氣壓到貝殼云

作者:wony366 | 更新時間:2016-04-07 | 瀏覽量:3907

基本接線:


BMP180           esp8266 

vcc     3.3V   

gnd     gnd

scl              GPIO14

sda              GPIO2



ESP8266通過TTL 接電腦,不再贅述。


以下是代碼:


#include <ESP8266WiFi.h> 

#include <SFE_BMP180.h>

#include <Wire.h>

 

WiFiClient client;


const char *ssid     = "xxx";//這里是我的wifi,你使用時修改為你要連接的wifi ssid

const char *password = "xxxx";//你要連接的wifi密碼

const char *host = "121.42.180.30";//貝殼云地址

char valueread;


 SFE_BMP180 pressure;// 創(chuàng)建一個氣壓計對象 

double baseline; // 基準氣壓


void setup()

{

  Serial.begin(115200);

  Wire.begin(2,14); //定義I2C接口,并啟動,ESP8266-12E的 2 和 14 口是原本定義為I2C接口,其他模塊查看手冊,用于讀取BMP180的參數(shù)


//下面的代碼是確保WIFI連接正確,并打印登錄路由器信息

  Serial.print("Connecting to ");

  Serial.println(ssid);  

  WiFi.begin(ssid, password);  

  while (WiFi.status() != WL_CONNECTED) {

    delay(500);

    Serial.print(".");

  }

  Serial.println("");

  Serial.println("WiFi connected");  

  Serial.println("IP address: ");

  Serial.println(WiFi.localIP());

//下面的代碼是連接服務器

  const int httpPort =8181;

  client.connect(host, httpPort);

  delay(2000); 

  Serial.println("connecting to host");

  while (!client.connect(host, httpPort)) 

    {

    Serial.println("..");

    delay(500);

    }   

  Serial.print("connecting to ");

  Serial.println(host);

  //下面的代碼是用自己的ID 和 KEY 登錄服務器,確保服務器返回正確登錄信息,否則一直重試登錄,直到出現(xiàn)正確的返回信息

  

  client.write("{\"M\":\"checkin\",\"ID\":\"138\",\"K\":\"123456\"}\r\n");//登陸設備,修改成自己的ID和key


  Serial.print("waitting for host answer");

  delay(500);   

    String line = client.readStringUntil('\r');

     Serial.print(line);

    valueread=line[28];//修改自己成發(fā)送的指令的位置,我這里指令位置在是28位,此方法是參考前面網(wǎng)友的

    Serial.println(valueread);//此處打印的是歡迎信息,并不代表登錄成功

    while(valueread !='M')    // 此處是驗證登錄成功后返回的信息

    {

     delay(500);

      client.write("{\"M\":\"checkin\",\"ID\":\"138\",\"K\":\"123456\"}\r\n");//登陸設備,修改成自己的ID和key    

      Serial.print(".");

      String line = client.readStringUntil('\r');

     Serial.print(line);

      valueread=line[2];//此處打印的是登錄成功信息,checkinok ,這是返回字段,我偷懶,隨便取了一位值,你可以按需取

    Serial.println(valueread);

     }    

  delay(100);


  

 //下面是傳感器相關,無關云平臺

  // 初始化傳感器

  if (pressure.begin())

    Serial.println("BMP180 init success");

  else

  {

    // 糟糕,氣壓計出問題了,多半是連線有問題

    Serial.println("BMP180 init fail (disconnected?)\n\n");

    while(1); // 暫停

  }

  }

   


 

void loop()

{  

  baseline = getP(); //獲得基準氣壓

  Serial.print("baseline pressure: ");

  Serial.print(baseline);

  Serial.println(" hPa");   

  

  double a,p,t;

  p = getP();// 獲得一個氣壓值

  a = pressure.altitude(p,baseline);//獲得基于基準氣壓的高度值

 

  Serial.print("relative altitude: ");

  if (a >= 0.0) Serial.print(" "); // 調整正數(shù)顯示格式

  Serial.print(a,1);

  Serial.print(" meters ");  

 

  t = getT();// 獲得一個溫度值

  Serial.print("temperature: ");

  Serial.print(t,1);

  Serial.print(t);

  Serial.println(" degrees");  


 update1(138,119,166,167,p,t,a);//向服務器發(fā)數(shù)據(jù),138是設備ID,119 166 167 是數(shù)據(jù)接口,p t a  是傳感器參數(shù)


 delay(5000);//刷新率5秒,太快,服務器會出錯


  client.write("{\"M\":\"say\",\"ID\":\"138\",\"C\":\"123456\"}\r\n"); //保持心跳,這是我的ID 和key,自己修改 ,以防掉線

}

 

 //取得BMP180氣壓的函數(shù)

double getP()

{

  char status;

  double T,P,p0,a;

  // You must first get a temperature measurement to perform a pressure reading.

  // Start a temperature measurement:

  // If request is successful, the number of ms to wait is returned.

  // If request is unsuccessful, 0 is returned.

  status = pressure.startTemperature();

  if (status != 0)

  {

    // Wait for the measurement to complete:

    delay(status);

    // Retrieve the completed temperature measurement:

    // Note that the measurement is stored in the variable T.

    // Use '&T' to provide the address of T to the function.

    // Function returns 1 if successful, 0 if failure.

 

    status = pressure.getTemperature(T);

    if (status != 0)

    {

      // Start a pressure measurement:

      // The parameter is the oversampling setting, from 0 to 3 (highest res, longest wait).

      // If request is successful, the number of ms to wait is returned.

      // If request is unsuccessful, 0 is returned.

      status = pressure.startPressure(3);

      if (status != 0)

      {

        // Wait for the measurement to complete:

        delay(status);

        // Retrieve the completed pressure measurement:

        // Note that the measurement is stored in the variable P.

        // Use '&P' to provide the address of P.

        // Note also that the function requires the previous temperature measurement (T).

        // (If temperature is stable, you can do one temperature measurement for a number of pressure measurements.)

        // Function returns 1 if successful, 0 if failure.

        status = pressure.getPressure(P,T);

        if (status != 0)

        {

          return P;

        }

        else Serial.println("error retrieving pressure measurement\n");

      }

      else Serial.println("error starting pressure measurement\n");

    }

    else Serial.println("error retrieving temperature measurement\n");

  }

  else Serial.println("error starting temperature measurement\n");

}


  //取得BMP180溫度的函數(shù)

double getT()

{

  char status;

  double T,p0;

  status = pressure.startTemperature();

  if (status != 0)

  {

    delay(status);

    status = pressure.getTemperature(T);

    if (status != 0)

    {

      status = pressure.startPressure(3);

      return T;

    }

    else Serial.println("error retrieving temperature measurement\n");

  }

  else Serial.println("error starting temperature measurement\n");

}


void update1(int did, int inputid1, int inputid2,int inputid3,float value1 ,float value2,float value3) // 定義一次傳遞3個參數(shù)的函數(shù),該函數(shù)是借鑒 網(wǎng)友 在路上 的勞動成果

{

String str1="{\"M\":\"update\",\"ID\":\"";

str1+=did;

str1+="\",\"V\":{\"";

str1+=inputid1;

str1+="\":\"";

str1+=value1;

str1+="\",\"" ;

str1+=inputid2;

str1+="\":\"";

str1+=value2;

str1+="\",\"" ;

str1+=inputid3;

str1+="\":\"";

str1+=value3;

str1+="\"" ;

str1+="}}\n";

 client.print(str1);  

//下面是串口打印 傳遞到服務器的信息,以便調試

  Serial.print("update:");   

  Serial.print(inputid1);   

  Serial.print("->");   

  Serial.println(value1);   

   Serial.print("update:");   

  Serial.print(inputid2);   

  Serial.print("->");   

  Serial.println(value2); 

   Serial.print("update:");   

  Serial.print(inputid3);   

  Serial.print("->");   

  Serial.println(value3); 

}



數(shù)據(jù)見公開頁面 :http://m.placeboworld.cn/chart/138.html


評論:共2條

貝殼物聯(lián) 評論于:2016-04-07 20:30:48
多謝分享,可以把代碼部分高亮顯示,編輯話題,選中代碼,代碼語音選擇C語言。
climate 評論于:2018-04-28 14:19:14
庫文件怎么獲得呢?
返回頂部