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

arduino上傳溫度和發(fā)送指令

作者:一聲嘆息 | 更新時(shí)間:2020-12-27 | 瀏覽量:1498

#include <aJSON.h>
#include <RSCG12864B.h>//引用庫文件
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SoftwareSerial.h>

//=============  此處必須修改============
String DEVICEID = "19567"; // 你的設(shè)備ID=======
String APIKEY = "1008154e0"; // 設(shè)備密碼==
String INPUTID = "17560"; //接口ID==============
//=======================================

// 數(shù)據(jù)輸出腳接開發(fā)板數(shù)字引腳2(溫度傳感器)
#define ONE_WIRE_BUS 2 
char Temp_Buffer[6];
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
 float T_sum;

int incomedate = 0;
int relayPin = 8; //繼電器引腳

int IN1 = 4;   // IN1 connected to pin 4
int IN2 = 5;   
int ENA = 3;  

int IN3 = 6;   // IN3 connected to pin6
int IN4 = 7;   
int ENB = 8;  
unsigned long time = 1200;  //delay time
int value = 100;   // the duty cycle(0-255)

unsigned long lastCheckStatusTime = 0; //記錄上次報(bào)到時(shí)間
unsigned long lastUpdateTime = 0;//記錄上次上傳數(shù)據(jù)時(shí)間
const unsigned long postingInterval = 40000; // 每隔40秒向服務(wù)器報(bào)到一次
const unsigned long updateInterval = 5000; // 數(shù)據(jù)上傳間隔時(shí)間5秒
unsigned long checkoutTime = 0;//登出時(shí)間

void setup() {
  Serial.begin(115200);

  pinMode(relayPin, OUTPUT);

   RSCG12864B.begin();//串口初始化
   RSCG12864B.brightness(255);//屏幕亮度
  sensors.begin(); //初始化總線
  
  RSCG12864B.clear();

   pinMode(IN1, OUTPUT);
    pinMode(IN2, OUTPUT);
     pinMode(IN3, OUTPUT);
    pinMode(IN4, OUTPUT);

  delay(5000);//等一會兒ESP8266

 
}
void loop() {

   // put your main code here, to run repeatedly:
   //當(dāng)前溫度為:B5 B1 C7 B0 CE C2 B6 C8 CE AA A3 BA   
   char chn[]={char(0xB5), char(0xB1),char(0xC7),char(0xB0),char(0xCE),char(0xC2),char(0xB6),char(0xC8),char(0xCE),char(0xAA),char(0xA3),char(0xBA),0,};//當(dāng)前溫度為:

  sensors.requestTemperatures(); // 發(fā)送命令獲取溫度,
  //向總線上所有設(shè)備發(fā)送溫度轉(zhuǎn)換請求,默認(rèn)情況下該方法會阻塞
  dtostrf(sensors.getTempCByIndex(0),5,2,Temp_Buffer); // float 到 char
   RSCG12864B.print_string_12_xy(14,13,chn);//坐標(biāo)16,15,顯示chn里的內(nèi)容(當(dāng)前溫度為:) 
   RSCG12864B.print_string_12(Temp_Buffer);//顯示溫度
  delay(500); 

  //每一定時(shí)間查詢一次設(shè)備在線狀態(tài),同時(shí)替代心跳
  if (millis() - lastCheckStatusTime > postingInterval)
      {
        checkStatus();
      }
  //checkout 50ms 后 checkin
  if ( checkoutTime != 0 && millis() - checkoutTime > 50 )
      {
        checkIn();
        checkoutTime = 0;
      }
      
  //每隔一定時(shí)間上傳一次數(shù)據(jù)
  if (millis() - lastUpdateTime > updateInterval)
      {
        update1(DEVICEID, INPUTID, sensors.getTempCByIndex(0)); //上傳溫度
        lastUpdateTime = millis();
      }
      
  //讀取串口信息
  while (Serial.available()) {
    String inputString = Serial.readStringUntil('\n');
    //檢測json數(shù)據(jù)是否完整
    int jsonBeginAt = inputString.indexOf("{");
    int jsonEndAt = inputString.lastIndexOf("}");
    if (jsonBeginAt != -1 && jsonEndAt != -1) {
      //凈化json數(shù)據(jù)
      inputString = inputString.substring(jsonBeginAt, jsonEndAt + 1);
      int len = inputString.length() + 1;
      char jsonString[len];
      inputString.toCharArray(jsonString, len);
      aJsonObject *msg = aJson.parse(jsonString);
      processMessage(msg);
      aJson.deleteItem(msg);
    }
  }
}


//處理網(wǎng)絡(luò)接收到到指令,執(zhí)行相關(guān)動作
void processMessage(aJsonObject *msg) {
  aJsonObject* method = aJson.getObjectItem(msg, "M");
  if (!method) 
  {
    return;
  }
  String M = method->valuestring;
  if (M == "WELCOME TO BIGIOT") {
   // checkOut();
    checkoutTime = millis();
    return;
  }
  if (M == "connected") {
    checkIn();
  }
 if (M == "say") {
    aJsonObject* content = aJson.getObjectItem(msg, "C");
    aJsonObject* client_id = aJson.getObjectItem(msg, "ID");
    String C = content->valuestring;
    String F_C_ID = client_id->valuestring;
    if (C == "startdc")     //發(fā)送指令 playdc  ,直流電機(jī)啟動
    {
         digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
        analogWrite(ENA, value);
        delay(time);
      say(F_C_ID, "d-c generator start!");
    }
    if (C == "stopdc") //發(fā)送指令 stopdc  ,直流電機(jī)停止
    {
         digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(ENA, 0);
    delay(time);
      say(F_C_ID, "d-c generator stop!");
    }
    
    if (C == "waterin") {
         digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
        delay(time);
      say(F_C_ID, "正在抽水進(jìn)來!");
    }
    if (C == "waterout") {
         digitalWrite(IN3, LOW);
    digitalWrite(IN4, HIGH);
    delay(time);
      say(F_C_ID, "正在抽水出去!");
    }
    if (C == "waterstop")
    {
         digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW); 
    delay(time);
      say(F_C_ID, "抽水已經(jīng)停止!");

    }
        if (C == "Templay")
     {
      digitalWrite(relayPin, LOW);
      say(F_C_ID, "relay 開始啟動!");
   
    }
    if (C == "Temstop")
    {
     digitalWrite(relayPin, HIGH);
      say(F_C_ID, "relay Stop!");
    }
}
    
  }


//發(fā)送say指令,用于設(shè)備與用戶、設(shè)備與設(shè)備間通訊
//{"M":"say","ID":"xx1","C":"xx2","SIGN":"xx3"}\n
void say(String ID, String c) {
  Serial.print("{\"M\":\"say\",\"ID\":\"");
  Serial.print(ID);
  Serial.print("\",\"C\":\"");
  Serial.print(c);
  Serial.print("\"}\r\n");
}
//設(shè)備登錄
//{"M":"checkin","ID":"xx1","K":"xx2"}\n
void checkIn() {
  Serial.print("{\"M\":\"checkin\",\"ID\":\"");
  Serial.print(DEVICEID);
  Serial.print("\",\"K\":\"");
  Serial.print(APIKEY);
  Serial.print("\"}\n");
}
//強(qiáng)制設(shè)備下線,用消除設(shè)備掉線延時(shí)
//{"M":"checkout","ID":"xx1","K":"xx2"}\n
void checkOut() {
  Serial.print("{\"M\":\"checkout\",\"ID\":\"");
  Serial.print(DEVICEID);
  Serial.print("\",\"K\":\"");
  Serial.print(APIKEY);
  Serial.print("\"}\n");
}

//查詢設(shè)備在線狀態(tài)
//{"M":"status"}\n
void checkStatus() {
  Serial.print("{\"M\":\"status\"}\n");
  lastCheckStatusTime = millis();
}

//上傳一個(gè)接口數(shù)據(jù)
//{"M":"update","ID":"2","V":{"2":"120"}}\n
void update1(String did, String inputid, float value) {
  Serial.print("{\"M\":\"update\",\"ID\":\"");
  Serial.print(did);
  Serial.print("\",\"V\":{\"");
  Serial.print(inputid);
  Serial.print("\":\"");
  Serial.print(value);
  Serial.println("\"}}");
}
//同時(shí)上傳兩個(gè)接口數(shù)據(jù)調(diào)用此函數(shù)
//{"M":"update","ID":"112","V":{"6":"1","36":"116"}}\n
void update2(String did, String inputid1, float value1, String inputid2, float value2) {
  Serial.print("{\"M\":\"update\",\"ID\":\"");
  Serial.print(did);
  Serial.print("\",\"V\":{\"");
  Serial.print(inputid1);
  Serial.print("\":\"");
  Serial.print(value1);
  Serial.print("\",\"");
  Serial.print(inputid2);
  Serial.print("\":\"");
  Serial.print(value2);
  Serial.println("\"}}");
  
}
 


評論:共1條

一聲嘆息 評論于:2020-12-27 00:39:13
可以上傳溫度,但是不能接收指令, 兩部分分開可以實(shí)現(xiàn)功能,整合在一起就不行。有大神遇到過相似問題嗎? 請指點(diǎn)一下我。 謝謝。 qq:1209337072,
返回頂部