Сетевые приложения · 6 min read · Jan 20, 2026
Разработка сетевых приложений для ESP8266 с использованием Mongoose в Linux
Давайте обсудим, как начать разработку сетевых приложений для чипа ESP8266 с использованием встроенного веб-сервера Mongoose в Linux. Я буду использовать Ubuntu, но все это можно легко адаптировать для любой дистрибуции Linux.
Кто есть кто
Поскольку вы начали читать эту статью, я предполагаю, что вы знаете о Linux, ESP8266 и Mongoose. Поэтому только краткое введение.
ESP8266
Недорогой чип с интегрированным WiFi, разработанный компанией Expressif. Если вы хотите углубиться в детали, посетите официальный сайт.
Mongoose
Mongoose — это полная многопротокольная библиотека с ядром менее 40 кБ, разработанная компанией Cesanta. Найдите больше информации об этом на сайте Cesanta.
Linux
Серьезно? :-)
Подключение ESP8266 к вашему компьютеру
Хорошо, сначала нам нужно подключить чип ESP8266 к вашему компьютеру. Вы можете сделать это несколькими способами.
NodeMCU
Если у вас есть модуль NodeMCU с встроенным преобразователем UART-USB, все, что вам нужно сделать, это подключить модуль к компьютеру через USB. KISS!
Подключение с внешним преобразователем UART-USB
Если у вашего модуля ESP нет внутреннего преобразователя UART-USB, вам нужен внешний. Их множество — просто погуглите.
Выберите тот, который работает с Linux (в основном, большинство из них) и имеет вывод 3.3V, и помните: большинство преобразователей UART-USB имеют выводы как для 3.3V, так и для 5V, но вы не должны подключать ESP к выводам 5V. Это устройство не устойчиво к напряжению, и вы можете сжечь свой модуль.
Теперь подключите (ESP -> Преобразователь):
VCC -> 3.3V
GND -> GND
RX0 -> TX (не RX)
TX0 -> RX
CH_PD -> 3.3V
Подключение с Arduino
Если у вас нет преобразователя UART-USB, но есть Arduino с выводами 3.3V, вы можете легко использовать его для подключения ESP:
- Подключите Arduino к компьютеру через USB
- Подключите RESET Arduino к его GND: это необходимо для отключения процессора хоста, потому что нам нужен только модуль UART-USB
- Подключите ESP (ESP -> Arduino) 1. VCC -> 3.3V
- GND -> GND
- RX0 -> RX0 (не TX)
- TX0 -> TX
- CH_PD -> 3.3V
Проверка подключения
Если ваше подключение в порядке, ESP должен появиться как новое устройство tty. Обычно NodeMCU и ESP, подключенные через преобразователь UART-USB, появляются как /dev/ttyUSBx (x = 0, 1, 2 и т.д.), а версия Arduino появляется как /dev/ttyACMx (x = 0, 1, 2 и т.д.)
Вы можете использовать команду dmesg | grep usb, чтобы найти ваше устройство.
Например, после подключения NodeMCU вы увидите что-то вроде этого:
[ 1496.765417] usb 2-3.3: new full-speed USB device number 15 using xhci_hcd[ 1496.867729] usb 2-3.3: New USB device found, idVendor=10c4, idProduct=ea60[ 1496.867736] usb 2-3.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3[ 1496.867740] usb 2-3.3: Product: CP2102 USB to UART Bridge Controller[ 1496.867743] usb 2-3.3: Manufacturer: Silicon Labs[ 1496.867745] usb 2-3.3: SerialNumber: 4202[ 1497.900384] usbcore: registered new interface driver usbserial[ 1497.900423] usbcore: registered new interface driver usbserial_generic[ 1497.900457] usbserial: USB Serial support registered for generic[ 1497.903897] usbcore: registered new interface driver cp210x[ 1497.903989] usbserial: USB Serial support registered for cp210x[ 1497.904382] usb 2-3.3: cp210x converter now attached to ttyUSB0Как вы можете видеть, NodeMCU теперь доступен как /dev/ttyUSB0.
В качестве окончательной проверки используйте любой терминал для подключения к новому устройству; я собираюсь использовать picocom. Это легкий терминал. В Ubuntu его можно установить с помощью:
sudo apt install picocomПробуем:
picocom /dev/ttyUSB0 -b 115200Если все в порядке, вы должны увидеть “ Терминал готов “ в выводе picocom.
Исправление ошибки “Доступ запрещен”
Если picocom говорит “Доступ запрещен”, это обычно означает, что текущий пользователь не является членом группы dialout: в Linux, чтобы получить доступ к последовательным портам, пользователь должен быть членом этой группы.
Запустите:
sudo usermod -aG docker $USERкоманду, выйдите из системы, войдите снова и попробуйте подключить ESP снова. “Доступ запрещен” должен исчезнуть.
Сборка Mongoose
Скачайте последнюю версию Mongoose отсюда.
Mongoose поставляется с примером для ESP8266 и RTOS SDK. Учебник и пример кода для него находятся здесь.
Примечание: у ESP8266 есть две версии SDK. Первая — это non-OS, а вторая основана на RTOS. В этой статье я буду использовать последнюю. Чтобы узнать различия между ними, погуглите или прочитайте этот ответ на официальном форуме.
Чтобы собрать пример, у вас есть два варианта:
- Использовать docker и готовые образы docker
- Установить SDK и инструментарий на вашем компьютере
Использование Docker
Это проще, и я считаю, что это лучший способ. Образы docker от Cesanta содержат все, что вам нужно для сборки Mongoose для ESP (и не только Mongoose — любое приложение ESP). Таким образом, вам не нужно устанавливать ничего локально, и вы можете легко делиться своим кодом с друзьями и коллегами, чтобы они могли собрать вашу прошивку и получить точно такой же результат.
Руководство по установке docker доступно здесь. Попробуйте, это действительно просто, вам просто нужно добавить репозиторий docker в ваш Linux и установить его как обычную программу с помощью apt.
После установки docker перейдите в папку mongoose/examples/ESP8266_RTOS и запустите build.sh
При первой сборке docker загрузит необходимый образ. Это может занять некоторое время, в зависимости от вашего интернет-канала. Но, как только build.sh завершится, в папке ./bin вы найдете два .bin файла.
Это прошивка. Вы это сделали!
Использование локального SDK
Если docker для вас слишком прост или по какой-либо причине вы хотите использовать локально установленные инструменты, вы также можете это сделать.
Это немного сложнее и скучнее, но ничего слишком сложного. Особенно учитывая, что Cesanta разработала некоторые инструменты для вас, и вам не нужно собирать их из исходников.
Вот как это работает:
- Клонируйте ESP RTOS SDK из этого репозитория. Пример makefile ищет его в папке /opt/ESP8266_RTOS_SDK, поэтому вы можете либо поместить клонированный репозиторий в эту папку, либо изменить путь к нему перед сборкой примера (см. ниже).
- Скачайте xtensa-lx106-elf.tar.bz2 из этой публичной папки.
- Распакуйте файл xtensa-lx106-elf.tar.bz2. Например, в папку /opt:
sudo tar -xvf xtensa-lx106-elf.tar.bz2 -C /opt
- Измените вашу переменную PATH, например, если вы распаковали инструментарий в папку /opt, используйте следующую команду:
export PATH=/opt/xtensa-lx106-elf/bin:$PATH
(также я рекомендую добавить эту команду в ваши .bashrc или .profile, чтобы сохранить изменения после перезагрузки системы)
Теперь запустите:
$ export SDK_PATH=/opt/ESP8266_RTOS_SDK # Укажите ваш путь к SDK здесь$ export BIN_PATH=./bin; mkdir ./bin$ make clean; make BOOT=none APP=0 SPI_SPEED=40 SPI_MODE=dio SPI_SIZE_MAP=0И теперь, если все установлено правильно, у вас будет прошивка в папке ./bin
Вы снова это сделали!
Прошивка ESP
Существует множество инструментов для прошивки ESP8266. Мы будем использовать esptool. Чтобы использовать его, клонируйте этот репозиторий и добавьте путь к esptool.py в вашу переменную PATH (это необязательно, просто удобно).
Теперь отключите picocom, если он все еще подключен (Подсказка: нажмите Ctrl+A; Ctrl+D, чтобы выйти из него) и запустите:
esptool.py --port /dev/ttyUSB0 --baud 230400 \
write_flash --flash_mode=dio --flash_size=4m \
0x00000 ${BIN_PATH}/eagle.flash.bin \
0x20000 ${BIN_PATH}/eagle.irom0text.bin \
0x7e000 ${SDK_PATH}/bin/esp_init_data_default.binВажно: если ваш модуль не является NodeMCU, вам нужно заземлить GPIO0 перед прошивкой (заземление GPIO0 переключает модуль в режим прошивки). После прошивки отключите GPIO0 от земли и перезапустите ESP.
Если ошибок не произошло, вы увидите вывод, похожий на этот:
Connecting...
Erasing flash...
Took 0.58s to erase flash block
Wrote 35840 bytes at 0x00000000 in 1.8 seconds (157.5 kbit/s)...
Erasing flash...
Took 2.02s to erase flash block
Wrote 301056 bytes at 0x00020000 in 15.4 seconds (156.7 kbit/s)...
Erasing flash...
Took 0.11s to erase flash block
Wrote 1024 bytes at 0x0007e000 in 0.1 seconds (163.5 kbit/s)...
Leaving…Готово! Теперь устройство прошито вашей прошивкой.
Первые результаты
Теперь вы должны увидеть сеть WiFi “Mongoose”. Пример настраивает точку доступа. Используйте пароль “Mongoose” для подключения, затем перейдите по адресу http://192.168.4.1/, и вы увидите страницу приветствия “Hello, world”.
Поздравляю! Вы только что запустили веб-сервер на ESP8266!
Следующие шаги
Следующие шаги зависят от вас. Вы можете использовать описанный пример в качестве отправной точки.
Посмотрите на его файл user_main.c. Он настраивает точку доступа WiFi и запускает веб-сервер. Вы можете легко изменить режим AP на режим станции (и подключиться к вашей WiFi сети) и использовать API Mongoose, чтобы реализовать все, что хотите. Это обычный способ использования Mongoose, поэтому вы можете использовать другой пример Mongoose для создания вашей программы и иметь http, tcp, udp, mqtt и многие другие функции на вашем устройстве ESP.
Используйте документы Espressif (например, этот) чтобы узнать, как управлять модулем WiFi ESP8266 (и не только WiFi) и документацию Mongoose, чтобы узнать о возможностях Mongoose.
Punks not dead!
Get new posts in your inbox
No spam. Unsubscribe anytime.