<em id="ri2my"></em>
  • <em id="ri2my"></em>
    <em id="ri2my"><label id="ri2my"><nav id="ri2my"></nav></label></em>
  • <em id="ri2my"><label id="ri2my"></label></em>
    <div id="ri2my"></div>
    1. <em id="ri2my"><label id="ri2my"></label></em>
    2. <em id="ri2my"><ol id="ri2my"></ol></em>
      <em id="ri2my"></em>

      1. arduino上傳溫度和發送指令

        作者:一聲嘆息 | 更新時間:2020-12-27 | 瀏覽量:807

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

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

        // 數據輸出腳接開發板數字引腳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; //記錄上次報到時間
        unsigned long lastUpdateTime = 0;//記錄上次上傳數據時間
        const unsigned long postingInterval = 40000; // 每隔40秒向服務器報到一次
        const unsigned long updateInterval = 5000; // 數據上傳間隔時間5秒
        unsigned long checkoutTime = 0;//登出時間

        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:
           //當前溫度為: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,};//當前溫度為:

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

          //每一定時間查詢一次設備在線狀態,同時替代心跳
          if (millis() - lastCheckStatusTime > postingInterval)
              {
                checkStatus();
              }
          //checkout 50ms 后 checkin
          if ( checkoutTime != 0 && millis() - checkoutTime > 50 )
              {
                checkIn();
                checkoutTime = 0;
              }
              
          //每隔一定時間上傳一次數據
          if (millis() - lastUpdateTime > updateInterval)
              {
                update1(DEVICEID, INPUTID, sensors.getTempCByIndex(0)); //上傳溫度
                lastUpdateTime = millis();
              }
              
          //讀取串口信息
          while (Serial.available()) {
            String inputString = Serial.readStringUntil('\n');
            //檢測json數據是否完整
            int jsonBeginAt = inputString.indexOf("{");
            int jsonEndAt = inputString.lastIndexOf("}");
            if (jsonBeginAt != -1 && jsonEndAt != -1) {
              //凈化json數據
              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);
            }
          }
        }


        //處理網絡接收到到指令,執行相關動作
        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")     //發送指令 playdc  ,直流電機啟動
            {
                 digitalWrite(IN1, HIGH);
            digitalWrite(IN2, LOW);
                analogWrite(ENA, value);
                delay(time);
              say(F_C_ID, "d-c generator start!");
            }
            if (C == "stopdc") //發送指令 stopdc  ,直流電機停止
            {
                 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, "正在抽水進來!");
            }
            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, "抽水已經停止!");

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


        //發送say指令,用于設備與用戶、設備與設備間通訊
        //{"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");
        }
        //設備登錄
        //{"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");
        }
        //強制設備下線,用消除設備掉線延時
        //{"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");
        }

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

        //上傳一個接口數據
        //{"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("\"}}");
        }
        //同時上傳兩個接口數據調用此函數
        //{"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
        可以上傳溫度,但是不能接收指令, 兩部分分開可以實現功能,整合在一起就不行。有大神遇到過相似問題嗎? 請指點一下我。 謝謝。 qq:1209337072,
        返回頂部

        <em id="ri2my"></em>
      2. <em id="ri2my"></em>
        <em id="ri2my"><label id="ri2my"><nav id="ri2my"></nav></label></em>
      3. <em id="ri2my"><label id="ri2my"></label></em>
        <div id="ri2my"></div>
        1. <em id="ri2my"><label id="ri2my"></label></em>
        2. <em id="ri2my"><ol id="ri2my"></ol></em>
          <em id="ri2my"></em>

          1. 免费高清视频