esp8266

Продолжаем тему.

ESP8266 является ответом на вопрос «я хочу чего-нибудь с Wi-Fi». Однако, есть ряд инженеров и любителей, которые не слышали об этом чипе или слышали, но на самом деле не понимают, что это такое.

ESP8266 чип — это процессор со встроенным ОЗУ, ROM, и Wi-Fi, внешняя обвязка состоит из нескольких дешевых радиодеталей. Выходит дешевле $4! Или $5, если вы хотите иметь чип на несущей плате, которая включает все нужные компоненты. Потребляемая мощность 200 мА, дальность связи около 300м без дополнительного оборудования, а с антенной и все 4 км.

Полезно узнать о том, как непосредственно программировать этот чип. Слишком много проектов используют его в качестве костыля с помощью команд AT. Читайте дальше, и узнаете, как передать «привет мир» именно с этой микросхемы.

Знай свое железо

Процессор по умолчанию работает на частоте 80 МГц, которая может доходить до 160МГц, чип имеет около 80 Кб ОЗУ DRAM, и ~35Кб высокоскоростной IRAM.

По умолчанию, когда вы покупаете эти платы, многие из них приходят с «AT» прошивкой, которая позволяет легко использовать ESP8266 в виде простого беспроводного модема, контролируемого через последовательный порт. И зачастую это всё, а для более сложных вещей почему-то используется внешний процессор, хотя 8266 тоже может немало.

Есть несколько режимов в которых ESP8266 чип может загрузиться в зависимости от конфигурации GPIO пинов. Мы обсудим запуск Flash и заливку по UART. Кроме этого, есть возможность дистанционной загрузки firmware, но об этом в другой раз.

Для двух режимов работы ESP8266, о которых мы поговорим, процессор ожидает низкий уровень GPIO15, и высокий GPIO2. GPIO0 используется для выбора режима. Во время обычной работы нужно использовать резистор для подтягивания GPIO0 вверх. Это заставит бутлоадер внутри ESP8266 считать данные из микросхемы EEPROM в IRAM и загрузить вашу программу. Если мы установим низкий уровень GPIO0, то загрузочное ПЗУ (ROM) внутри ESP8266 берет управление на себя и чип начинает общаться по UART. Используя это загрузочное ПЗУ, мы можем залить нашу программу на флэш-память.

ESP8266 поддерживает различные высокие скорости передачи данных, например, на скорости 454,800 можно вносить изменения в программу и тестировать очень быстро. Официальный инструмент для загрузки микропрограммы в чип — XTCOM, но есть и сторонние разработки, например, скрипт esptool.py позволяет автоматизировать заливку программ. Кроме того, когда этот скрипт закончит прошивать чип, даже если GPIO0 связан с низким уровнем, он запустит вашу прошивку на выполнение. Это означает, что во время разработки можно держать GPIO0 притянутым к земле.

ESP8266 setup

Итак, ваш инструмент разработчика состоит из:

  1. Переключателя или кнопки GPIO0 на землю, и с pull-up резистором к VCC
  2. GPIO2 и CH_PD соединены с VCC
  3. GPIO15 → GND
  4. Преобразователя напряжения с 5В USB-TTL UART адаптера до 3.3В для ESP8266

Инструменты для компиляции

Программирование ESP8266 является немного трудным для начала, но после того как начнете, будет полегче. Есть несколько вариантов для создания набора инструментов под Linux и OSX, а также Windows. Список инструментов выходит за рамки данной статьи и подробнее о них можно прочесть здесь: «How to build a build environment». Детальная инструкция по сборке здесь : «ESP8266 Wiki. Toolchain».

Читать ещё :   Как прошить Arduino Pro Mini

Как только вы соберете свой набор инструментов, то можете скомпилировать прошивку.

Фирма Espressif распространяет свой SDK свободно под лицензией Espressif GPL. SDK содержит примеры и заголовки для ПЗУ, а также библиотеки Espressif. Важно отметить, что есть библиотечное сообщество, но пока его код ниже уровня Espressif библиотек. Возможно, это изменится в будущем.

Фирменный компилятор Espressif просто так не раздает. Однако можно загуглить и официальный компилятор и среду разработки, основанную на Eclipse.

Просмотрите каталог «include» в SDK. Он включает в себя много интересных функций, которые помогут вам в освоении.

 

Программирование

Есть несколько моментов, которые стоит принять к сведению при программировании ESP8266.

Во-первых, есть куча функций, которые уже встроены в ROM и которые вы можете использовать. Это означает, что вам не нужно повторно реализовать, например, MD5 или HMAC, SHA1, SPI, функции UART, функции с плавающей запятой, AES, команды для работы с памятью, printf, низкоуровневые инструменты ввода-вывода, и даже планировщик событий в режиме реального времени, и, что самое главное, … 802.11 !

Полный список функций, которые находятся на чипе ПЗУ можно найти в файле eagle.rom.addr.v6.ld.

Те функции что в ПЗУ, это еще не всё API. Мы можем увидеть ряд дополнительных инструментов. ESP8266 может выступать в качестве точки доступа или клиента (или обоих вместе). По умолчанию ESP8266 имеет свой собственный уникальные AP IP и SSID. То есть при включении его «из коробки» загружается родной API, чип стартует в хост-режиме со своим собственным DHCP сервером. Вы можете найти его с помощью сканирования Wi-Fi сетей, в имени точки доступа будет строка «ESP8266».

По некоторым мнениям, прошивки с AT командами глючные. Как вариант есть NodeMcu,- эта прошивка может интерпретировать команды языка Lua. Причем не только в терминале, как AT команды, а создавать файлы во флэш-памяти ESP8266 и выполнять их.

 

Подключение ESP8266 к точке доступа в 8 строках кода

Как только ваш ESP8266 загрузится, и вам надо, чтобы он подключился к существующей WIFI сети, напишите следующий простой код:

 

Нет, на самом деле, это просто потому, что легко. Он будет просто подключаться к точке доступа WiFi, получать IP и быть там. Кроме этого, он будет помнить эту операцию и в следующий раз при загрузке быстро подключится напрямую в течение нескольких секунд.

 

TCP

А как насчет сервера TCP, который может прослушивать порт и отправлять данные? Конечно, это трудно :) Вот пример HTTP-сервера для ESP8266:

 

Читать ещё :   Раздел Arduino завершен

Как получить соединение? Вот как это делается:

 

Отправить данные — espconn_sent. Закрыть соединение — espconn_disconnect. Всякий раз, когда вы получаете данные, они передаются в recv callback.

Вы, наверное, заметили, что использована директива ICACHE_FLASH_ATTR ? Как мы помним, памяти IRAM не так много. Эта директива позволит сохранить функцию во флэш-памяти. После загрузки с flash инструкции кэшируются, но не слишком долго.

 

Работа с GPIO

Последний ключевой момент этой статьи — GPIO.

Выводы (пины) имеют дополнительные внутренние подтягивающие pull-up (GPIO0..15) и стягивающие pull-down резисторы (GPIO16). Источник. Все они могут быть сконфигурированы как входы или выходы. Есть программные функции для работы с GPIO.

Вы должны будете вызвать gpio_init(…), некоторые макросы такие, как PIN_PULLDWN_DIS(…), PIN_PULLUP_EN(…) и другие, найденные в SDK. Вы можете настроить входы/выходы с gpio_output_set. Многие из выводов GPIO могут иметь несколько функций, некоторые из этих функций включены по умолчанию, так что, например, при загрузке вы ничего не можете сделать с GPIO12 и GPIO14, пока они не будут выбраны как GPIO.

Заголовочные файлы, поставляемые с SDK очень полезны, когда вы пытаетесь выяснить, что к чему или чтобы увидеть какой-то простой способ сделать то, что вы хотите. И гугл в помощь.

 

Сообщество

Форумы esp8266.com и его русскоязычный собрат esp8266.ru полны людей, которые пытаются использовать этот компонент для удивительных вещей! Они полны людей, которые учатся друг у друга тому, как сделать большее из этой маленькой части.

Дополнительная литература