<noscript id="mmkmi"><source id="mmkmi"></source></noscript>
  • <noscript id="mmkmi"><kbd id="mmkmi"></kbd></noscript>
  • <table id="mmkmi"><source id="mmkmi"></source></table>
  • 請問一下多數據上傳的代碼怎么修改,我想上傳6種數據

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

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


    評論:共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);

    }
    返回頂部
    <noscript id="mmkmi"><source id="mmkmi"></source></noscript>
  • <noscript id="mmkmi"><kbd id="mmkmi"></kbd></noscript>
  • <table id="mmkmi"><source id="mmkmi"></source></table>
  • 三上悠亚在线观看