Сетевые приложения · 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:

  1. Подключите Arduino к компьютеру через USB
  2. Подключите RESET Arduino к его GND: это необходимо для отключения процессора хоста, потому что нам нужен только модуль UART-USB
  3. Подключите ESP (ESP -> Arduino) 1. VCC -> 3.3V
  4. GND -> GND
  5. RX0 -> RX0 (не TX)
  6. TX0 -> TX
  7. 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. В этой статье я буду использовать последнюю. Чтобы узнать различия между ними, погуглите или прочитайте этот ответ на официальном форуме.

Чтобы собрать пример, у вас есть два варианта:

  1. Использовать docker и готовые образы docker
  2. Установить 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 разработала некоторые инструменты для вас, и вам не нужно собирать их из исходников.

Вот как это работает:

  1. Клонируйте ESP RTOS SDK из этого репозитория. Пример makefile ищет его в папке /opt/ESP8266_RTOS_SDK, поэтому вы можете либо поместить клонированный репозиторий в эту папку, либо изменить путь к нему перед сборкой примера (см. ниже).
  2. Скачайте xtensa-lx106-elf.tar.bz2 из этой публичной папки.
  3. Распакуйте файл xtensa-lx106-elf.tar.bz2. Например, в папку /opt:

sudo tar -xvf xtensa-lx106-elf.tar.bz2 -C /opt

  1. Измените вашу переменную 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!

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.