Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

netboot-esp

Note

Проект родился из любопытства и простаивавшего без дела микроконтроллера. Серьезного опыта в embedded не было, с Arduino не работал со времен университета.

Получился небольшой скетч для управления домашним сервером и практическое знакомство с основами разработки под ESP32.


Как это работает

ESP32 подключается к домашней сети Wi-Fi и выступает посредником между пользователем и сервером.

Поддерживаются три основные команды:

  • ping - проверяет доступность сервера по сети;
  • wake - отправляет Magic Packet (Wake-on-LAN) на MAC-адрес сервера;
  • shutdown - отправляет HTTP-запрос на небольшой Python-сервис, который выполняет корректное завершение работы (shutdown -h now).

Почему HTTP, а не SSH?

Полноценный SSH-клиент для ESP32 требует значительно больше флеш-памяти и оперативной памяти. Небольшой HTTP-сервис решает ту же задачу гораздо проще, стабильнее и практически без накладных расходов.

Вся конфигурация устройства хранится в энергонезависимой памяти (NVS) и может изменяться через Serial без перепрошивки.


Удаленное управление

Помимо Serial-интерфейса устройство поддерживает управление по MQTT. Для удаленного управления проект интегрирован с платформой Rightech IoT Core. Это позволяет управлять сервером удаленно, в том числе через мессенджеры, если подключить брокер к соответствующему боту.


Rightech IoT Core

Telegram-бот

Прошивка и настройка

Папку Firmware необходимо открыть в Arduino IDE, выбрав соответствующую плату ESP32.

Необходимые библиотеки

Устанавливаются через стандартный менеджер библиотек Arduino IDE:

  • ESP32Ping - выполнение ICMP Ping;
  • PubSubClient - работа с MQTT.

Первичная настройка

В файле Config.h задаются значения по умолчанию, чтобы не вводить их вручную при первом запуске.

#define DEFAULT_WIFI_SSID "твоя_сеть"
#define DEFAULT_WIFI_PASSWORD "твой_пароль"

#define DEFAULT_MQTT_HOST "адрес_твоего_брокера"

#define DEFAULT_SERVER_IP "192.168.1.100"
#define DEFAULT_SERVER_MAC "AA:BB:CC:DD:EE:FF"
#define DEFAULT_SERVER_PORT 9999

Если оставить значения по умолчанию, все параметры можно будет изменить позже через Serial.

Команды Serial

После прошивки откройте монитор порта на скорости 115200 бод и выполните команду:

help

Она выведет список всех доступных команд.

Основные команды

Команда Назначение
status Статус Wi-Fi, RSSI, время работы и объем свободной памяти
ping Проверка доступности сервера
wake Отправка WoL-пакета пакета
shutdown Корректное завершение работы сервера
config Просмотр текущей конфигурации
set ip <ip> Изменить IP-адрес сервера
set mac <mac> Изменить MAC-адрес сервера
set port <port> Изменить порт HTTP-сервиса
set ssid <ssid> Изменить Wi-Fi сеть (требуется перезагрузка)
set wifi pass <password> Изменить пароль Wi-Fi (требуется перезагрузка)
set mqtt host <host> Изменить адрес MQTT-брокера (требуется перезагрузка)
set mqtt topic_cmd <topic> Изменить топик входящих команд
set mqtt topic_out <topic> Изменить топик исходящих сообщений
set led on/off Включить или отключить статусный светодиод
reset Сбросить настройки к значениям из Config.h (требуется перезагрузка)

Python-сервис (shutdown_listener)

Для корректного завершения работы сервера используется небольшой HTTP-сервис на Python.

Он ожидает GET-запрос на путь /shutdown и выполняет команду:

shutdown -h now

Important

Сервис принимает запросы только из доверенной локальной подсети. Если запрос поступит с другого адреса, будет возвращен ответ 403 Forbidden.

Быстрый запуск

  1. Скопируйте папку shutdown_listener на сервер (например, в /root/).

  2. Укажите свою локальную подсеть в файле app.py:

ALLOWED_SUBNETS = [
    ipaddress.ip_network("192.168.1.0/24"),
]
  1. Для автоматического запуска рекомендуется использовать systemd:
ln -s shutdown_listener/shutdown-listener.service /etc/systemd/system/

systemctl daemon-reload
systemctl enable --now shutdown-listener

Если app.py расположен не в /root/, необходимо изменить путь в файле .service.

Для ручного запуска:

cd shutdown_listener
python3 app.py

Устройство в сборе

ESP32 в 3D-печатном корпусе, питание от USB-порта роутера

Планы

  • Управление кнопкой питания сервера через GPIO ESP32.
  • Независимое питание ESP32, не зависящее от состояния сервера.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages