В настоящее время я работаю над проектом, в котором ESP32 постоянно получает данные датчика и переводит их в строки слов перед отправкой на сервер NodeJS / SocketIO.
Пакет данных будет отправлен с ESP32 на сервер составляет 10 ~ 20 мсек с использованием timerInterrupt (). Проблема в том, что на стороне сервера скорость приема варьируется в пределах ~ 5 мс, а после отправки 3-10 пакетов возникает задержка, которая может go достигать 100 мс. Данные не теряются между пакетами, но я хочу, чтобы фаза передачи проходила как можно более плавно. Вы можете дать мне несколько решений? Библиотеку, которую я использовал в ESP32, можно найти здесь: https://github.com/robojay/Socket.io-v1.x-Library
Код сервера
function process(data) {
var dataArr = [];
var a1, a2, a3;
var i = 0;
while (i <= data.length) {
var d = i/2;
a1 = data.charCodeAt(i) - 65;
a2 = data.charCodeAt(i+1) - 65;
a3 = a1 << 4;
dataArr[d] = a3|a2;
i += 2;
}
return dataArr;
}
io.on('connection', function(socket)
{
console.log("Detected connection from " + socket.id);
var header, footer, stringlength, datacount, messtring, z;
socket.on("count", function(data) {
header = data.message.slice(0,4);
stringlength = processShortInt(process(data.message.substr(-8,4)));
footer = data.message.slice(stringlength+4);
if (header == "HIEU" && footer == "TUNG"){
datacount = processByte(process(data.message.substr(-10,2)));
messtring = data.message.slice(header.length,stringlength-2);
for (z = 0; z < datacount; z++) {
senddata = sorting(messtring).charAt(0) + sorting(messtring).slice(2);
messtring = messtring.slice(parseInt(sorting(messtring).charAt(1))+2);
ui_nsp.emit("frame", senddata);
}
}
})
})
Функция sorting()
использует Buffer.from(dataArr).read
, чтобы преобразовать массив значений в исходное числовое значение, считанное на ESP32.