<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. 請問一下多數據上傳的代碼怎么修改,我想上傳6種數據

        作者:a386554965 | 更新時間:2018-06-11 | 瀏覽量:1122

        這是一個不錯的想法...


        評論:共1條

        Blue moon 評論于:2018-08-08 15:37:43
        /*
        這個是兩種數據的,以DHT11溫度和濕度為例
        注意 :Arduino IDE版本請使用1.6.5-1.8.2
        */
        #include <aJSON.h>
        #include <Wire.h>

        int temp;//溫度
        int humi;//濕度
        int j;
        unsigned int loopCnt;
        int chr[40] = {0};//創建數字數組,用來存放40個bit
        unsigned long time;
        #define pin 3

        //============= 此處必須修改============
        String DEVICEID = "XXXX"; // 你的設備ID=======
        String APIKEY = "XXXXXf"; // 設備密碼==
        String INPUTID1 = "XXXX"; //接口ID==============
        String INPUTID2 = "XXXX"; //接口ID==============
        //=======================================


        unsigned long lastCheckInTime = 0; //記錄上次報到時間
        unsigned long lastUpdateTime = 0;//記錄上次上傳數據時間
        const unsigned long postingInterval = 40000; // 每隔40秒向服務器報到一次
        const unsigned long updateInterval = 5000; // 數據上傳間隔時間5秒
        String inputString = "";//串口讀取到的內容
        boolean stringComplete = false;//串口是否讀取完畢
        boolean CONNECT = true; //連接狀態
        boolean isCheckIn = false; //是否已經登錄服務器
        char* parseJson(char *jsonString);//定義aJson字符串

        void setup() {
        Serial.begin(115200);
        delay(10000);
        }

        void loop() {
        //溫濕度部分
        bgn:
        delay(2000);
        //設置3號接口模式為:輸出
        //輸出低電平20ms(>18ms)
        //輸出高電平40μs
        pinMode(pin, OUTPUT);
        digitalWrite(pin, LOW);
        delay(20);
        digitalWrite(pin, HIGH);
        delayMicroseconds(40);
        digitalWrite(pin, LOW);
        //設置2號接口模式:輸入
        pinMode(pin, INPUT);
        //高電平響應信號
        loopCnt = 10000;
        while (digitalRead(pin) != HIGH)
        {
        if (loopCnt-- == 0)
        {
        //如果長時間不返回高電平,輸出個提示,重頭開始。
        Serial.println("HIGH");
        goto bgn;
        }
        }
        //低電平響應信號
        loopCnt = 30000;
        while (digitalRead(pin) != LOW)
        {
        if (loopCnt-- == 0)
        {
        //如果長時間不返回低電平,輸出個提示,重頭開始。
        Serial.println("LOW");
        goto bgn;
        }
        }
        //開始讀取bit1-40的數值
        for (int i = 0; i < 40; i++)
        {
        while (digitalRead(pin) == LOW)
        {}
        //當出現高電平時,記下時間“time”
        time = micros();
        while (digitalRead(pin) == HIGH)
        {}
        //當出現低電平,記下時間,再減去剛才儲存的time
        //得出的值若大于50μs,則為‘1’,否則為‘0’
        //并儲存到數組里去
        if (micros() - time > 50)
        {
        chr[i] = 1;
        } else {
        chr[i] = 0;
        }
        }
        //濕度,8位的bit,轉換為數值
        humi = chr[0] * 128 + chr[1] * 64 + chr[2] * 32 + chr[3] * 16 + chr[4] * 8 + chr[5] * 4 + chr[6] * 2 + chr[7];

        //溫度,8位的bit,轉換為數值
        temp = chr[16] * 128 + chr[17] * 64 + chr[18] * 32 + chr[19] * 16 + chr[20] * 8 + chr[21] * 4 + chr[22] * 2 + chr[23];


        //貝殼物聯源碼里的部分,給的源碼是一種數據的,往看注釋改哪里
        if (millis() - lastCheckInTime > postingInterval || lastCheckInTime == 0) {
        checkIn();
        }
        if (millis() - lastUpdateTime > updateInterval) {

        //注意這里調用了update2,注意括號里的內容,去找update2函數,如果想傳更多的數據跟update2函數有關,末尾配寫法
        update2(DEVICEID, INPUTID1, temp, INPUTID2, humi);
        }
        serialEvent();
        if (stringComplete) {
        inputString.trim();
        //Serial.println(inputString);
        if (inputString == "CLOSED") {
        Serial.println("connect closed!");
        CONNECT = false;
        isCheckIn = false;
        } else {
        int len = inputString.length() + 1;
        if (inputString.startsWith("{") && inputString.endsWith("}")) {
        char jsonString[len];
        inputString.toCharArray(jsonString, len);
        aJsonObject *msg = aJson.parse(jsonString);
        processMessage(msg);//處理接收到的Json數據
        aJson.deleteItem(msg);
        }
        }
        inputString = "";
        stringComplete = false;
        }
        }

        void checkIn() {
        if (!CONNECT) {
        Serial.print("+++");
        delay(500);
        Serial.print("\r\n");
        delay(1000);
        Serial.print("AT+RST\r\n");
        delay(6000);
        CONNECT = true;
        lastCheckInTime == 0;
        }
        else {
        Serial.print("{\"M\":\"checkin\",\"ID\":\"");
        Serial.print(DEVICEID);
        Serial.print("\",\"K\":\"");
        Serial.print(APIKEY);
        Serial.print("\"}\r\n");
        lastCheckInTime = millis();
        }
        }

        void processMessage(aJsonObject *msg) {
        aJsonObject* method = aJson.getObjectItem(msg, "M");
        aJsonObject* content = aJson.getObjectItem(msg, "C");
        aJsonObject* client_id = aJson.getObjectItem(msg, "ID");
        //char* st = aJson.print(msg);
        if (!method) {
        return;
        }
        //Serial.println(st);
        //free(st);
        String M = method->valuestring;
        if (M == "checkinok") {
        isCheckIn = true;
        }
        }
        void serialEvent() {
        while (Serial.available()) {
        char inChar = (char)Serial.read();
        inputString += inChar;
        if (inChar == '\n') {
        stringComplete = true;
        }
        }
        }
        //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("\"}}");
        // lastCheckInTime = millis();
        // lastUpdateTime = millis();
        //}
        //同時上傳兩個接口數據調用此函數
        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("\"}}");
        lastCheckInTime = millis();
        lastUpdateTime= millis();
        }


        這個參考了貝殼物聯討論一位朋友的答案,感謝這位朋友
        關于數據上傳這里給大家分享一個函數格式供大家參考
        void update1(int did, int inputid1, int inputid2,int inputid3,float value1 ,float value2,float value3) // 定義一次傳遞3個參數的函數

        {

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

        }
        返回頂部

        <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. 免费高清视频