HTTP и REST для IoT
HTTP — тот же протокол, по которому грузятся сайты. В IoT он самый простой способ обменяться данными с сервером.
Если устройству нужно изредка отправить показания или дёрнуть веб-сервис — HTTP идеален. Он знаком, понятен и поддерживается везде.
HTTP (HyperText Transfer Protocol) — протокол «запрос–ответ». Клиент (ESP32) отправляет запрос серверу, сервер отвечает. Два главных типа запросов: GET — «дай мне данные» и POST — «вот тебе данные, прими». Этого набора хватает для большинства простых IoT-сценариев: отправить температуру на сервер, забрать настройку, дёрнуть веб-хук.
Данные между устройством и сервером обычно передают в формате JSON — это текст вида «ключ: значение», который легко читать и людям, и машинам. ESP32 формирует JSON с показаниями и шлёт его POST-запросом на ваш сервер или облачный сервис.
Как это работает под капотом
[ESP32] --- POST /sensor {"temp":23} ---> [СЕРВЕР]
[ESP32] <------- 200 OK {"status":"ok"} ---- [СЕРВЕР]
GET = получить данные
POST = отправить данные
Современные веб-сервисы обычно построены по принципу REST: у каждого ресурса (датчик, устройство, пользователь) есть свой URL, а действия выражаются методами HTTP. Это предсказуемо и удобно. Логику формирования и разбора JSON удобно отработать в обычном Python — запусти врезку «Посчитай сам ▶».
# Формируем и разбираем JSON-сообщение датчика (HTTP/REST)
import json
# ESP32 собирает показания и упаковывает в JSON для POST-запроса
payload = {
"device": "esp32-livingroom",
"temp": 23.4,
"humidity": 41,
"battery": 87
}
body = json.dumps(payload)
print("Отправляем на сервер:")
print(body)
# Сервер ответил — разбираем JSON обратно
response = '{"status": "ok", "command": "set_target", "value": 22}'
data = json.loads(response)
print("\nСервер просит установить цель:", data["value"], "°C")
# простое правило на основе ответа
if payload["temp"] > data["value"]:
print("Решение: выключить обогреватель")
else:
print("Решение: включить обогреватель")
Эта врезка показывает полный цикл: упаковали показания в JSON, отправили (концептуально), получили ответ-команду, разобрали его и приняли решение. На реальном ESP32 это делает HTTP-библиотека, а логика остаётся той же.
Но у HTTP есть слабые места для IoT. Каждый запрос — это отдельное соединение с заголовками: тяжеловато для частых мелких сообщений и для устройств на батарейке. И сервер не может сам «толкнуть» команду устройству — оно должно само спросить. Для постоянного двустороннего обмена лучше подходит MQTT, ему посвящён следующий урок.
Частые ошибки
- Слать HTTP-запросы слишком часто. Накладные расходы съедают батарею и трафик.
- Ждать команд от сервера по HTTP. Сервер не инициирует связь сам; устройство должно опрашивать (polling).
- Игнорировать код ответа. 200 — успех, 4xx/5xx — ошибка; их нужно обрабатывать.
Best practices
- Используй HTTP для редких событий и запросов настроек, не для потоковой телеметрии.
- Всегда проверяй код ответа сервера и обрабатывай ошибки сети.
- Передавай данные в JSON — это стандарт де-факто и легко парсится.
Где это встречается
HTTP в IoT хорош для интеграций с веб-сервисами. Хочешь, чтобы датчик при срабатывании отправил сообщение в мессенджер или записал строку в облачную таблицу? Почти все такие сервисы предоставляют веб-хуки и REST API, которые дёргаются простым POST-запросом. ESP32 формирует JSON и отправляет его — и вот физическое событие уже связано с облачным сервисом без всякого сложного протокола.
Современное развитие HTTP для устройств — это защищённый HTTPS и формат данных JSON, ставший общим языком интеграций. Многие платформы интернета вещей (облака для устройств) принимают данные именно по HTTP-эндпоинтам. Минус — накладные расходы на каждое соединение, поэтому HTTP выбирают для редких, событийных обращений. А для постоянного потока телеметрии и мгновенных команд тот же проект обычно дополняют MQTT — два протокола прекрасно уживаются в одном устройстве, каждый для своей роли.
Запомни главное
- HTTP — протокол запрос–ответ с методами GET и POST.
- Данные передают в формате JSON по принципам REST.
- HTTP хорош для редких обращений, но однонаправлен и накладен.
- Всегда проверяй код ответа сервера: 200 — успех, 4xx/5xx — ошибка.
Итог: HTTP — простой протокол «запрос–ответ» (GET/POST) с данными в JSON, удобный для редких обращений к серверу, но тяжеловатый и однонаправленный для постоянной связи. Для живого двустороннего обмена в IoT используют MQTT — переходим к нему.