Открываем веб-сервер ESP32 в интернет
Обычно не рекомендуется открывать из интернета IoT-веб-серверы, например те, что работают на ESP32, без должных мер безопасности. Такие устройства могут быть уязвимы для атак, например для несанкционированного доступа, включения в ботнет или других видов ущерба, в зависимости от устройства (на вашем месте я бы не стал рисковать). Кроме того, использовать ESP32 как веб-хостинг непрактично из-за таких сложностей, как открытие портов, обработка нагрузки трафика и потенциальные риски безопасности. Тем не менее это может быть отличным учебным опытом, если хотите попробовать или показать друзьям.
Проброс портов на роутере
Один из вариантов — настроить проброс портов на роутере, сопоставив внешний IP-адрес и порт (например, публичный IP 202.xx.xx.10) с внутренним IP-адресом и портом ESP32 (например, 192.168.56.101). Однако в большинстве домашних сетей используются динамические публичные IP-адреса, которые выдаёт провайдер, и они могут со временем меняться. Из-за этого настройка может быть ненадёжной и в некоторых случаях не работать. Чтобы обеспечить стабильный доступ, может понадобиться статический публичный IP-адрес. Обычно для этого нужно обратиться к провайдеру, и это может стоить дополнительных денег.
Можно также использовать такие сервисы, как No-IP, вместе с пробросом портов и динамическим IP-адресом. Если ваш роутер это поддерживает, DDNS или No-IP можно настроить прямо в его настройках. Подробнее см. на официальном сайте No-IP здесь. Однако имейте в виду, что такой подход может не работать с некоторыми провайдерами, которые блокируют открытые порты на динамических IP-адресах.
Туннелирование
При туннелировании статический IP-адрес не нужен, но понадобится внешний сервис, который предоставляет туннели. Чтобы это работало, нужно установить клиент на ваш ПК или Raspberry Pi (не на Pico) и запустить его для создания туннеля (знаю, это не очень весело). Запустить этот клиент на ESP32 нельзя. Когда туннель будет настроен, сервер можно будет открыть по URL, который выдаст провайдер.
Можно использовать такие сервисы, как ngrok или Cloudflare Tunnel. Чтобы начать работу с ngrok, посмотрите официальное руководство здесь. Официальное руководство по Cloudflare Tunnel доступно здесь.
Пример с ngrok
Например, при использовании ngrok я сначала зарегистрировался на их портале и получил токен аутентификации. Затем запустил клиент на компьютере и добавил токен командой ngrok config add-authtoken MY_AUTH_TOKEN.
Чтобы создать туннель, я выполнил команду: ngrok http 192.168.0.101:80. Здесь 192.168.0.101 — это IP-адрес ESP32. Клиент создал публичный URL в домене ngrok. Я смог открыть этот URL из другой сети (например, сети телефона), чтобы убедиться, что туннель работает правильно.