Розробіть мережеві програми для ESP8266, використовуючи Mongoose в Linux

Розробіть мережеві програми для ESP8266, використовуючи Mongoose в Linux

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

Хто є хто

Оскільки ви почали читати цю статтю, я припускаю, що ви знаєте про Linux, ESP8266 і Mongoose. Так що тільки короткий вступ.

ESP8266

Недорогий чіп з інтегрованим Wi-Fi, розроблений компанією Expressif. Якщо ви хочете пірнути докладніше, перегляньте Офіційний сайт.

Мангуста

Mangoose - це повна багатопротокольна бібліотека з ядром під 40kB, розробленої компанією Cesanta. Знайти режим інформації про це на Сайт Чезанти.

Linux

Дійсно? 🙂

Підключення ESP8266 до комп'ютера

Гаразд, перше, що нам потрібно зробити, це підключення чіпа ESP8266 до комп'ютера. Ви можете зробити це кількома способами.

NodeMCU

Якщо у вас є модуль NodeMCU, з бортовим перетворювачем UART-to-USB, все, що вам потрібно зробити, це підключити модуль до комп'ютера через USB. KISS!

Підключення з зовнішнім перетворювачем UART-USB

Якщо ваш модуль ESP не має внутрішнього конвертера UART-USB, вам потрібен зовнішній модуль. Є їх тонн - просто google його.

Виберіть той, який працює з Linux (в основному, більшість з них) і має PIN-код 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
    2. GND -> GND
    3. RX0 -> RX0 (не TX)
    4. TX0 -> TX
    5. 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: новий повношвидкісний USB-номер пристрою 15 за допомогою xhci_hcd

[1496.867729] usb 2-3.3: знайдено новий USB-пристрій, idVendor = 10c4, idProduct = ea60

[1496.867736] usb 2-3.3: нові стрічки пристроїв USB: Mfr = 1, продукт = 2, SerialNumber = 3

[1496.867740] usb 2-3.3: продукт: CP2102 USB для контролера міст UART

[1496.867743] usb 2-3.3: Виробник: Silicon Labs

[1496.867745] usb 2-3.3: SerialNumber: 4202

[1497.900384] usbcore: зареєстрований новий інтерфейсний драйвер usbserial

[1497.900423] usbcore: зареєстрований новий драйвер інтерфейсу usbserial_generic

[1497.900457] usbserial: USB-послідовна підтримка, зареєстрована для загальних

[1497.903897] usbcore: зареєстрований новий драйвер інтерфейсу cp210x

[1497.903989] usbserial: USB-послідовна підтримка зареєстровано для cp210x

[1497.904382] usb 2-3.3: конвертор cp210x, який тепер прикріплений до ttyUSB0

Як видно, NodeMCU тепер доступний як / dev / ttyUSB0.

В якості останньої перевірки використовуйте будь-який термінал для підключення до нового пристрою; Я збираюся використовувати picocom. Це легкий термінал. У Ubuntu він може бути встановлений з:

sudo apt install picocom

Спроба:

picocom / dev / ttyUSB0-b 115200

Якщо все гаразд, ви повинні побачити "Terminal ready" у виводі picocom.

Виправлення помилки доступу "Відхилено"

Якщо пікокомом називається "Access Denied", це звичайно означає, що поточний користувач не є членом групи dialout: у Linux для доступу до послідовних портів користувач повинен бути членом цієї групи.

Пробіг:

sudo usermod -aG докер $ USER

команду, вийти з системи, ввійти назад і спробувати знову підключити ESP. "Доступ відмовлено" має бути зниклим.

Будівництво мангуста

Завантажити останню версію Mongoose з тут.

Mongoose поставляється з прикладом для ESP8266 і RTOS SDK. Він розташований тут у GitHub.

Примітка. ESP8266 має дві версії SDK. Перша - не ОС, а друга - ОС ОС. У цій статті я буду використовувати останню. Щоб знайти відмінності між ними, Google або прочитайте це відповісти на офіційному форумі.

Щоб побудувати приклад, у вас є два варіанти:

  1. Використовуйте докер та готові докери
  2. Встановіть SDK та інструментарій на свій комп'ютер

Використання Docker

Це простіше, і я вірю в кращий спосіб. Докерські зображення Cesanta містять усе, що потрібно для побудови Mongoose для ESP (а не тільки Mongoose - будь-яка програма ESP). Отже, вам не потрібно інсталювати файли локально, і ви можете легко поділитися цим кодом з друзями та колегами, щоб вони могли будувати свою прошивку та отримати точно той самий результат.

Інструкція з встановлення докерів доступна тут. Спробуйте, це дуже просто, вам просто потрібно додати сховище докерів у ваш Linux і встановити його як звичайну програму з apt.

Як тільки докер встановлений, перейдіть на сторінку мангуст / приклади / ESP8266_RTOS папку і запустіть build.sh

На першому збірці docker буде завантажений потрібний образ. Це може зайняти деякий час, залежно від Вашого інтернет-каналу. Але після того, як build.sh завершено в ./bin папці, ви знайдете два файли .bin.

Це прошивка. Ти це зробив!

Використання локального SDK

Якщо docker занадто простий для вас або з будь-якої причини ви хочете використовувати локально інстальовані інструменти, ви також можете це зробити.

Це трохи складніше і нудно, але нічого занадто складного. Особливо, враховуючи те, що Cesanta побудував для вас якісь інструменти, і вам не потрібно їх будувати з джерела.

Ось як це працює:

  1. Clone ESP RTOS SDK від це репо. Приклад makefile шукає його в папці / opt / ESP8266_RTOS_SDK, таким чином, ви можете додати клонований репо до цієї папки або змінити шлях до нього перед створенням прикладу (див. Нижче).
  2. Завантажте xtensa-lx106-elf.tar.bz2 з це загальнодоступна папка
  3. Розпакуйте файл xtensa-lx106-elf.tar.bz2. Наприклад, для папки / opt:
    Судо Тар-xvf xtensa-lx106-elf.tar.bz2 -C / opt
  4. Змінити вашу змінну PATH, наприклад, якщо ви розпаковуєте toolchain в папку / opt, використовуйте таку команду:
    експорт PATH = / opt / xtensa-lx106-elf / bin: $ PATH

(також я рекомендую додати цю команду до ваших папок .bashrc або .profile, щоб зберегти зміни після перезавантаження системи)

Запустіть:

$ export SDK_PATH = / opt / ESP8266_RTOS_SDK # Введіть свій шлях до SDK тут

$ export BIN_PATH =. / bin; mkdir ./bin

$ зробити чистим; зробити BOOT = ніхто APP = 0 SPI_SPEED = 40 SPI_MODE = діоР 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.

Якщо помилок не було, ви побачите вивід, як це:

Підключення ... Стирання спалаху ... Приймав 0.58 для стирання флеш-блоку Запис 35840 байт за 0x00000000 за 1.8 секунд (157.5 кбіт / с) ... Стирання спалаху ... Приймав 2.02 для стирання флеш-блоку Запис 301056 байт за 0x00020000 в 15.4 секунд (156.7 кбіт / с) ... Стирання спалаху ... Приймав 0.11 для стирання флеш-блоку Запис 1024 байтів у 0x0007e000 в секундах 0.1 (163.5 кбіт / с) ... Залишаючи ...

Готовий! Тепер пристрій промивається з вашою прошивкою.

Перші результати

Тепер ви маєте побачити мережу Wi-Fi "Mongoose". Приклад встановлює AP. Використовуйте пароль "Mongoose" для підключення, а потім перейдіть до http: // 192.168.4.1 /, і ви побачите сторінку привітання "Hello, world".

Вітаю! Ви просто запустите веб-сервер на ESP8266!

Наступні кроки

Наступні кроки залежать від вас. Ви можете використовувати описаний приклад як відправну точку.

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

Використовуйте документи Espressif (наприклад це один), щоб навчитися правити ESP8266 WiFi модуль (а не тільки WiFi) і Mongoose документація щоб виявити особливості монгоузу.

Панки не мертві!

джерело

залишити коментар

Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляються ваші дані коментарів.