GS32ReportWeb — это простая и удобная библиотека для ESP32 (Arduino IDE), предназначенная для сбора системной информации микроконтроллера и отправки ее в формате JSON через HTTP POST-запрос на ваш удаленный сервер.
Библиотека идеально подходит для систем мониторинга, отладки, сбора телеметрии «умного дома» и контроля состояния устройств.
- Гибкая настройка системных параметров: Включайте или отключайте только те метрики ESP32, которые вам действительно нужны (модель чипа, свободная RAM, Uptime, Flash и т.д.).
- Поддержка пользовательских данных: Легко добавляйте показатели со своих датчиков (температура, влажность, статус реле и т.д.) с помощью удобного callback-интерфейса.
- Инициализация в setup(): Задавайте адрес сервера и конфигурацию прямо при старте устройства.
- Современный стек: Полностью оптимизирована под ArduinoJson v7 (автоматическое управление памятью, отсутствие утечек).
- Чистый API: Понятные названия методов без лишнего «шума».
- Создайте папку
GS32ReportWebв директории с библиотеками вашей Arduino IDE:
Documents/Arduino/libraries/GS32ReportWeb/ - Поместите туда файлы библиотеки (
library.properties,README.md, папкуsrcс.hи.cppфайлами). - Убедитесь, что в Arduino IDE установлена библиотека ArduinoJson (версии 7 и выше) через Менеджер библиотек.
- Перезапустите Arduino IDE.
Структура папки библиотеки должна выглядеть так:
GS32ReportWeb/
├── library.properties
├── README.md
├── src/
│ ├── GS32ReportWeb.h
│ └── GS32ReportWeb.cpp
└── examples/
└── BasicReport/
└── BasicReport.ino
Вы можете точечно управлять передачей следующих параметров (вызывая соответствующие методы в setup()):
| Метод настройки | Описание параметра | По умолчанию |
|---|---|---|
reporter.chipModel(bool) |
Модель чипа (например, ESP32) | true |
reporter.chipCores(bool) |
Количество ядер процессора | true |
reporter.chipRevision(bool) |
Ревизия чипа | true |
reporter.cpuFreq(bool) |
Частота процессора в МГц | true |
reporter.chipId(bool) |
Уникальный Chip ID (на основе MAC-адреса) | true |
reporter.heap(bool) |
Всего свободной RAM | true |
reporter.minHeap(bool) |
Минимальный исторический остаток RAM | true |
reporter.maxAllocHeap(bool) |
Максимальный непрерывный блок RAM | false |
reporter.flashSize(bool) |
Размер Flash-памяти | true |
reporter.flashSpeed(bool) |
Скорость Flash-памяти | false |
reporter.sdkVersion(bool) |
Версия ESP-IDF / SDK | false |
reporter.sketchSize(bool) |
Размер текущего скетча | false |
reporter.freeSketch(bool) |
Свободно места под скетч | false |
reporter.uptime(bool) |
Время работы устройства с момента запуска (мс) | true |
#include <WiFi.h>
#include <GS32ReportWeb.h>
// Данные вашей сети Wi-Fi
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
// Создаем глобальный объект библиотеки
GS32ReportWeb reporter;
// Callback-функция для добавления ваших пользовательских данных (датчики, счетчики и т.д.)
void addMyCustomData(JsonObject& custom) {
custom["temperature"] = 24.5;
custom["humidity"] = 52.1;
custom["device_status"] = "OK";
}
void setup() {
Serial.begin(115200);
delay(1000);
// Подключение к Wi-Fi
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected!");
// --- НАСТРОЙКА БИБЛИОТЕКИ ---
// 1. Указываем адрес сервера
reporter.begin("http://your-server-ip/report_handler.php");
// 2. Настраиваем системные флаги (что отправлять)
reporter.chipModel(true);
reporter.chipId(true);
reporter.heap(true);
reporter.uptime(true);
// Отключаем ненужные параметры для экономии трафика
reporter.flashSpeed(false);
reporter.sdkVersion(false);
// 3. Подключаем функцию с пользовательскими данными
reporter.onCustomData(addMyCustomData);
}
void loop() {
Serial.println("\n--- Sending Report ---");
reporter.sendReport();
// Отправляем отчет каждые 30 секунд
delay(30000);
}Библиотека формирует структурированный JSON-документ следующего вида:
{
"system": {
"chip_model": "ESP32",
"chip_cores": 2,
"chip_revision": 3,
"cpu_freq_mhz": 240,
"chip_id": "78E36D123456",
"free_heap": 215432,
"min_free_heap": 198210,
"flash_size": 4194304,
"uptime_ms": 30214
},
"custom": {
"temperature": 24.5,
"humidity": 52.1,
"device_status": "OK"
}
}Чтобы принимать и разбирать данные на стороне сервера, вы можете использовать этот простой скрипт report_handler.php:
<?php
header("Content-Type: application/json; charset=UTF-8");
// Принимаем только POST-запросы
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
echo json_encode(["status" => "error", "message" => "Method not allowed"]);
exit;
}
// Читаем сырые JSON-данные из тела запроса
$rawInput = file_get_contents("php://input");
$data = json_decode($rawInput, true);
if (!$data) {
http_response_code(400);
echo json_encode(["status" => "error", "message" => "Invalid JSON"]);
exit;
}
// Извлекаем данные
$chipId = $data['system']['chip_id'] ?? 'Unknown';
$freeHeap = $data['system']['free_heap'] ?? 0;
$temperature = $data['custom']['temperature'] ?? null;
// Пример: логируем в файл
$log = "[" . date('Y-m-d H:i:s') . "] Chip: $chipId | Heap: $freeHeap | Temp: $temperature\n";
file_put_contents("esp32_reports.log", $log, FILE_APPEND);
// Отвечаем устройству
http_response_code(200);
echo json_encode(["status" => "success", "message" => "Report received"]);
?>Этот проект распространяется под лицензией MIT. Вы можете свободно использовать и модифицировать его в своих проектах.