HTTP-запросы через urequests: общаемся с сервером
Учим плату отправлять данные в облако и получать ответы из интернета.
urequests — облегчённая версия библиотеки
requestsдля MicroPython, позволяющая делать HTTP-запросы (GET, POST) к веб-серверам.
GET: получаем данные
Запрос GET читает данные с сервера — например, прогноз погоды или точное время:
import urequests
response = urequests.get("http://worldtimeapi.org/api/timezone/Europe/Moscow")
data = response.json() # разбираем JSON в словарь
print("Время:", data["datetime"])
response.close() # обязательно закрываем!POST: отправляем показания
Запрос POST шлёт данные на сервер — например, температуру в облачный сервис:
import urequests
import ujson
payload = {"temperature": 23.5, "humidity": 45}
headers = {"Content-Type": "application/json"}
response = urequests.post(
"http://example.com/api/sensor",
data=ujson.dumps(payload),
headers=headers,
)
print("Код ответа:", response.status_code)
response.close()Разбор JSON — на чистом Python
Парсинг и формирование JSON-конфига — это чистая стандартная библиотека, поэтому пример запускается в браузере:
import json
# формируем тело запроса
payload = {"device": "esp32-livingroom", "temperature": 23.5, "humidity": 45}
body = json.dumps(payload)
print("Отправляем:", body)
# разбираем ответ сервера
server_reply = '{"status": "ok", "saved": true, "id": 42}'
reply = json.loads(server_reply)
print("Статус:", reply["status"], "| id записи:", reply["id"])Вывод:
Отправляем: {"device": "esp32-livingroom", "temperature": 23.5, "humidity": 45}
Статус: ok | id записи: 42Коды ответа
| Код | Значение |
| 200 | Успех |
| 201 | Создано (часто после POST) |
| 400 | Ошибка в запросе |
| 404 | Адрес не найден |
| 500 | Ошибка на сервере |
Как работает под капотом
HTTP-запрос — это текст, который плата отправляет серверу через TCP-соединение (используя Wi-Fi-стек). urequests открывает сокет на нужный порт (80 для http), формирует строку запроса с заголовками и телом, ждёт ответ и парсит его. Каждый ответ занимает память под буфер, поэтому критично вызывать response.close() — иначе при многих запросах память кончится и плата перезагрузится.
Частые ошибки
- Забыть
response.close(). Утечка памяти — самая частая причина «непонятных» перезагрузок. - HTTPS на слабой плате. Шифрование TLS требует много памяти; иногда приходится использовать http или плату с PSRAM.
- Не проверять
status_code. Считать ответ успешным, не убедившись, что код 200.
Итог
urequestsделает HTTP-запросы: GET — читать, POST — отправлять.- JSON формируют через
json.dumpsи разбираютjson.loads. - Всегда вызывайте
response.close(), чтобы не утекала память. - Проверяйте
status_code; HTTPS на ESP32 тяжёл по памяти.