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

esp8266基于貝殼平臺(tái)的 點(diǎn)亮LED和上傳溫濕度傳感器雙向傳輸實(shí)驗(yàn)

作者:huihong668 | 更新時(shí)間:2018-04-13 | 瀏覽量:3371

這是一個(gè)采用esp8266 12f模塊做的 在貝殼平臺(tái)上點(diǎn)亮LED燈  和 用esp8266模塊上傳AM2320溫濕度  的雙向?qū)嶒?yàn)

使用Arduino IDE 編寫的一個(gè)實(shí)驗(yàn)程序,是用HTTP協(xié)義的。

可以用微信公眾號(hào)控制,也可以用貝殼APP控制,也可以在貝殼網(wǎng)控制

 

詳情請(qǐng)看源碼說明  感謝貝殼平臺(tái) 傳輸速度快,穩(wěn)定性高,協(xié)義簡(jiǎn)單。

 

這是連接貝殼提供的例程  http://github.com/bigiot/bigiotArduino

1:下載下來后解壓,打開libraries 把a(bǔ)json文件夾 復(fù)制,粘貼 到你安裝arduino的libraries目錄下

2:打開解壓下來的文件夾 打開examples esp8266  ESP8266wifi control4 然后打開control4.ino

3:粘貼以下的代碼替代control4.ino的源碼,修改自己wifi帳號(hào)密碼 和貝殼的設(shè)備號(hào)和key 

/*
    此文件需安裝Arduino esp8266開發(fā)環(huán)境支持,環(huán)境搭建參見:http://www.placeboworld.cn/talk/237.html
  
  
    
   
  代碼進(jìn)行調(diào)整,修復(fù)了部分bug,解決了斷線重連問題,此代碼可以直接燒入到nodemcu模塊,分享代碼希望對(duì)大家有幫助
*/
//在貝殼物聯(lián)上的設(shè)備,千萬不要勾選加密登陸,不然會(huì)登不上的。
#include
#include
#include "dht11.h"
//=============  此處必須修該============
String DEVICEID="xxxx"; // 你的設(shè)備編號(hào)   ==
String  APIKEY = "xxxxx"; // 設(shè)備密碼==
const String INPUTID="xxxx";//溫度接口
const String INPUTID1="xxxx";//濕度接口
//=======================================
unsigned long lastCheckInTime = 0; //記錄上次報(bào)到時(shí)間
unsigned long lastUpdateTime = 0; 
const unsigned long postingInterval = 40000; // 每隔40秒向服務(wù)器報(bào)到一次
const unsigned long updateInterval = 5000; // delay between 2 datapoints, 5s

const char* ssid     = "xxxxx";//無線名稱
const char* password = "xxxxxx";//無線密碼

const char* host = "www.placeboworld.cn";
const int httpPort = 8181;//http端口

int pins[4] = {D5,D6,D7,D8};//led pin
int state[4] = {LOW,LOW,LOW,LOW};
int arr_len = sizeof(pins)/sizeof(pins[0]);

void setup() {
  Serial.begin(115200);
  delay(1000);
  
  WiFi.begin(ssid, password);
  //默認(rèn)輸出關(guān)閉電頻
  for(int i=0;i     pinMode(pins[i], OUTPUT);
    digitalWrite(pins[i], state[i]);
  }
  Init2320();
}

WiFiClient client;

void loop() {

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }

  // Use WiFiClient class to create TCP connections
  if (!client.connected()) {
    if (!client.connect(host, httpPort)) {
      Serial.println("connection failed");
      delay(5000);
      return;
    }
  }

if((millis()>0)&&(millis()<10000)){//如果系統(tǒng)時(shí)間重新從0計(jì)算的話,就復(fù)位檢測(cè)時(shí)間和更新時(shí)間
            lastCheckInTime=0;
            lastUpdateTime=0;
  }

  if(millis() - lastCheckInTime > postingInterval || lastCheckInTime==0) {//定期向服務(wù)器報(bào)到,以防斷線
    checkIn();
     Serial.println("posting");
  }

  if((millis() - lastUpdateTime > updateInterval) ) {//定時(shí)采集溫濕度向服務(wù)器發(fā)送
     int temp=0;
     int hut=0;
     sensors_event_t event;
  
     dht.temperature().getEvent(&event);//獲取溫度
    // update1(DEVICEID,INPUTID,event.temperature);//向服務(wù)器更新溫度
     temp=event.temperature;
     hut=dht.humidity().getEvent(&event);//獲取濕度
     hut=event.relative_humidity;
     //update1(DEVICEID,INPUTID1,event.relative_humidity);//向服務(wù)器更新濕度  
     update2(DEVICEID,INPUTID,temp,INPUTID1,hut);//向服務(wù)器更新溫濕度 ,數(shù)據(jù)多的時(shí)候使用這個(gè)函數(shù)連續(xù)發(fā)送,不然一個(gè)個(gè)發(fā)送,結(jié)果只能發(fā)到一個(gè)
     Serial.print(temp);
     Serial.print("\n");
     Serial.print(hut);
     Serial.print("\n");
   
    
 }
  
  // Read all the lines of the reply from server and print them to Serial
  if (client.available()) {//讀取數(shù)據(jù)
    String inputString = client.readStringUntil('\n');
    inputString.trim();
    Serial.println(inputString);
    int len = inputString.length()+1;
    if(inputString.startsWith("{") && inputString.endsWith("}")){
      char jsonString[len];
      inputString.toCharArray(jsonString,len);
      aJsonObject *msg = aJson.parse(jsonString);
      processMessage(msg);
      aJson.deleteItem(msg);          
    }
  }
}

void processMessage(aJsonObject *msg){//收到服務(wù)器發(fā)送的數(shù)據(jù)進(jìn)行處理
  aJsonObject* method = aJson.getObjectItem(msg, "M");
  aJsonObject* content = aJson.getObjectItem(msg, "C");     
  aJsonObject* client_id = aJson.getObjectItem(msg, "ID");
  if (!method) {
    return;
  }
    String M = method->valuestring;
    if(M == "say"){//判斷頭字符是否為say
      String C = content->valuestring;//獲取人發(fā)送的數(shù)據(jù)
      String F_C_ID = client_id->valuestring;
      if(C == "play"){//判斷人發(fā)送的數(shù)據(jù)進(jìn)行邏輯處理       

for(int i=0;i           state[i] = HIGH;
          digitalWrite(pins[i], state[i]);
        }

        sayToClient(F_C_ID,"LED All on!");//處理后向服務(wù)器向應(yīng),做了些什么    
      }else if(C == "stop"){
        for(int i=0;i           state[i] = LOW;
          digitalWrite(pins[i], state[i]);
        }
        sayToClient(F_C_ID,"LED All off!");    
      }
      else if(C == "12"){//判斷人發(fā)送的數(shù)據(jù)進(jìn)行邏輯處理
                
       
        
          digitalWrite(12, HIGH);
          digitalWrite(13, LOW);
          digitalWrite(15, LOW);
          sayToClient(F_C_ID,"GREEN ON!");//處理后向服務(wù)器向應(yīng),做了些什么   
        }

         else if(C == "13"){//判斷人發(fā)送的數(shù)據(jù)進(jìn)行邏輯處理
       
        
          digitalWrite(12, LOW);
          digitalWrite(13, HIGH);
          digitalWrite(15, LOW);
          sayToClient(F_C_ID,"BLUE ON!");//處理后向服務(wù)器向應(yīng),做了些什么   
        }
         else if(C == "15"){//判斷人發(fā)送的數(shù)據(jù)進(jìn)行邏輯處理
       
        
          digitalWrite(12, LOW);
          digitalWrite(13, LOW);
          digitalWrite(15, HIGH);
          sayToClient(F_C_ID,"RED ON!");//處理后向服務(wù)器向應(yīng),做了些什么   
        }

      else{
        int pin = C.toInt();
        if(pin > 0 && pin <= arr_len){//按下字符2-4 LED三色燈可以混色輸出
          pin--;
          state[pin] = !state[pin];
          digitalWrite(pins[pin], state[pin]);
        }
        sayToClient(F_C_ID,"LED pin:"+pin); 
      }
    }
}
//服務(wù)器報(bào)到函數(shù),只有第一次報(bào)到,服務(wù)器才有報(bào)到回應(yīng)。
void checkIn() {
    String msg = "{\"M\":\"checkin\",\"ID\":\"" + DEVICEID + "\",\"K\":\"" + APIKEY + "\"}\n";
    client.print(msg);
    lastCheckInTime = millis(); 
}
//向服務(wù)器對(duì)話函數(shù),服務(wù)器向8266對(duì)話也是這樣的格式,收到后在串口打出來
void sayToClient(String client_id, String content){
  String msg = "{\"M\":\"say\",\"ID\":\"" + client_id + "\",\"C\":\"" + content + "\"}\n";
  client.print(msg);
  lastCheckInTime = millis();
}

void update1(String did, String inputid, int value){//上傳一個(gè)數(shù)據(jù) 的函數(shù)
  client.print("{\"M\":\"update\",\"ID\":\"");
  client.print(did);
  client.print("\",\"V\":{\"");
  client.print(inputid);
  client.print("\":\"");
  client.print(value);
  client.println("\"}}");
  lastCheckInTime = millis();
  lastUpdateTime= millis();
  Serial.print("update:");   
  Serial.print(inputid);   
  Serial.print("->");   
  Serial.println(value);   
}

//同時(shí)上傳兩個(gè)接口數(shù)據(jù)調(diào)用此函數(shù)
void update2(String did, String inputid1, int value1, String inputid2, int value2){
  client.print("{\"M\":\"update\",\"ID\":\"");
  client.print(did);
  client.print("\",\"V\":{\"");
  client.print(inputid1);
  client.print("\":\"");
  client.print(value1);
  client.print("\",\"");
  client.print(inputid2);
  client.print("\":\"");
  client.print(value2);
  client.println("\"}}");
 // lastCheckInTime = millis();
  lastUpdateTime= millis();
  Serial.print("update:");   
  Serial.print(inputid1);   
  Serial.print("->"); 
  Serial.print(value1);  
  Serial.print("  "); 
  Serial.print(inputid2);   
  Serial.print("->"); 
  Serial.println(value2);   
}
 

 

 

 

 

4:用筆記本新建一個(gè)C文件 然后將溫濕度的代碼粘進(jìn)去。然后在arduino工程中添加這個(gè)文件,這個(gè)文件改名為dht11.h

 


#ifndef __DHT11_H__
#define __DHT11_H__


// DHT Temperature & Humidity Sensor
// Unified Sensor Library Example
// Written by Tony DiCola for Adafruit Industries
// Released under an MIT license.

// Depends on the following Arduino libraries:
// - Adafruit Unified Sensor Library: https://github.com/adafruit/Adafruit_Sensor
// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library

#include
#include
#include

#define DHTPIN            4         // Pin which is connected to the DHT sensor.

// Uncomment the type of sensor in use:
//#define DHTTYPE           DHT11     // DHT 11 
#define DHTTYPE           DHT22     // DHT 22 (AM2302)
//#define DHTTYPE           DHT21     // DHT 21 (AM2301)

// See guide for details on sensor wiring and usage:
//   https://learn.adafruit.com/dht/overview

DHT_Unified dht(DHTPIN, DHTTYPE);

uint32_t delayMS;

void Init2320() {

  // Initialize device.
  dht.begin();
//  Serial.println("DHTxx Unified Sensor Example");
  // Print temperature sensor details.
  sensor_t sensor;
  dht.temperature().getSensor(&sensor);
//  Serial.println("------------------------------------");
//  Serial.println("Temperature");
//  Serial.print  ("Sensor:       "); Serial.println(sensor.name);
//  Serial.print  ("Driver Ver:   "); Serial.println(sensor.version);
//  Serial.print  ("Unique ID:    "); Serial.println(sensor.sensor_id);
//  Serial.print  ("Max Value:    "); Serial.print(sensor.max_value); Serial.println(" *C");
//  Serial.print  ("Min Value:    "); Serial.print(sensor.min_value); Serial.println(" *C");
//  Serial.print  ("Resolution:   "); Serial.print(sensor.resolution); Serial.println(" *C");  
//  Serial.println("------------------------------------");
  // Print humidity sensor details.
  dht.humidity().getSensor(&sensor);
//  Serial.println("------------------------------------");
//  Serial.println("Humidity");
//  Serial.print  ("Sensor:       "); Serial.println(sensor.name);
//  Serial.print  ("Driver Ver:   "); Serial.println(sensor.version);
//  Serial.print  ("Unique ID:    "); Serial.println(sensor.sensor_id);
//  Serial.print  ("Max Value:    "); Serial.print(sensor.max_value); Serial.println("%");
//  Serial.print  ("Min Value:    "); Serial.print(sensor.min_value); Serial.println("%");
//  Serial.print  ("Resolution:   "); Serial.print(sensor.resolution); Serial.println("%");  
//  Serial.println("------------------------------------");
  // Set delay between sensor readings based on sensor details.
  delayMS = sensor.min_delay / 1000;
}

void Display2320() {
  // Delay between measurements.
  delay(delayMS);
  // Get temperature event and print its value.
  sensors_event_t event;  
  dht.temperature().getEvent(&event);

  if (isnan(event.temperature)) {
   // Serial.println("Error reading temperature!");
  }
  else {
//    Serial.print("Temperature: ");
    Serial.print(event.temperature);
//    Serial.println(" *C");


  }
  // Get humidity event and print its value.
  dht.humidity().getEvent(&event);
  if (isnan(event.relative_humidity)) {
   // Serial.println("Error reading humidity!");
  }
  else {
//    Serial.print("Humidity: ");
   Serial.print(event.relative_humidity);
//    Serial.println("%");


  }
}

#endif

 

5:貝殼網(wǎng)注冊(cè)自己的帳號(hào)  在控制面版里,新建自己的設(shè)備 ,為這個(gè)設(shè)備添加兩個(gè)數(shù)據(jù)流 然后將程序編譯下載到esp8266上。

打開新建的設(shè)備 點(diǎn)擊對(duì)話輸入以下命令

我在程序上設(shè)置的數(shù)據(jù)控制LDE的命令為雙引號(hào)內(nèi):“12” “13” “15” “play” “stop”        

LDE輸出為高電平亮,低電平滅。

打開數(shù)據(jù)流 可以看到濕度和溫度在每隔5秒就上傳到貝殼上  

實(shí)現(xiàn)雙向數(shù)據(jù)傳輸   

還可以下載貝殼的APP進(jìn)行控制,微信公眾號(hào)也可以這個(gè)貝殼官網(wǎng)有下載

大家有什么看不明的,可以私信我這個(gè)帳號(hào),也可以在貼中發(fā)問謝謝大家

最后發(fā)現(xiàn)在這里粘出來的代碼不能正常顯示 下面上傳了源碼

https://pan.baidu.com/s/196C3QQZtEMQnfdsGJx8gRg

 


評(píng)論:共8條

huihong668 評(píng)論于:2018-04-12 23:00:06
沙發(fā)
貝殼物聯(lián) 評(píng)論于:2018-04-13 09:12:55
感謝分享-_-!!
huihong668 回復(fù)于:2018-04-13 09:36:27
回復(fù) @貝殼物聯(lián):感謝貝殼
ucm 評(píng)論于:2018-04-21 11:38:31
mark。thanks
Dustin 評(píng)論于:2018-05-04 10:35:47
厲害
929292 評(píng)論于:2018-05-14 16:02:13
為什么我 12 13 15 控制不了返回控制失敗 但是play 和stop 控制返回沒問題
15029233413 評(píng)論于:2018-11-27 23:18:56
我這報(bào)出這樣的錯(cuò)誤,求大佬指導(dǎo),qq1656994251,謝謝。
In file included from C:\Users\dell\Desktop\bigiotArduino-master(2)\bigiotArduino-master\examples\W5100\kaiguan\kaiguan.ino:8:0:

aJSON.h:92:6: error: conflicting return type specified for 'virtual int aJsonStream::flush()'

int flush();

^

In file included from D:\Arduino\hardware\arduino\avr\cores\arduino/Stream.h:26:0,

from D:\Arduino\hardware\arduino\avr\cores\arduino/HardwareSerial.h:29,

from D:\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:232,

from sketch\kaiguan.ino.cpp:1:

D:\Arduino\hardware\arduino\avr\cores\arduino/Print.h:90:18: error: overriding 'virtual void Print::flush()'

virtual void flush() { /* Empty implementation for backward compatibility */ }

^

exit status 1
conflicting return type specified for 'virtual int aJsonStream::flush()'

unison 評(píng)論于:2019-10-19 10:07:40
mark
返回頂部