<noscript id="mmkmi"><source id="mmkmi"></source></noscript>
  • <noscript id="mmkmi"><kbd id="mmkmi"></kbd></noscript>
  • <table id="mmkmi"><source id="mmkmi"></source></table>
  • Arduino+esp8266控制和上傳數據問題

    作者:1122334455 | 更新時間:2020-05-05 | 瀏覽量:910

    為什么我把示例里面的Arduino+esp8266開關代碼和傳感器代碼合并在一起之后在手機不能顯示傳感器數據,只能進行控制

       望各路大神批評指正


    評論:共4條

    Space 評論于:2020-04-30 16:25:59
    建議把代碼貼出來,要不然不好判斷
    wwwWwww 評論于:2020-04-30 17:24:23
    我合并在一起只能顯示數據,不能進行控制
    wwwWwww 評論于:2020-04-30 17:46:35
    差不多這樣把
    /*
    注意 :Arduino IDE版本請使用1.6.5-1.8.2
    ESP8266模塊在接Arduino之前請確定透傳穩定性,在串口查看ESP8266是否能多次收到WELCOME TO BIGIOT,
    能多次收到說明透傳穩定且能自動重連。
    時間:2018.12.4
    作者:www.eqytg.org
    */

    #include <aJSON.h>
    //============= 此處必須修改============
    String DEVICEID = "***"; // 你的設備ID=======
    String APIKEY = "*****"; // 設備密碼==
    String INPUTID = "***"; //接口ID==============
    //=======================================
    const int LED = 4;// LED正極連接針腳4
    const int LM35 = 0;// LM35 Vout 接 A0
    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() {
    pinMode(LED, OUTPUT);
    Serial.begin(115200);
    delay(5000);//等一會兒ESP8266
    }
    void loop() {
    //每一定時間查詢一次設備在線狀態,同時替代心跳
    if (millis() - lastCheckStatusTime > postingInterval) {
    checkStatus();
    }
    //checkout 50ms 后 checkin
    if ( checkoutTime != 0 && millis() - checkoutTime > 50 ) {
    checkIn();
    checkoutTime = 0;
    }
    //每隔一定時間上傳一次數據
    if (millis() - lastUpdateTime > updateInterval) {
    float val;//定義變量
    int dat;//定義變量
    dat = analogRead( LM35 ); // 讀取傳感器的模擬值并賦值給dat
    //val=(125*dat)>>8;//溫度計算公式
    val = dat * (4.76 / 1023.0 * 100);
    update1(DEVICEID, INPUTID, val);
    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);
    }
    }
    }
    //設備登錄
    //{"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");
    }
    //處理網絡接收到到指令,執行相關動作
    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 == "play") {
    digitalWrite(LED, HIGH);
    say(F_C_ID, "LED on!");
    }
    if (C == "stop") {
    digitalWrite(LED, LOW);
    say(F_C_ID, "LED off!");
    }
    }
    }

    //發送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":"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();
    }
    /******************
    //處理來自ESP8266透傳的數據
    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();
    }
    }
    ******************/
    //上傳一個接口數據
    //{"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("\"}}");
    }
    //上傳更多數據,可以參考上面的寫法,和通訊協議,自己添加。
    //貝殼物聯通訊協議:http://www.eqytg.org/help/1.html
    1122334455 評論于:2020-05-05 13:46:45
    現在都可以,就是APP按鈕需要按好幾次才會有反應
    返回頂部
    <noscript id="mmkmi"><source id="mmkmi"></source></noscript>
  • <noscript id="mmkmi"><kbd id="mmkmi"></kbd></noscript>
  • <table id="mmkmi"><source id="mmkmi"></source></table>
  • 三上悠亚在线观看