Как я могу получить плоские текстовые данные с одного локального IP на другой в JavaScript? - PullRequest
0 голосов
/ 20 июня 2019

Я использую модуль ESP32 Wifi в качестве ведущего устройства для размещения веб-страницы, отображающей значения числа двоичных точек данных в таблице как OK или FAILED. Мне нужно, чтобы это устройство получало данные от другого клиента ESP32 по локальному IP-адресу, т.е. 192.168.138.50/readVal1, этот адрес будет отображать просто плоский текст OK или FAILED. Я хотел бы взять это значение и отобразить его в таблице, созданной моим мастер-модулем. Как мне это сделать?

Я попытался использовать HTTP-запрос get следующим образом в коде Arduino.

void runTest6(){
    String payload;
    HTTPClient http;
    http.begin("192.168.137.50/readBatt1");

    int httpCode = http.GET();
    if(httpCode > 0) {
        payload = http.getString();
        Serial.println(payload);
    }else{
        Serial.println("HTTP request error");
    }
    http.end();
    String batt6val = payload;
    server.send(200, "text/plane", batt6val);
}

Вот мой Javascript в корне, который обрабатывает обновления \

function getData(){
    try{
        console.log("Getting Data...");
        for(var i = 1;i<=NUMOFUNITS;i++){
            (function (i){
                setTimeout(function () {
                    console.log("(debug msg)in loop #: " + i)
                        var xhttp = new XMLHttpRequest();
                        var current = "batt" + i + "val";
                        var dataRead = "readBatt" + i;
                        xhttp.onreadystatechange = function(){
                            if (this.readyState == 4 && this.status == 200){
                                console.log("updating innerHTML for data value: " + i);
                                document.getElementById(current).innerHTML = this.responseText;
                            }else if(this.readyState == 4 && this.status == 404){
                                console.log("no battery @ " + i);
                                document.getElementById(current).innerHTML = "None found";
                            }
                        };
                        xhttp.open("GET", dataRead, true);
                        xhttp.send();
                        if(i == 1){
                            updateTime();
                        console.log("Updated times.")
                        }   
                    }, 400*i);
                })(i);
            };
            console.log("Data update complete.");
        }
        catch(err){
            alert(err.name);
            throw err;
            getData(); //try to get data again 
        }
        finally{
            console.log("DONE");
        }
    }

1 Ответ

0 голосов
/ 25 июня 2019

Использование и HTTP-сервер Я могу отправлять информацию между ESP32.Используя WebServer, я установил server.on ("/ status / {}", sendData);где {} содержит pathArg или число, представляющее, какие данные запрашиваются.Функция senData () принимает pathArg и отправляет соответствующие данные следующим образом.

void sendData(){
    String battString = server.pathArg(0);
    Serial.println("Sending Data... PathArg= " + battString);
    int battNum = battString.toInt();
    int arrayNum = battNum - 1;
    server.send(200, "text/plane", battStatus[arrayNum]);
}

Здесь массив с именем battStatus содержит статус каждого.

...