Подписаться на получение новых статей на почту:

ESP8266 и AVR. Шаг №57

Всем привет. Итак, друзья, в предыдущей статье мы немного познакомились с технологией 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.ESP 8266

Распиновка ESP 8266

 

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

 

 

 

 

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

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

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

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

 

Переходим к практике, работаем с микроконтроллером. Для начала настроим модуль на точку доступа. Проделаем ниже описанные команды один раз. При выключении настройки сохраняются.
Подключение ESP8266 к точке доступа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[5]; /*Буфер для записи данных*/
/*Инициализация диода*/
./*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[0],5,1,&block[0]);  /*Преобразуем в строку*/
           uart_puts («AT+CIPSEND=0,5\r\n»);  /* При одиночном соединении указывается только длина отправляемых байт. При множественном идентификатор и длина. Длина данных в пакете до 2048 байт. Между пакетами интервал 20мс. После получения данной команды модуль возвращает «>» и переходит в режим приема данных по RX, после приема данных необходимой длины передает их в радиоканал. При успешной передаче возвращает «SEND OK». Прервать режим приема данных и перейти в командный режим можно последовательностью «+++» */
           /*Ждем символ “>” И вводим данные. Мы здесь упускаем проверку на этот символ*/
           delay_ms (10);
           uart_puts (block);
 /*Также упускаем проверку на SEND ОК*/
           delay_ms (2000);
     }
}

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

ESP8266 и браузерИсходники:

ESP8266 and ATmega ( Скачали: 469 чел. ) 

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

Просмотрено 12080 раз.

Я на Google+

ESP8266 и AVR. Шаг №57: 10 комментариев

  1. Компилятор Atmel Studio отказывается воспринимать библиотеку uart.c. Какой комплиятор вы используете?

      • Это конечно слухи и догадки, но говорят что разработчики немного подзабили на AVR, сделав упор на ARM. В общем такие дела.

  2. Наверное, поезд ушёл. Но!

    ESP8266 использовать как костыль, а AVR — рабочей лошадкой, как-то СТРАННО и не оптимально! По идее ESP8266 сам может и должен без помощи AVR работать. Где можно найти решение этого вопроса, тыкните носом, инфы много и разная.

  3. Здраствуйте. Я вот весь день махаюсь, кучу прошивок перебрал, ну ни в какую не хочет сохранят настройки( Это мой первый опыт с этим прибором, не подскажете в чем дело?

    Спасибо.

      • Здравствуйте. Разобрался. Не знаю, почему в старых не сохраняло, а в новых мне попалось не полное описание АТ команд. Нашел в даташите оригинальное от производителя и все начало сохранять (я не то набирал, что надо)

        Спасибо, что ответили. Может кому пригодиться...

Добавить комментарий

Ваш e-mail не будет опубликован.

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Subscribe without commenting