Вай фай модули

Всем привет. Итак, друзья, в предыдущей статье мы немного познакомились с технологией IoT. Как я и, писал, начнем рассматривать модуль wi-fi ESP8266. Научимся его подключать к терминалу, микроконтроллеру AVR, общаться между подобными модулями, отправлять данные в интернет, перепрошивать , настраивать и другие тонкости. Но для начала немного рассмотрим что это и его основные характеристики.

Данный модуль является микроконтроллером с интерфейсом WiFi, SPI, UART и GPIO, производителем которого является китайская компания Espressif. Основные характеристики:
— напряжение питания 3,0….3,6 В;
— ток до 215 мА в режиме передачи и 60 – прием; Режим пониженного потребления с сохранением соединения с точкой доступа ~1 мА;
— протокол передачи IEEE 802.11 b/g/n, с поддержкой протоколов защиты WEP и WPA/WPA2;
— рабочая температура от -40 до +125 градусов по Цельсию.

Также необходимо отметить тринадцать версий модуля ESP-01…ESP-13 + WROOM и WROOM-02. Мы с Вами остановимся на рассмотрении версии ESP-01. Ниже на рисунке слева вид модуля. Где видно на плате располагается сам микроконтроллер, память, антенна, обвязка и интерфейс для подключения к модулю. На рисунке справа распиновка микроконтроллера модуля ESP8266.

Важно знать, что у контроллера нет энергонезависимой памяти. Исполнение программы ведется из внешней SPI ПЗУ путем динамической подгрузки. На сегодня большинство модулей поставляется с Flash памятью объемом 4 МБ. На рисунке выше та самая память.

Распиновку контроллера можно посмотреть в технической документации. Нас интересует только выводы на интерфейсе – 8 выводов интерфейса (Рисунок выше), 4-ри из них понятно — это питание и линии передачи информации. Остальные 4-ри имеют следующие функции:
CHIP_EN – (I)это ввод, который отвечает за режим работы чипа. High: On, chip works properly; Low: Off, small current.(пониженное потребление);
GPIO2— (I/O) UART Tx during flash programming; GPIO2. Этот вывод у нас останется не подключенным;
EXT_RSTB – (I) External reset signal (Low voltage level: Active);
GPIO0– (I/O) GPIO0; SPI_CS2

Выводы GPIO2 и EXT_RSTB у нас будут висеть. Их состояние 1. Я так понимаю они в середине подвязаны к питанию. И чтоб изменить их состояние необходимо их подключить к земле. Но нам нет надобности. Ниже схема подключения, от руки))). А также сама сборка — проводками))). Как видите у нас два источника питания. Конечно, можно и МК запустить от 3,3 В. Но пойдем таким путем. Источник на 3,3 вольта мы уже делали, когда разбирали SD-карту (статья №19). Я для экспериментов приобрел небольшой блок питания для макетной платы 5В/3.3В, только здесь друзья необходимо следить за током. Модуль такой же прожорливый как и SD-карта))). При нехватке он будет сбрасываться, зависать. Незабываем также сопрягать линии передачи данных либо стабилитронами (как у меня), либо делителем. Схему собрали. Подали питание. Скорее всего, только что приобретенный модуль отобразится в списке сети, как AI-Thinker. Это значит что наше изделие этой самой компании. На это этапе все рекомендуют поменять прошивку, я не исключение. Еще один момент! Если у Вас самодельный USB-UART, то он рассчитан на скорость до 38400bps. Изначально модуль выставлен (в большинстве случаев, зависит от прошивки) на скорости 115200 бод. В USB-UART переходнике есть вариант поменять кварц с 12 МГц на 11.0592 МГц тогда может работать на этой скорости. Я не пробовал. Так пишут. В общем идем далее. Прошиваем. По этой ссылке http://esp8266.ru/esp8266-podkluchenie-obnovlenie-proshivki/#esp8266-update-firmware можно выбрать прошивку и более подробно почитать об этом. Я выбрал AT21SDK95-2015-01-24.bin. Да будем работать с АТ — командами. Тут дело в том, что некоторых разочаровывает глючность прошивок с АТ командами, и применяют прошивку NodeMcu, где используются команды языка Lua (скриптовый язык программирования, ближе всего к JavaScript). Но мы все же будем работать с АТ))). Также есть конструктор прошивок. С более полным списком можно ознакомиться в википедии.

Так прошивка есть – необходима программа, с помощью которой зальем ее в модуль. Я выбрал XTCOM_UTIL. Подключаем выводы модуля RX TX к переходнику (usb – uart, usb ttl и др.). Отключаем вывод CHIP_EN, GPIO0 садим на 0 (я в схеме указал как контакт на землю), подключаем CHIP_EN. Все наш модуль в режиме перепрошивки флэш-памяти из UART. Запускаем XTCOM_UTIL – вкладка Tools – запускаем Config Device. Открывается окно , выбираем порт и скорость. Кнопка Open. Получаем сообщение об успешной операции. Ниже кнопку соединения, также получаем положительное сообщение. Теперь в вкладке API TEST выбираем 4-й пункт Flash Image Download. Открывается окошко, выбираем путь, где располагается прошивка и нажимаем Download – загружаем прошивку (рисунок выше, справа). Закрываем программу. Отсоединяем GPIO0, пере подключаем CHIP_EN. Все мы в рабочем режиме. Наш модуль обнаружился в списке сети как ESP_CF45A5 (Рис слева). Для начала давайте с модулем поработаем через терминал. Используйте любой на свой вкус. Я использовал Termite. Также необходимо подчеркнуть, что в каждой версии прошивки присутствует небольшое различие в АТ-командах. Поэтому смотрите доступные команды соответствующей прошивке. Итак через переходник начинаем работать с терминалом. Запускаем, выбираем в настройках порт и скорость. Посылаем проверочную команду, если модуль успешно стартовал, то отвечает «OK». Смотрим версию прошивки командой AT+GMR, получаем версию AT и SDK. Рис. слева.

Переведем модуль на скорость 9600 командой:

AT+UART=9600,8,1,0,0.

Все модуль работает. Теперь поэкспериментируем. Здесь также подчеркнем, что модуль требует окончания ввода команды двумя символами с кодами 13 и 10 , соответственно /n и /r. Поэтому если в терминале не проходят команды, то включайте возврат каретки с переводом строки (Append CR-LF). Что может модуль? Модуль может работать как TCP-сервер так и TCP-клиент, где TCP (transmission control protocol) – протокол управления передачей данных. За выбор режима wi-fi отвечает команда AT+CWMODE. После ее ввода модуль может ответить no change, поэтому после этой команды необходимо использовать ресет AT+RST, после которой сначала выдается мусор, который в свою очередь является отладочной информацией в момент запуска, а потом необходимый нам ответ ready. Рисунок слева.

Переходим к практике, работаем с микроконтроллером. Для начала настроим модуль на точку доступа. Проделаем ниже описанные команды один раз. При выключении настройки сохраняются.
AT+CWMODE=3 Здесь мы выбрали смешаный режим. Т.е. модуль может работать и как клиент (станция -1) так и точка доступа (сервер, Access Point — 2).
AT+RST — сброс модуля.
AT+CWJAP=»ssid»,»password». Вводим имя и пароль точки доступа. На рисунке слева у нас добавился клиент.

Итак давайте запустим TCP-сервер на модуле, и при запросе из браузера будем отправлять температуру. Я воспользовался внутренним генератором на 8 МГц. Для чистоты передачи данных по интерфейсу необходимо использовать внешний генератор. Ниже приведен основной кусок кода на СИ. Исходнике ниже в архиве.

#define F_CPU 8000000L
#include <stdio.h> /*Подключаем необходимые библиотеки компилятора*/
/*Здесь мы пропустили define, библиотеки, функции UART. Нас интересуют АТ-команды*/
…………………………………………
int main (void){
uint8_t block; /*Буфер для записи данных*/
/*Инициализация диода*/
./*LED_DDR |= (1<<LED_PIN); Используем диод для наладки
LED_OFF;
LED_ON;*/
sei ();
uart_init (RXUBRR); /*Инициализируем интерфейс. Передаем регистр. Кто забыл смотрим статью №40*/
uart_puts («AT\r\n»); /*Простая проверка*/
uart_wite_for («OK»); /*Ответ*/
uart_puts («AT+CIPMODE=0\r\n»); /*Режим передачи данных для сервера или клиента. У нас смешанный режим. В режиме сервера: 0 — сервер отправляет данные клиенту и принимает данные от клиента. 1 -сервер отправляет данные клиенту, но не принимает данные от клиента. В режиме клиента: 0 — клиент отправляет данные серверу и принимает данные от сервера. 1 — клиент не отправляет данные серверу, но принимает данные от сервера.*/
uart_wite_for («OK»);
uart_puts («AT+CIPMUX=1\r\n»); /*Режим одиночного или множественного соединения. Зависит от AT+CIPMODE. При 0 с модулем соединяется только один клиент. При запросе другого, в это же время, получает таймаут. При 1 соединяется до 5 клиентов.*/
uart_wite_for («OK»);
uart_puts («AT+CIPSERVER=1,88\r\n»); /*Конфигурирует и запускает сервер на модуле ESP8266. При CIPMUX=1. При подключении клиента к серверу, ему присваивается идентификатор соединения id.*/
uart_wite_for («OK»);
uart_puts («AT+CIPSTO=5\r\n»); /*Таймаут сервера, после его старта. Может быть установлен в диапазоне 0…7200 секунд.*/
uart_wite_for («OK»);
ds18b20_search (); /*Поиск датчиков*/
while (1) {
read_ds18b20 (); /*Читаем температуру*/
dtostrf (hg,5,1,&block); /*Преобразуем в строку*/
uart_puts («AT+CIPSEND=0,5\r\n»); /* При одиночном соединении указывается только длина отправляемых байт. При множественном идентификатор и длина. Длина данных в пакете до 2048 байт. Между пакетами интервал 20мс. После получения данной команды модуль возвращает «>» и переходит в режим приема данных по RX, после приема данных необходимой длины передает их в радиоканал. При успешной передаче возвращает «SEND OK». Прервать режим приема данных и перейти в командный режим можно последовательностью «+++» */
/*Ждем символ “>” И вводим данные. Мы здесь упускаем проверку на этот символ*/
delay_ms (10);
uart_puts (block);
/*Также упускаем проверку на SEND ОК*/
delay_ms (2000);
}
}

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

Исходники:

( Скачали: 547 чел. )

В следующей статье рассмотрим обмен данными между модулями ESP8266. Первый модуль у нас будет макетная плата рассмотренная в этой статье, второй — контроллер сбора данных. На этом на сегодня и остановимся. Всем пока.

Микросхема ESP8266 – один из самых популярных инструментов для организации беспроводной связи в проектах умного дома. С помощью беспроводного контроллера можно организовывать связь по интерфейсу WiFi, обеспечивая проектам Arduino выход в интернет и возможность дистанционного управления и сбора данных. На основе ESP8266 созданы такие популярные платы как WeMos и NodeMcu, а также огромное количество самодельных проектов. В этой статье, мы узнаем, что из себя представляет ESP82266, какие бывают ее разновидности, как работать с ESP8266 в среде Arduino IDE.

Описание ESP8266

ESP8266 – микроконтроллер с интерфейсом WiFi, который имеет возможность исполнять программы из флеш-памяти. Устройство было выпущено в 2014 году китайской фирмой Espressif и практически сразу же стало популярным.

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

  • Поддерживает Wi-Fi протоколы 802.11 b/g/n с WEP, WPA, WPA2;
  • Обладает 14 портами ввода и вывода, SPI, I2C, UART, 10-бит АЦП;
  • Поддерживает внешнюю память до 16 МБ;
  • Необходимое питание от 2,2 до 3,6 В, потребляемый ток до 300 мА в зависимости от выбранного режима.

Важной особенностью является отсутствие пользовательской энергонезависимой памяти на кристалле. Программа выполняется от внешней SPI ПЗУ при помощи динамической загрузки необходимых элементов программы. Доступ к внутренней периферии можно получить не из документации, а из API набора библиотек. Производителем указывается приблизительное количество ОЗУ – 50 кБ.

Особенности платы ESP8266:

  • Удобное подключение к компьютеру – через USB кабель, питание от него же;
  • Наличие встроенного преобразователя напряжения 3,3В;
  • Наличие 4 Мб флеш-памяти;
  • Встроенные кнопки для перезагрузки и перепрошивки;
  • Все порты выведены на плату на две гребенки с шагом 2,5 мм.

Сферы применения модуля ESP8266

  • Автоматизация;
  • Различные системы для умного дома: Беспроводное управление, беспроводные розетки, управление температурой, дополнение к сигнализационным системам;
  • Мобильная электроника;
  • ID метки;
  • Детские игрушки;
  • Mesh-сети.

Распиновка esp8266

Существует огромное количество разновидностей модуля ESP8266. На рисунке представлены некоторые из них. Наиболее популярным вариантом является ESP 01.

Исполнение программы требуется задавать состоянием портов GPIO0, GPIO2 и GPIO15, когда заканчивается подача питания. Можно выделить 2 важных режима – когда код исполняется из UART (GPIO0 = 0, GPIO2 = 1 и GPIO15 = 0) для перепрошивки флеш-карты и когда исполняется из внешней ПЗУ (GPIO0 = 1, GPIO2 = 1 и GPIO15 = 0) в штатном режиме.

Распиновка для ESP01 изображена на картинке.

Описание контактов:

  • 1 – земля, 8 – питание. По документации напряжение подается до 3,6 В – это важно учесть при работе с Ардуино, на которую обычно подают 5 В.
  • 6 – RST, нужна для перезагрузки микроконтроллера при подаче на него низкого логического уровня.
  • 4 – CP_PD, также используется для перевода устройства в энергосберегающий режим.
  • 7 и 0 – RXD0 и TXD0, это аппаратный UART, необходимый для перепрошивки модуля.
  • 2 – TXD0, к этому контакту подключается светодиод, который загорается при низком логическом уровне на GPIO1 и при передаче данных по UART.
  • 5 – GPIO0, порт ввода и вывода, также позволяет перевести устройство в режим программирования (при подключении порта к низкому логическому уровню и подачи напряжения) .
  • 3 – GPIO2, порт ввода и вывода.

Распиновка ESP-12

Основные отличия Ардуино от ESP8266

  • ESP8266 имеет больший объем флеш-памяти, при этом у ESP8266 отсутствует энергонезависимая память;
  • Процессор ESP8266 быстрее, чем у Ардуино;
  • Наличие Wi-Fi у ESP8266;
  • ESP8266 потребляеn больше тока, чем для Ардуино;

Программирование ESP8266 в Arduino IDE

Программный комплект разработчика esp8266 включает в себя:

  • Компилятор из пакета GNU Compiler Collection.
  • Библиотеки, стеки протоколов WiFi, TCP/IP.
  • Средство загрузки информации в программу контроллера.
  • Операционная IDE.

Изначально модули ESP8266 поставляются с прошивкой от фирмы-изготовителя. С ее помощью можно управлять модулем с внешнего микроконтроллера, реализовывать работу с Wi-Fi как с модемом. Также существует множество других готовых прошивок. Некоторые из них позволяют настраивать работу модуля при помощи WEB-интерфейса.

Можно программировать из среды Arduino IDE. При ее помощи можно легко писать скетчи и загружать их в ESP8266, прошивать ESP8266, при этом не требуется сама плата Ардуино. Arduino IDE поддерживает все виды модулей ESP8266.

В настоящий момент для ESP8266 можно реализовать следующие функции:

  • Основные функции языка Wiring. Управлять портами GPIO можно точно так же, как и пинами на плате Ардуино: pinMode, digitalRead, digitalWrite, analogWrite. Команда analogRead(А0) позволяет считать значения АЦП. При помощи команды analogWrite (pin, value) можно подключить ШИМ на нужном выходе GPIO. При value=0 ШИМ отключается, максимальное значение достигает константы, равной 1023.С помощью функций attachInterrupt, detachInterrupt можно выполнять прерывание на любом порте GPIO, кроме 16.
  • Тайминг и delay. Используя команды millis и micros можно вернуть мс и мкс, которые прошли с момента старта. Delay позволяет приостановить исполнение программы на нужное время. Также функция delay(…) позволяет поддерживать нормальную работу Wi-Fi, если в скетче присутствуют большие элементы, которые выполняются более 50 мс. Yield() – аналог функции delay(0).
  • Serial и Serial1 (UART0 и UART1). Работа Serial на ESP8266 аналогична работе на ардуино. Запись и чтение данных блокируют исполнение кода, если FIFO на 128 байт и программный буфер на 256 байт заполнены. Объект Serial пользуется аппаратным UART0, для него можно задать пины GPIO15 (TX) и GPIO13 (RX) вместо GPIO1(TX) и GPIO3(RX). Для этого после функции Serial.begin(); нужно вызвать Serial.swap();. Аналогично Serial1 использует UART1, который работает на передачу. Необходимый пин для этого GPIO2.
  • Макрос PROGMEM. Его работа аналогична работе в Ардуино. Позволяет перемещать данные read only и строковые постоянные во flash-память. При этом в ESP8266 не сохраняются одинаковые константы, что приводит к дополнительной трате флеш-памяти.
  • I2C. Перед началом работы с шиной I2C выбираются шины с помощью функции Wire.pins(int sda, int scl).
  • SPI, OneWire – поддерживаются полностью.

Использование esp8266 для связи Ардуино по WiFi

Перед подключением к Ардуино важно помнить, что у ESP8266 напряжение питания не может быть выше 3,6, в то время как на пате Ардуино напряжение равно 5 В. Соединять 2 микроконтроллера нужно с помощью резистивных делителей. Перед подключением модуля нужно ознакомиться с распиновкой выбранного ESP8266. Схема подключения для ESP8266-01 представлена на рисунке.

3,3 В с Ардуино – на Vcc&CH_PD на модуле ESP8266, Земля с Ардуино – к земле с ESP8266, 0 – TX, 1 – RX.

Для поддержки стабильной работы ESP8266 необходим источник постоянного напряжения на 3,3 В и максимальный ток 250 мА. Если питание происходит от конвертера USB-TTL, могут происходить неполадки и сбои в работе.

Работа с библиотекой Wi-Fi для ESP8266 схожа с библиотекой для обыкновенного шилда. Имеется несколько особенностей:

  • mode(m) – для выбора одного из трех режимов: клиент, точка доступа или оба режима единовременно.
  • softAP(ssid) – нужен для создания открытой точки доступа.
  • softAP(ssid, password) – создает точку доступа с паролем, который должен состоять не менее чем из 8 знаков.
  • WiFi.macAddress(mac) и WiFi.softAPmacAddress(mac)– определяет МАС адрес.
  • WiFi.localIP() и WiFi.softAPIP() – определение IP адреса.
  • printDiag(Serial); – позволят узнать данные о диагностике.
  • WiFiUDP – поддержка передачи и приема multicast пакета в режиме клиента.

Работа выполняется по следующему алгоритму:

  • Подключение USB-TTL к USB и к ESP.
  • Запуск Arduino IDE.
  • Выбрать в меню инструменты нужный порт, плату, частоту и размер flash-памяти.
  • Файл — Примеры — ESP8266WiFi — WiFiWebServer.
  • Записать в скетче SSID и пароль сети Wi-Fi.
  • Начать компиляцию и загрузку кода.
  • Дождаться окончания процесса прошивки, отсоединить GPIO0 от земли.
  • Поставить скорость 115200.
  • Произойдет подключение, будет записан адрес IP.
  • Открыть браузер, ввести в адресной строке номер IP/gpio/1
  • Посмотреть монитор порта, если к выходу GPIO2 подключен светодиод, он должен загореться.