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

Сеть из модулей ESP8266. Основа IoT. Шаг №58

Всем привет. Сегодня мы с Вами продолжим тему Интернета вещей, а именно основу создания сети устройств для взаимодействия, используя модуль WiFi ESP8266, с которым мы познакомились в прошлой статье. Где рассмотрели его подключение, характеристики, команды и многое другое. Сегодня мы попробуем связать два модуля, образовав при этом небольшую сеть.

Разберем каким образом они подключаются друг к другу, принцип работы, последовательность команд. Ну и конечно же все это реализуем на небольшом примере.  На рисунке ниже приблизительная схема, которую мы попробуем реализовать. Два модуля М1 и М2, сервер и клиент. На рисунке также представлено два варианта точки доступа, первый – точка доступа непосредственно сам модуль, второй роутер. Также браузер на ПК по схеме также обращается к модулю в качестве еще одного клиента (этот пример мы разбирали в прошлой статье). Ниже модулей расписаны основные команды. Итак, поехалисеть ESP8266. Используем макетную плату из предыдущей статьи, добавим к ней еще один модуль. На рисунке ниже модель устройства.

Сеть ESP8266 and AVR

Один модуль у нас подключен к мк, который и будет управлять модулем (чему мы научились в прошлой статье), второй подключим к терминалу. В идеале конечно иметь два переходника usb-uart для наладки, но довольствуемся тем, что имеем. Итак основной принцип, заключается в том что на одном из датчиков должен крутится сервер, а остальные клиенты. Судя по описанию модуль может обслуживать пять радиоканалов, т.е. пять клиентов. Значит модуль который подключен к мк, будет клиентом, второй сервером. Скажем так, применим статические настройки. Но как Вы понимаете используя мк и динамическую настройку модуля клиент/сервер мы можем в любой момент менять топологию сети. Все зависит от полета фантазии))). Итак вернемся к нашей макетке. Рассмотрим команды (первый рисунок в статье). Первое что мы сделаем — это настроим работу модуля, а именно настроим его в совмещенном режиме т.е. как точка доступа, так и станция командой AT+CWMODE=3 (разбирали в прошлой статье). Не забудем передернуть модуль, чтоб настройка вступила в силу. Причем, настроим модуль один раз, так как команда сохраняется в памяти. Теперь нам необходимо узнать настройки для точки доступа и IP адрес следующими командами соответственно.
Значение IP-адреса:
AT+CIFSR
+CIFSR:APIP,"192.168.4.1"
+CIFSR:APMAC,"1a:fe:34:cf:45:a5"
+CIFSR:STAIP,"192.168.1.35"   По этому адресу к этому модулю будут обращаться клиенты. 
+CIFSR:STAMAC,"18:fe:34:cf:45:a5"
OK

Узнаем данные точки доступа на модуле. Также с помощью данной команды можно произвести конфигурацию: имя точки, пароль, номер канала, шифрование доступа.
AT+CWSAP?
+CWSAP:"ESP_CF45A5","«,1,0    (0 — без пароля)
OK
Все полученные данные занесем в другой модуль, который будет выступать клиентом. Теперь выполним последовательность команд, причем их придется выполнять каждый раз после сброса или включения:
AT+CIPMODE=0
AT+CIPMUX=1
AT+CIPSERVER=1   Порт не указываем по умолчанию 333.
Мы их рассмотрели в предыдущей записи. Все сервер запущен.
Все перейдем к модулю c микроконтроллером. Здесь также настроим изначально совмещенный режим и точку доступа на модуль на котором подняли сервер и порт.
AT+CWMODE=3
AT+CWJAP=»ESP_CF45A5","«
И еще одно теперь на модуле, на котором вращается сервер, можем просмотреть IP станции, подключенной к ESP8266 в режиме softAP.
AT+CWLIF
192.168.4.2,18:fe:34:d1:b9:c9
OK

Ниже измененный кусок программы, которую я выложил архивом в прошлой статье. Здесь производим настройку модуля на работу клиентом и в бесконечном цикле отправляем данные на сервер. На скриншоте ниже прием данных модулем (+IPD,0,2:22), а также передача данных по открытому радиоканалу, в данном случае 0, модулю-клиенту (AT+CIPSEND=0,3 OK > 233). Где мы можем прописать функцию приема данных с буфера RXBuffer UART из функции сравнения данных (смотри программу). Либо же читая информацию опять же из этого буфера, сравнивать с каким либо ключом и производить управление. В самом первом рисунке в начале статьи мы указали пунктирными линиями связь модулей через роутер. Здесь в данном случае меняем точку доступа на роутер. Прием данных происходит без изменений.

int main (void){
     // Init LED Port
     LED_DDR |= (1<<LED_PIN);
     LED_OFF;
     sei (); //разрешаем общее прерывание
     uart_init (RXUBRR); 
     uart_puts („AT\r\n“);
     uart_wite_for („OK“);
     delay_ms (10);
     uart_puts („AT+CWMODE=3\r\n“); //режим работы модуля
     uart_wite_for („OK“);
     delay_ms (10);
     uart_puts („AT+CIPMODE=0\r\n“); 
     uart_wite_for („OK“);
     delay_ms (10);
     uart_puts („AT+CIPMUX=1\r\n“);
     uart_wite_for („OK“);
     delay_ms (10);
     while (1) {
          uart_puts („AT+CIPSTART=0,\“TCP\»,\"192.168.1.35\",333\r\n"); /*Команда устанавливает TCP-соединение с удаленным сервером. 0 — номер канала соединения,TCP- тип соединения, IP-адрес, порт удаленной точки подключения*/
          uart_wite_for («OK»);
          delay_ms (10);
          uart_puts («AT+CIPSEND=0,2\r\n»); //отправка длины передаваемой информации
          uart_wite_for («OK»);
          delay_ms (10);
          uart_puts («22\r\n»);
          LED_ON;//включаем светодиод
          delay_ms (5000);
          LED_OFF;//выключаем
     }
}
Обмен данными esp8266И последнее, давайте + к этому повторим пример из предыдущей статьи, т.е. откроем еще один радиоканал. По запросу браузера оправим 233. На рисунке ниже прием от первого модуля, открытие еще одного канала и запрос из браузера. Отправка данных. Закрытие канала.

Обмен данными ESP8266 +браузер

 

 

 

 

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

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

Я на Google+

Сеть из модулей ESP8266. Основа IoT. Шаг №58: 10 комментариев

  1. Здравствуйте. Спасибо за полезную информацию. Было бы интересно увидеть все это реализованное в жизни, когда куча приборов общаются между собой и с выводом в веб-интерфейс.

  2. Здравствуйте.

    Мне очень интересен вариант, как можно с помощью андроида связаться с ESP8266, так как я только в самом начале этого интересного дела, меня интересует какими АТ командами , сначала сделать инициализацию ESP8266, чтобы от андроида хоть что то передалось в Termite, и если возможно таким образом переключить какой нибудь GPIO.

    Спасибо.

    • Здравствуйте. Довольно интересный вопрос. Как Вы читали я рассматривал передачу данных модулей между собой, с ПК, и самое главное через интернет. До андроида пока руки не добрались. В сетях они найдут друг-друга, передача данных я пока вижу через браузер. А если непосредственно с андроида то тут надо написать небольшую программу по считыванию потока. Либо такую же Termite только для андроида. По крайней мере я так думаю. А команды по передаче теже самые что были рассмотрены в статьях 57, 58, 59.

      • Спасибо, буду дальше вникать.

  3. 8266 позволяет значительно ускорить скорость разработки сложных систем управления за счет более быстрого перехода к работе с реальным оборудованием и использования современных средств генерации кода. Так же применение описанного модуля перспективно для организации взаимодействия датчиков и устройств в лаборатории в ходе исследований.

  4. Какие mac и ip адреса нужно вносить в модуль, который выступает в качестве клиента? (какие адреса будут при вводе на клиенте команды AT+CIFSR?)

  5. Не получается осуществить двустороннюю передачу данных. Если на одном модуле cwmode=1, а на другом — cwmode=2, то в одну сторону передается нормально. Когда на обоих модулях стоит 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