Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Подключение ESP32 к Wi-Fi и асинхронный доступ к сайтам с Embassy

В этом упражнении мы снова используем режим STA для доступа к сайту, но на этот раз сделаем это асинхронно. В качестве HTTP-клиента будем использовать крейт reqwless, а для поддержки асинхронности во встраиваемых системах — фреймворк Embassy. Кроме них, подключим и другие вспомогательные крейты.

Создание проекта с помощью esp-generate

Чтобы создать проект, используйте команду esp-generate. Выполните:

esp-generate --chip esp32 wifi-async-http

Откроется экран с вопросом о выборе опций. Чтобы включить Wi-Fi, сначала нужно включить функции «unstable» и «alloc». Как вы могли заметить, пока не выбраны эти две опции, пункт Wi-Fi недоступен. Поэтому выбирайте их по одной:

  • Сначала выберите опцию «Enable unstable HAL features».
  • Выберите опцию «Enable allocations via the esp-alloc crate».
  • Теперь можно включить «Enable Wi-Fi via esp-radio crate».
  • Выберите опцию «Adds embassy framework support».

Также включите логирование.

  • Прокрутите до пункта «Flashing, logging and debugging (espflash)» и нажмите Enter.
  • Затем выберите «Use defmt to print messages».

Сохраните настройки, нажав на клавиатуре «s».

Обновляем зависимости

Embassy net

embassy-net, построенный на крейте smoltcp, предоставляет асинхронный сетевой стек для встраиваемых систем. Он предлагает API более высокого уровня и поддерживает IPv4, IPv6, среды Ethernet и bare-IP, а также TCP, UDP, DNS, DHCPv4 и multicast.

Этот крейт добавляется автоматически, если при генерации проекта с помощью esp-generate вы выбрали опции Wi-Fi и Embassy. Однако нам нужна ещё одна функция: «dns». Она необходима для HTTP-запросов, потому что имя сайта (например, google.com) нужно преобразовать в IP-адрес. Напомню, что в предыдущем упражнении мы указывали IP-адрес сайта вручную.

# Обновлённый embassy-net в Cargo.toml
embassy-net = { version = "0.7.1", features = [
  "defmt",
  "dhcpv4",
  "medium-ethernet",
  "tcp",
  "udp",
  #добавлено:
  "dns",
] }

smoltcp

Крейт smoltcp тоже добавляется в Cargo.toml. Чтобы использовать DNS-серверы, нужно включить feature «dns-max-server-count-4».

# Обновлённый smoltcp в Cargo.toml
smoltcp = { version = "0.12.0", default-features = false, features = [
    "defmt",
    "medium-ethernet",
    "multicast",
    "proto-dhcpv4",
    "proto-dns",
    "proto-ipv4",
    "socket-dns",
    "socket-icmp",
    "socket-raw",
    "socket-tcp",
    "socket-udp",
    # добавлено:
    "dns-max-server-count-4", 
] }

Reqwless

Крейт reqwless — это HTTP-клиент для встраиваемых систем, который работает с любым транспортом, реализующим трейты из крейта embedded-io.

reqwless = { version = "0.13.0", default-features = false, features = [
    "embedded-tls",
] }