Esp 12e как передавать данные между модулями
Перейти к содержимому

Esp 12e как передавать данные между модулями

  • автор:

Вопрос Передача данных с помощью ESP-12E между датчиком и модулем управления

Имеется модуль управления (ДЭЛ-140) и датчик нагрузки (ДН130). Они связаны проводом — интерфейс связи RS485, а протокол передачи информации ModBus. Также имеются 2 модуля ESP-12E (ESP8266 Nodemcu) и 2 трансивера MAX485. Можно ли связать модуль управления и датчик по Wi-Fi с помощью еспшек? Если возможно, есть ли похожие примеры?

pvvx
Активный участник сообщества

Если возможно, есть ли похожие примеры?

Karsh
New member

К несчастью, в моём случае используется Modbus ASCII. Можно ли переделать ваш проект под ASCII или прошивку надо будет писать с нуля?

pvvx
Активный участник сообщества

К несчастью, в моём случае используется Modbus ASCII. Можно ли переделать ваш проект под ASCII или прошивку надо будет писать с нуля?

Для Modbus ASCII моя прошивка ModbusTCP не годится. Может возможно приспособить прошивку TCP2UART (попробовать), но желательно взять что-то проще и написать самому. Тут всё зависит хотите ли вы поддерживать стандарты или достаточно поддержки только каких-то частей для стыковки с уже имеющимся внешним ПО.

Karsh
New member

Для Modbus ASCII моя прошивка ModbusTCP не годится. Может возможно приспособить прошивку TCP2UART (попробовать), но желательно взять что-то проще и написать самому. Тут всё зависит хотите ли вы поддерживать стандарты или достаточно поддержки только каких-то частей для стыковки с уже имеющимся внешним ПО.

Поскольку я новичок в этом деле, можете посоветовать с чего начать изучение/написание прошивки? Или может на ардуино будет проще написать,например, на базе такой прошивки?

Занимательная электроника

Подключаем модуль ESP8266 к платам Arduino Nano, STM32f103, PSoC, TMS320, Atmega8 и PIC передаем данные по WiFi.

Страница на этапе разработки

В данном уроке мы с Вами соединим модуль ESP8266 с другими микроконтроллерами, что даст нам возможность передавать данные с любого микроконтроллера в облако. Работать мы будем с платой ESP-12:

Прошивать ее будем готовым программатором:

Единственный нюанс, необходимо проверить, есть ли в данном программаторе переход в режим программирования, если нету — Вам нужно будет самим либо вручную либо через добавленную кнопку замыкать контакт GND и GPIO0.

Так как данная плата имеет ножки UART, данные между контроллерами будем передавать именно по UART. Для этого нам нужно будет настроить в каждом микроконтроллере UART на прием и на выдачу данных.

Сначала настроим наш ESP8266 модуль на работу с WiFi и прием/передача данных по UART.

У нас уже были уроки по настройке WiFi соединения, и работе UART, по этому возьмем уже готовый код и протестируем его на соответствие, при необходимости скорректируем.

Двусторонняя передача данных между ESP8266

Двусторонняя передача данных между ESP8266

В данном руководстве мы рассмотрим организацию двусторонней передачи данных между двумя платами ESP8266 с помощью протокола ESP-NOW. Рассмотрим работу нашего проекта на примере обмена данными с датчика влажности и температуры (DHT).

title

У нас также есть и другие руководства по ESP8266:

  • Протокол ESP-NOW и ESP8266: Получение данных с нескольких плат (one-slave-multi-master);
  • ESP-NOW на ESP8266: отправка данных по схеме “one-master-multi-slave”;

Что такое ESP-NOW?

ESP-NOW – это протокол беспроводной связи от Espressif для обмена небольшими пакетами данных. Он позволяет нескольким устройствам взаимодействовать друг с другом без подключения к Wi-Fi.

Скорость обмена данными достаточно высокая, однако размер пакета ограничен 250 байтами, кроме того, протокол делает возможным как односторонний, так и двусторонний обмен данными. Последнее мы и рассмотрим в данном руководстве.

overview

Обзор проекта

overview+mac

В данном проекте используется две платы ESP8266, к каждой и которых подключен датчик влажности и температуры. Каждая плата снимает показания с соответствующих датчиков и отправляет их другой плате по протоколу ESP-NOW.

Получив данные, плата выводит их в монитор порта (хотя можно и подключить OLED-дисплей для визуализации). При отправке сообщения реализуется callback-функция, которая отображает статус отправки. Также для организации взаимодействия нам потребуются MAC-адреса плат.

В примере мы используем две платы, однако, вы можете подключить и больше.

Что нужно для проекта?

Перед началом работы убедитесь, что в среде Arduino установлена плата ESP8266. Также нам потребуется установить библиотеки для датчиков DHT.

Установка требуемых библиотек

Мы используем библиотеку Adafruit для работы с датчиками влажности и температуры. Однако, для работы с ней требуется также установить библиотеку Adafruit Unified Sensor. Для их установки выполните следующие действия:

  • Откройте менеджер библиотек (Скетч>Подключить библиотеку…>Менеджер библиотек);
  • Найдите «DHT» и установите данную библиотеку:

DHT_library

  • После установки введите в поле поиска «AdafruitUnifiedSensor», пролистайте до самого низа и установите библиотеку:

ADAfruit_library

После установки требуется перезагрузка среды Arduino.

Требуемые компоненты

Для проекта потребуются следующие детали:

    • 2 платы ESP8266;
    • 2 датчика температуры и влажности DHT22 или DHT11
    • 2 резистора на 4,7 кОм;
    • 2 макетные платы;
    • Провода DuPont.

    Получение MAC-адреса платы

    Чтобы отправлять данные через ESP-NOW, вам нужно знать MAC-адрес плат. Каждая плата имеет уникальный MAC-адрес

    Загрузите следующий код на платы:

    Знакомимся с модулем ESP8266 подробнее

    Модуль ESP8266 (ESP-07)

    ESP8266 — это микроконтроллер, разработанный в 2014 году и выпускающийся компанией Espressif Systems — китайской компанией из Шанхая. Он представляет собой сетевое решение с Wi-Fi-трансивером на борту плюс возможность выполнения записываемых в его память приложений.

    Существует множество модификаций плат, именуемых обычно от ESP-01 до ESP-12. Сейчас уже появились ещё другие наименования плат от сторонних разработчиков. Отличия в платах заключается в основном в портах ввода-вывода, количестве флеш-памяти, вида коннекторов и т.п. Процессор — один и тот же, так что с точки зрения программирования не имеет значения какую плату программировать.

    Спецификация ESP8266:

    • Напряжение питания: 3,3 В
    • Энергопотребление:10 мка. 170 мА
    • Флеш-память: до 16 мб максимум (обычно 512 кб)
    • Процессор: Tensilica L106, 32 бита
    • Скорость процессора: 80. 160 МГц
    • ОЗУ: 32 кб + 80 кб
    • Порты ввода-вывода общего назначения: 17 (мультиплексируемые с другими функциями)
    • АЦП: 1 ввод с разрешением 1024
    • Поддержка 802.11: b/g/n/d/e/i/k/r
    • Максимальное число подключений TCP: 5

    Из спецификации видно, что вопрос как долго будет работать ESP8266 от батареек не может быть легко определён. Потребление энергии изменяется в очень широком диапазоне — при передаче на полной мощности оно составляет 170 миллиампер, а в режиме сне — всего 10 микроампер!

    ESP8266 разработан так, что он может использовать подключённый к нему модуль памяти и это обычно флеш-память. Напомним, что количество циклов перезаписи в такую память составляет 10000 раз. Это вполне достаточно для случаев когда приложение записывает в память свои настройки или ведёт какой либо лог данных, но если ваше приложение записывает свои данные слишком быстро, память в скором времени перестанет работать.

    Подключение к ESP8266

    ESP8266 — это Wi-Fi устройство, значит и подключиться к нему можно через Wi-Fi, однако перед этим следует его настроить — процессор не знает названием вашей локальной сети и пароля для подключения к ней, а также других возможных настроек. Это, конечно, справедливо для случая когда мы хотим чтобы модуль подключался к нашей сети. Для случая когда сам модуль работает в режиме точки доступа, всё немного сложнее.

    Для упрощения работы с модулем на стадии программирования и отладки своего приложения можно использовать последовательный порт (UART). ESP8266 имеет специальный последовательный порт для этого — два порта, означенных Rx и Tx. Tx — служит для передачи данных, а Rx — для приёма. Этими портами модуль соединяется с соответствующими портами партёра. Наиболее удобно подключить этот порт к компьютеру посредством переходника USB-UART. При таком подключении мы может отправлять модулю команды из программы терминала прямо с клавиатуры и получать ответы от модуля в терминал или записывать программу в модуль.

    При подключении через UART следует установит одинаковую скорость портов. В процессе загрузки модуль ESP8266 пытается автоматически определить скорость подключения устройства-партнёра и установить у себя такую-же.

    У модуля ESP8266 есть также второй последовательный порт. Главное его назначение — вывод диагностической и отладочной информации. Это может быть очень полезно при проверке своей программы. Пин Tx второго последовательного порта мультиплексирован с пином GPIO2.

    Второй UART ESP8266

    Теория Wi-Fi

    Работая с устройствами стандарта Wi-Fi, желательно иметь понимание принципе его работы в беспроводной сети. На высоком уровне, Wi-Fi — это беспроводная сеть для соединений TCP/IP. Wi-Fi — это набор протоколов беспроводной сети, описанных в стандарте IEEE 802.11.

    Устройство, называемое Wireless Access Point (AP) — беспроводной точкой доступа (точкой доступа) работает как узел коммуникаций. Обычно оно подключено или работает в режиме роутера. Например, Wi-Fi роутер в вашем доме работает в таком режиме.

    Модуль ESP8266 может работать как в режиме точки доступа (Access Point), так и в режиме клиента — рабочей станции (Station), а может и в обоих режимах одновременно. Чаще всего точка доступа имеет подключение к интернету и работает как мост между устройством и интернетом. Несколько рабочих станций в локальной сети общаются между собой также через точку доступа. Станция одновременно может быть подключена только к одной точке доступа. Каждое устройство в сети имеет собственный уникальный MAC-адрес — 48-битовое значение.

    Если в пределах видимости находится несколько точек доступа, их потребуется как-то различать, поэтому у каждой точки доступа есть сетевой идентификатор, называемый SSID (Service Set Identifier, иногда также называемый BSSID) — это имя сети, имеющее длину до 32 символов.

    Режим AT-команд

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

    AT-команды

    Когда модуль подключён к терминалу компьютера, мы можем отправить самую простую команду — «AT«. В ответ на неё модуль должен отправить ответ «OK«.

    Тип Формат Описание
    Тест AT+=? Запрос параметров и диапазона возможных значений
    Запрос AT+? Запрос текущих значений параметров
    Установка AT+=

    Установка значений параметров
    Выполнение AT+

    Выполнение команд

    Все команды заканчиваются символами «\r\n».

    • 0 — режим сна выключен
    • 1 — режим неглубокого сна
    • 2 — режим модемного сна
    • ecn — защита
      • 0 — OPEN
      • 1 — WEP
      • 2 — WPA_PSK
      • 3 — WPA2_PSK
      • 4 — WPA_WPA2_PSK
      • mode
        • 0 — Soft AP
        • 1 — Station
        • 2 — Soft AP + Station
        • 0 — DHCP включен
        • 1 — DHCP выключен
        • 0 — не подключаться
        • 1 — подключаться
        • stat
          • 2 — получен IP
          • 3 — подключен
          • 4 — отключен
          • 0 — ESP8266 работает как клиент
          • 1 — ESP8266 работает как сервер
          • type — тип, TCP или UDP
          • addr — удалённый IP адрес
          • port — удалённый порт
          • local port — локальный порт
          • mode — только для UDP
          • 0 — режим одиночного подключения
          • 1 — режим множественных подключений
          • mode
            • 0 — удалить сервер (требует перезапуска)
            • 1 — создать сервер
            • 0 — нормальный режим
            • 1 — сквозной режим

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

            Модуль ESP8266 позволяет записывать собственные приложения для их запуска. Вы может скомпилировать код с языка C и загрузить в модуль. Такая процедура называется «прошивкой» (flashing). Для того, чтобы ваше приложение выполняло полезные функции, у него должна быть возможность отправлять и принимать данные по сети и/или работать с внешними датчиками, входами и выходами. ESP8266 оснащён базовыми функциями для этого, набор которых представляет собой примитивную «операционную систему». Службы этой ОС могут быть вызваны вашим приложением. Они полностью документированы и для вас будет очень полезно уметь пользоваться ими.

            Например, если вам надо подключиться к точке доступа WiFi, в API есть команда для этого. Для получения IP адреса также есть API, для получения времени с запуска модуля также есть API. Таких функций очень много и они позволяют делать с модулем очень много полезных вещей. Запомнить все функции, конечно, невозможно, но стоит знать об их существовании. В интернете можно получить последнюю информацию на сайте производителя: http://espressif.com/en/products/esp8266/ или http://bbs.espressif.com/.

            Режим загрузки

            Когда модуль ESP8266 загружается, он проверяет значения уровней на пинах MTDO (GPIO15), GPIO0 и GPIO2. Комбинация высоких и низких уровней на этих пинах позволяет получить 3-битовое число с восемью возможными значениями от 000 до 111. Каждое значение интерпретируется модулем:

            Значение Десятичное значение Пояснение
            000 0 нет данных
            001 1 Загрузка с данных по UART. Также данные для прошивки модуля.
            010 2 Быстрый старт
            011 3 Загрузка с флеш-памяти
            100 4 SDIO low speed V2
            101 5 SDIO high speed V1
            110 6 SDIO low speed V1
            111 7 SDIO high speed V2

            С практической точки зрения это значит, что если нам требуется нормальный запуск модуля, нам требуется загрузить его с флеш-памяти (значение на пинах 011), а если нам требуется перепрошить модуль, то на пинах должно быть значение 001.

            SDK ESP8266

            SDK (Software Development Kit — набор средств разработчика) для модуля ESP8266 для языка C представляет собой набор файлов, называемых заголовочными с расширениями .h. Простым языком это файлы определений типов данных и функций, которые могут потребоваться при компиляции программы. SDK ESP8266 содержит папку includes с файлами от компании Espressif для нашего модуля:

            Файл Пояснение
            at_custom.h определения собственных расширений AT команд
            c_types.h определения для языка C
            eagle_soc.h Низкоуровневые определения и макросы
            espconn.h Определения для TCP и UDP
            espnow.h Функции поддержки esp now
            ets_sys.h нет данных
            gpio.h Порты ввода-вывода
            ip_addr.h Определения для IP адреса и макросы
            mem.h Определения для работы с памятью
            os_type.h Тип ОС
            osapi.h Пользовательские заголовки с названием «user_config.h»
            ping.h Определения для ping
            pwm.h Определения для ШИМ
            queue.h Определения списков и очередей
            smartconfig.h Определения конфигурации
            sntp.h Определения SNTP
            spi_flash.h Определения для флеш-памяти
            upgrade.h Определения для обновлений
            user_interface.h Определения для ОС и WiFi.

            Компиляция

            Приложения для модуля ESP8266 пишутся обычно на языке C. Перед загрузкой программы в модуль её следует скомпилировать из текста в машинные коды.

            Редактировать текст программы удобнее всего в каком-нибудь редакторе, который имеет подсветку синтаксиса, встроенную справку и другие полезные функции, и ещё лучше — в интегрированной среде разработки (Iintegrated Development Enviroment). Работая в такой среде вы можете написать текст программы, скомпилировать её и сразу же загрузить в модуль.

            Широко известны такие среды разработки как Eclipse и Arduino IDE.

            Eclipse — очень мощная среда, разработанная компанией IBM и получившая статус открытой много лет назад. Она написана на Java, что означает возможность работы в разных ОС: Windows, Linux, OS X. К этой среде разработки можно подключать множество дополнений, а набор таких дополнений для языка C называется «C Developers Tools» (CDT). CDT не включает компилятор языка C. Его следует выбрать самому. Подробнее о компиляции приложения для ESP8266 в Eclipse будет написано в отдельной статье.

            Arduino IDE — гораздо более простая среда разработки, которая, тем не менее, позволяет писать и загружать в модуль свои приложения. Как это делать описано в нашей статье «Arduino IDE + ESP8266».

            Отладка

            При написании программы очень часто они работают не так как ожидалось. Для модуля ESP8266 отладка (получение служебной информации и состояния системы) облегчается наличием последовательного порта специально для вывода отладочной информации. Вы можете напечатать в UART1 (GPIO2) что хотите при помощи функции os_printf(). Если подключить на пину GPIO2 модуля преобразователь UART-USB, то вы сможете видеть эту информацию на экране компьютера в реальном времени. Таким образом, имея один порт UART для прошивки модуля, а второй для отладки, вам не придётся ничего переключать при создании своей программы. Включение или выключение вывода информации управляется функцией system_set_os_print().

            В следующей статье мы напишем тестовую программу — мигание светодиодом, скомпилируем её и запишем в модуль.

            Ещё наши статьи о WiFI модуле ESP8266:

            • Arduino IDE + ESP8266
            • ESP8266 + Arduino: пример скетча
            • WiFi модуль ESP8266

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *