передать «большой» массив измерений на сервер через Wi-Fi
Я измеряю ускорения на «высокой частоте»; (4 кГц) от акселерометра (ADXL355/ADXL357) на esp32. Крайне важно, чтобы ни один образец не был потерян при выполнении измерения, которое длится, скажем, 2 секунды, поэтому я сначала записываю все образцы, а затем отправляю полный массив измерений на сервер через Wi-Fi, зная IP-адрес и порт сервера.
Масив мер представляет собой массив int размером 3 байта * 3 оси * 4000 Гц * 2 секунды = 72 000 байт.
Я пытался сделать http-сервер и отправлять массив мер с микроконтроллера на сервер с помощью POST-запроса и сериализации полезной нагрузки с помощью json (библиотека ArduinoJSON), но это очень затратно с точки зрения памяти, потому что мне нужно дублируйте массив мер и преобразуйте его в массив строк.
Есть ли лучший способ отправить этот массив через Wi-Fi на сервер (какой-то поток?), оптимизируя использование памяти на микроконтроллере? какие библиотеки Arduino могут помочь в этой задаче? не могли бы вы связать пример с кодом аналогичной ситуации?
1 ответ
Лучший ответ:
JSON — это формат, который легко писать: для этого вам не нужна библиотека. Например, массив чисел можно сериализовать следующим образом:
void serialize_array(Print &client, int *data, int count) {
client.print('[');
for (int i = 0; i < count; i++) {
client.print(data[i]);
client.print(i==count-1 ? ']' : ',');
}
}
Это позволит эффективно передавать данные без сохранения JSON. представление в памяти.
- Можно ли использовать WiFi и Bluetooth/BLE в одном проекте ESP32?
- ESP32-S3 — HttpClient возвращает только код состояния 200 без данных полезной нагрузки JSON
- Arduino Nano IoT 33 Ограничения размера массива символов
- Библиотека WiFi.h, проблемы с client.print()
- ESP32 - "Детектор Браунаута был активирован" при запуске Wi-Fi
- Почему OTA не работает с платой ESP32-CAM Ai-Thinker?
- ESP32 открывает "captive portal" при подключении
- Как очистить кучу памяти в esp32
Спасибо, Эдгар, что такое клиентский параметр типа Print? Где я могу найти документацию о том, как настроить его для связи с заданным ip: портом?, @AlekseyFedorovich
@AlekseyFedorovich: «клиент» будет экземпляром «HttpClient», или «EthernetClient», или «WiFiClient», или... того, куда вы отправляете свои данные. Это может быть даже «Последовательный», если вы просто хотите проверить полезную нагрузку на последовательном мониторе. См. документацию по тому, что вы будете использовать для отправки HTTP-запроса., @Edgar Bonet