Поиск по сайту:

Разработка сетевых приложений для ESP8266 с использованием Mongoose в Linux


На этой странице

  1. Кто есть кто
    1. ESP8266
    2. Мангуст
    3. Линукс

    1. УзелMCU
    2. Подключение к внешнему преобразователю UART-USB

    1. Проверка подключения
    2. Исправление ошибки «Отказано в доступе»

    Давайте обсудим, как начать разработку сетевых приложений для чипа ESP8266 с использованием встроенного веб-сервера Mongoose в Linux. Я буду использовать Ubuntu, но все можно легко адаптировать под любой дистрибутив Linux.

    Кто есть кто

    Поскольку вы начали читать эту статью, я предполагаю, что вы знаете о Linux, ESP8266 и Mongoose. Так что только короткое вступление.

    ESP8266

    Недорогой чип со встроенным WiFi, разработанный Expressif. Если вы хотите углубиться в детали, посетите официальный сайт.

    Мангуста

    Mongoose — это полная многопротокольная библиотека с ядром менее 40 КБ, разработанная Cesanta. Найдите информацию об этом режиме на сайте Cesanta.

    линукс

    Действительно? :-)

    Подключение ESP8266 к компьютеру

    Хорошо, сначала нам нужно подключить чип ESP8266 к вашему компьютеру. Вы можете сделать это несколькими способами.

    узелMCU

    Если у вас есть модуль NodeMCU со встроенным преобразователем UART-USB, все, что вам нужно сделать, это подключить модуль к компьютеру через USB. ЦЕЛОВАТЬ!

    Подключение с помощью внешнего преобразователя UART-USB

    Если в вашем модуле ESP нет внутреннего конвертера UART-USB, вам нужен внешний. Их куча - просто погуглите.

    Выберите тот, который работает с Linux (в основном, большинство из них) и имеет контакт 3,3 В, и помните: большинство преобразователей UART-USB имеют контакты как для 3,3 В, так и для 5 В, но вы не должны подключать ESP к контактам 5 В. Это устройство не устойчиво к напряжению и может сжечь ваш модуль.

    Теперь подключим (ESP -> Converter):

    VCC -> 3,3 В

    Земля -> Земля

    RX0 -> TX (не RX)

    TX0 -> RX

    CH_PD -> 3,3 В

    Соединение с Ардуино

    Если у вас нет преобразователя UART-USB, но есть Arduino с контактами 3,3 В, вы можете легко использовать его для подключения ESP:

    1. Подключите Arduino к компьютеру через USB
    2. Подключить RESET Arduino к его GND: требуется отключить хост-процессор, т.к. нам нужен только модуль UART-USB
    3. Подключение ESP (ESP -> Arduino)
      1. VCC -> 3,3 В
      2. Земля -> Земля
      3. RX0 -> RX0 (не TX)
      4. TX0 -> TX
      5. CH_PD -> 3,3 В

      Проверка подключения

      Если с подключением все в порядке, 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.

      В качестве окончательной проверки используйте любой терминал для подключения к новому устройству; Я собираюсь использовать пикоком. Это легкий терминал. В Ubuntu его можно установить с помощью:

      sudo apt install picocom

      Пытающийся:

      picocom /dev/ttyUSB0 -b 115200

      Если все в порядке, вы должны увидеть \Терминал готов” в выводе picocom.

      Исправление ошибки «Отказано в доступе»

      Если picocom говорит «Отказано в доступе», это обычно означает, что текущий пользователь не является членом группы dialout: в Linux для доступа к последовательным портам пользователь должен быть членом этой группы.

      Бег:

      sudo usermod -aG docker $USER

      выполните команду, выйдите из системы, снова войдите в систему и попробуйте снова подключить ESP. «Отказано в доступе» должно исчезнуть.

      Строительный мангуст

      Загрузите последнюю версию Mongoose отсюда.

      Mongoose поставляется с примером для ESP8266 и RTOS SDK. Турориал и пример кода для него находятся здесь.

      Примечание: ESP8266 имеет две версии SDK. Первый не является ОС, а второй основан на RTOS. В этой статье я буду использовать последний. Чтобы найти различия между ними, погуглите или прочитайте этот ответ на официальном форуме.

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

      1. Используйте Docker и готовые к использованию образы Docker
      2. Установите SDK и набор инструментов на свой компьютер.

      Использование Докера

      Это проще, и я считаю, лучший способ. Образы докеров Cesanta содержат все необходимое для сборки Mongoose для ESP (и не только Mongoose — любого приложения ESP). Таким образом, вам не нужно устанавливать что-то локально, и вы можете легко поделиться своим кодом с друзьями и коллегами, чтобы они могли собрать вашу прошивку и получить точно такой же результат.

      Руководство по установке докера доступно здесь. Попробуйте, это действительно просто, вам просто нужно добавить репозиторий docker в свой Linux и установить его как обычную программу с помощью apt.

      После установки докера перейдите в папку mongoose/examples/ESP8266_RTOS и запустите build.sh.

      При первой сборке докер скачает нужный образ. Это может занять некоторое время, в зависимости от вашего интернет-канала. Но как только 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

      4. Измените переменную PATH, например, если вы распаковали набор инструментов в папку /opt, используйте следующую команду:

        export PATH=/opt/xtensa-lx106- эльф/бин:ПУТЬ

      (также я бы рекомендовал добавить эту команду в ваши папки .bashrc или .profile, чтобы сохранить изменения после перезагрузки системы)

      Теперь запустите:

      $ export SDK_PATH=/opt/ESP8266_RTOS_SDK  # Put your path to SDK here
      $ 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…

      Готовый! Теперь устройство прошито вашей прошивкой.

      Первые результаты

      Теперь вы должны увидеть сеть Wi-Fi «Mongoose». В этом примере устанавливается точка доступа. Используйте пароль «Mongoose» для подключения, затем перейдите по адресу http://192.168.4.1/, и вы увидите «Привет, страница приветствия мира».

      Поздравляем! Вы просто запускаете веб-сервер на ESP8266!

      Следующие шаги

      Дальнейшие действия зависят от вас. Вы можете использовать описанный пример в качестве отправной точки.

      Посмотрите его файл user_main.c . Он устанавливает точку доступа WiFi и запускает веб-сервер. Вы можете легко изменить режим точки доступа на режим станции (и подключиться к своей сети Wi-Fi) и использовать API Mongoose для реализации всего, что вы хотите. Это распространенный способ использования Mongoose, поэтому вы можете использовать другой пример Mongoose для создания своей программы и иметь http, tcp, udp, mqtt и другие дополнительные функции на вашем устройстве ESP.

      Используйте документы Espressif (например, документацию для изучения функций Mongoose.

      Панки живы!