# Кейс 3. Начало ## 3.1. Начинаем работу с Wi-Fi ### Введение Это полная копия введения, опубликованного в основной ветке курса на сайте [myitacademy.ru](https://myitacademy.ru/edu/mod/book/view.php?id=532). ESP8266 - это самая популярная и недорогая плата WiFi для начинающих. Появившись в 2014 году, она взорвала рынок своей сверх-низкой ценой и её начали встраивать абсолютно везде. Мы будем ее использовать как учебный пример модуля WiFi - это не значит, что вы будете гарантированно встраивать ее в дальнейшем в свои решения. Какой конкретно чип использовать - выбирается под задачу и ограничения. Для ESP8266 существует свой собственный SDK и ее тоже можно программировать, поскольку она представляет собой слабый микроконтроллерный модуль с небольшим количеством свободных выводов и весьма ограниченным набором периферии. Так что минимальные задачи можно выполнять и только средствами одного этого чипа. Но мы не будем погружаться в эти детали, поскольку учебная программа не предполагает изучения множества различных SDK, да это и не нужно. Ведь Wi-Fi-модуль можно использовать и как просто интерфейс связи, пользуясь его встроенными AT-командами. Сегодня мы получим необходимые начальные навыки работы с ESP8266 и посмотрим, как использовать ее в связке с внешним микроконтроллером. План всех лабораторных на эту тему: 1. Подключаемся к ESP8266 и общаемся с ней через терминал 2. Проверяем актуальность прошивки и обновляем её при необходимости 3. Соединяем ESP8266 с STM32, проверяем соединение 4. Смотрим пример WiFi под Mbed 5. Смотрим пример Sockets под Mbed ### Необходимое оборудование - Плата ~~STM32Nucleo~~ UNWR + UMDK-RF; - Модуль связи WiFi ESP8266; - ~~Переходник USB-UART;~~ - WiFi-точка доступа (роутер); - Соединительные провода (4 штуки). ### Коммуникация с ESP8266 через последовательный порт Модули связи ESP8266 в нашей лаборатории имеются на платах [WeMos D1 mini](https://docs.wemos.cc/en/latest/d1/). Нам абсолютно не важно, как будет выглядеть сама плата: последней третьей версии или предыдущей ![wemos_mini_1+1](/assets/images/iot-academy/wemos_mini_1+1.png) WeMos D1 mini построена на базе 32-разрядного микроконтроллера ESP8266 с интегрированным WiFi модулем (802.11 b/g/n 2.4 ГГц). Он входит в сборку ESP-12F, установленную на плате (в версиях v.1, v.2) или расположен непосредственно на самой плате в версии v.3. Так же на плате присутствуют стабилизатор напряжения на 3,3 В, разъем USB типа Micro-USB и USB-UART преобразователь на базе чипа CH340G. Микроконтроллер ESP8266 работает на тактовой частоте 80 МГц и обладает оперативной памятью RAM данных на 80 КБ (для хранения значений переменных) и памятью RAM инструкций на 32 КБ. Программы хранятся во flash памяти объемом 4 МБ. На плате доступно 11 цифровых GPIO и один аналоговый вход (с максимально допустимым уровнен входного напряжения 3,3 В). В принципе, все выводы на плате обозначены, но, тем не менее, приведём диаграмму их расположения, поясняющую их назначение. ![wemos_pinout](/assets/images/iot-academy/wemos_pinout.png) Скорее всего, пообщаться с микроконтроллером ESP8266 напрямую сразу не удастся. Всё дело в том, что WeMos D1 mini всё же предназначена для программирования микроконтроллера ESP8266 при помощи соответствующего SDK, и, очень вероятно, что текущая прошивка не может удовлетворить требованиям [задания 3.1.2](https://myitacademy.ru/edu/mod/book/view.php?id=532&chapterid=520). Более того, в составе платы WeMos D1 mini уже есть преобразователь USB-UART, так что дополнительно он нам не потребуется, как и не потребуются (пока) соединительные провода. ### Обновление прошивки ESP8266 Все нижеизложенное - адаптация [задания 3.1.2](https://myitacademy.ru/edu/mod/book/view.php?id=532&chapterid=521), что же есть пересказ руководства: https://os.mbed.com/teams/ESP8266/wiki/Firmware-Update Что нужно подготовить из программного обеспечения: * Самая новая версия прошивки - перейдите на [сайт](https://www.espressif.com/en/support/download/at) и скачайте её. На приведенной картинке самая новая прошивка - это 1.7.4, но к моменту, как вы будете это читать, возможно, уже выйдет новая версия ![esp8266fw_site](/assets/images/iot-academy/esp8266fw_site.png) Прошивку со словом IDF в названии лучше не трогать, хотя у нее и указана более свежая версия - она не подходит для большинства отладочных плат на основе ESP, так как в ней используются разные выводы для прошивки и для коммуникации * Программа [esptool](https://github.com/espressif/esptool) для прошивки ESP8266. В терминале установите эту программу ```bash pip3 install esptool ``` Подключите плату WeMos D1 mini к компьютеру Micro-USB кабелем, и проверьте, обнаруживается ли ваша плата. Плату WeMos D1 mini (в отличие от просто модуля ESP8266) переводить вручную в режим программирования не нужно, это произойдет автоматически. ```bash esptool.py --port /dev/ttyUSB0 --baud 115200 flash_id ``` Порт может быть другой - проверьте в `/dev/`, как именно он называется. Если всё правильно, то результат будет примерно такой: ![term-esptool_flash_id](/assets/images/iot-academy/term-esptool_flash_id.png) Распакуйте архив с прошивкой: ```bash unzip Загрузки/ESP8266_NonOS_AT_Bin_V1.7.4.zip -d ~ ``` и перейдите в каталог с компонентами прошивки ```bash cd ~/ESP8266_NonOS_AT_Bin_V1.7.4/bin ``` Убедитесь, что в вашем текущем каталоге действительно расположены файлы прошивки, то есть файлы с расширением `.bin` ```bash ls -la ``` ![term-esp8266_ls_bin](/assets/images/iot-academy/term-esp8266_ls_bin.png) Здесь немного отступление в сторону, почему мы выбираем тот или иной вариант прошивки? Во-первых, есть 2 варианта собранной прошивки: на 1Мб (урезанная, для слабых устройств) и на 2Мб. Мы выбираем второй, поскольку у нас как раз плата с 2Мб памяти. Во-вторых, там есть деление на AT-версию (то, что нужно нам), и на AT+SDIO (для использования линий ввода-вывода). Второе нам не нужно, поэтому берем вариант AT, на 2 Мб. В Readme-файле есть инструкции, какие файлы и по каким адресам загружать. Итак, выполните (просто скопируйте и вставьте в терминал): ```bash esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash --flash_size 2MB-c1 \ 0x00000 boot_v1.7.bin 0x1000 at/1024+1024/user1.2048.new.5.bin 0x1FC000 esp_init_data_default_v08.bin \ 0x7E000 blank.bin 0x1FE000 blank.bin 0x1FB000 blank.bin ``` Лог будет выглядеть как-то так: ![term-esptool_flash](/assets/images/iot-academy/term-esptool_flash.png) И завершится всё должно выдачей сообщений ``` Leaving... Hard resetting via RTS pin... ``` После чего перезагрузите плату нажатием кнопки **Reset** и посмотрите в консоли, какая там теперь версия. Введите вначале команду `AT` - в ответ получите `OK`. Если ошибетесь и введете несуществующую команду, плата выдаст ответ `ERROR`. Каждую команду завершайте следующими символами: возврат каретки (**Ctrl+M**) и перенос строки (**Ctrl+J**). Это те самые, которые в ASCII имеют коды `\n` и `\r`. Затем введите `AT+GMR` - получите информацию о плате. Для указанной в примере версии прошивки должно быть так: ![xterm_esp8266_at](/assets/images/iot-academy/xterm_esp8266_at.png) Если всё успешно, то удалите за собой "мусор": ```bash cd ~ rm -rf ESP8266_NonOS_AT_Bin_V1.7.4 rm -rf __MACOSX rm -rf Загрузки/ESP8266_NonOS_AT_Bin_V1.7.4.zip ``` ### Примеры AT-команд Проделайте работу, описанную в [основной ветке курса](https://myitacademy.ru/edu/mod/book/view.php?id=532&chapterid=522). [**^ К оглавлению**](iot/samsung/archive/2020)