Подключение WiFi модуля ESP8266 к микроконтроллеру PIC16F877A


В данной статье мы рассмотрим подключение WiFi модуля ESP8266 к микроконтроллеру PIC16F877A, что позволит нашему микроконтроллеру PIC иметь доступ в сеть интернет и, соответственно, позволяет его использовать в различных проектах интернета вещей (IoT).

Внешний вид подключения WiFi модуля ESP8266 к микроконтроллеру PIC16F877A

Модуль ESP8266 поставляется с завода со встроенным в него программным обеспечением, поэтому в нашем проекте мы можем управлять его работой с использованием AT команд. Эти команды мы будем подавать на модуль ESP8266 по последовательному каналу связи, для чего задействуем модуль USART (модуль универсального синхронного/асинхронного приёмопередатчика) микроконтроллера PIC. Результаты работы проекта мы будем отображать на экране ЖК дисплея 16х2. Соответственно, для успешного понимания материала данной статьи вам необходимо знать основы работы с модулем USART в микроконтроллере PIC, подключения к микроконтроллеру PIC ЖК дисплея 16х2 и основы использования AT команд в модуле ESP8266.

Ранее на нашем сайте мы рассматривали подключение WiFi модуля ESP8266 к следующим микроконтроллерам (платам):

Необходимые компоненты

  1. Микроконтроллер PIC16F877A (купить на AliExpress).
  2. Держатель микросхем на 40 контактов (купить на AliExpress).
  3. Программатор PICkit 3 (купить на AliExpress).
  4. Кварцевый генератор 20 МГц (купить на AliExpress).
  5. Регулятор напряжения 7805 (купить на AliExpress).
  6. Регулятор напряжения LM317 (купить на AliExpress).
  7. Модуль ESP8266 (купить на AliExpress).
  8. ЖК дисплей 16х2 (купить на AliExpress).
  9. Резисторы 1 кОм, 220 Ом, 360 Ом (купить на AliExpress).
  10. Конденсаторы 1 мкФ, 0,1 мкФ, 33 пФ (купить на AliExpress).
  11. Перфорированная плата и соединительные провода.
  12. Адаптер 12V для питания микроконтроллера PIC и модуля ESP8266.

Схема проекта

Схема подключения WiFi модуля ESP8266 к микроконтроллеру PIC16F877A представлена на следующем рисунке.

Схема подключения WiFi модуля ESP8266 к микроконтроллеру PIC16F877AВ схеме используется два регулятора напряжения, один из них (7805) обеспечивает напряжением питания +5V микроконтроллер PIC и ЖК дисплей, а второй (LM317) – подает напряжение питания 3.3V на модуль ESP8266. Учтите, что модуль ESP8266 потребляет достаточно большой ток (~800mA), поэтому при проектировании схем с его использованием убедитесь что источник питания может обеспечить такой ток. Также убедитесь в том, что контакты общего провода (ground pins) микроконтроллера PIC и модуля ESP8266 соединены вместе.

Поскольку микроконтроллер PIC питается от +5V, а модуль ESP8266 – от 3.3V, то для установления между ними последовательной связи необходим преобразователь напряжения, который представляет собой не что иное, как делитель напряжения, который преобразует поступающее напряжение 5V в напряжение 3.3V на своем выходе. Он защищает чувствительный к напряжению 3.3V контакт RX модуля ESP8266 от попадания на него напряжения +5V.

Автор проекта (ссылка на оригинал приведена в конце статьи) собрал схемы с микроконтроллером PIC и модулем ESP8266 на двух отдельных перфорированных платах, что позволяет их потом использовать по отдельности в других проектах.

При желании вы можете собрать конструкцию проекта на макетной плате.

Написание программы для микроконтроллера PIC

Для передачи с микроконтроллера PIC на модуль ESP8266 AT команд через последовательный порт связи (USART) мы будем использовать специальную библиотеку. Данная библиотека сэкономит вам кучу времени по сравнению с тем, если бы вы все эти операции программировали вручную. Первоначально данная библиотека была разработана энтузиастом Camil Staps и затем улучшена авторами портала Circuit Digest. Вы можете скачать эту библиотеку по следующей ссылке.

Библиотека содержит не все известные AT команды (а их весьма много) и продолжает совершенствоваться, но для нашего проекта ее возможностей вполне хватит. Также вы самостоятельно можете добавить в эту библиотеку функции, которых вам не хватает.

Функции в библиотеке для работы с модулем ESP8266:

Initialize_ESP8266(): инициализирует последовательный порт микроконтроллера PIC для взаимодействия с модулем ESP8266. Она устанавливает скорость передачи равную 115200 бод и подготавливает контакты Rx и Tx микроконтроллера PIC для последовательной связи.

_esp8266_putch(): данная функция используется для последовательной передачи одного символа в модуль ESP8266. Например, _esp8266_putch(‘a’) передаст символ ‘a’ последовательно на модуль ESP8266.

_esp8266_getch(): данная функция используется для приема одиночного символа от модуля ESP. К примеру, если модуль ESP передает “OK” и мы используем a =_esp8266_getch(), то символ ‘o’ будет сохранен в переменной a.

ESP8266_send_string(): функция, которая позволяет передать на модуль ESP8266 строку символов. Например, функция ESP8266_send_string(“AT/r/n”) передаст соответствующую AT команду на модуль ESP8266.

esp8266_isStarted(): данная функция используется для проверки того, может ли микроконтроллер PIC взаимодействовать с модулем ESP8266. Она передает на модуль соответствующую AT команду и ждет приема ответа “OK”. Если она его принимает, то функция возвращает значение true, если не принимает – то она возвращает значение false.

esp8266_restart(): сбрасывает модуль ESP8266 и возвращает true если сброс прошел успешно. Если сброс прошел не успешно, она возвращает false.

esp8266_mode(): используется для установки режима работы модуля ESP8266. Возможны следующие режимы работы модуля:

esp8266_mode(1): Station mode (станция)
esp8266_mode(2): Soft AP mode (точка доступа)
esp8266_mode(3): Both Station and AP mode (станция и точка доступа)

esp8266_connect(): позволяет подключиться к сигналу wifi. Например, esp8266_connect(“home”,”12345678”) позволяет подключиться к WiFi сети с именем “home” и паролем ”12345678”.

esp8266_disconnect(): отключает модуль ESP8266 от любой WiFi сети, к которой вы были до этого соединены.

esp8266_ip(): определяет IP адрес модуля ESP8266 и возвращает его.

esp8266_start(): данная функция используется для начала TCP или UDP соединения. Например, esp8266_start("TCP", "192.168.101.110", 80) начнет TCP соединение по указанному IP адресу и порту 80.

esp8266_send(): используется для передачи информации сети TCP/UDP. С помощью данной команды передается HTML скрипт по IP адресу установленного соединения.

esp8266_config_softAP(): используется для настройки программной точки доступа (softAP). Например, esp8266_config_softAP(“office”,”12345678”) создаст точку доступа с именем office и паролем для доступа к ней 12345678.

esp8266_get_stationIP(): в качестве результата функция возвращает IP/MAC адреса клиентов, которые подключены к нашей точке доступа.

Пример программы

Для лучшего понимания рассмотренной библиотеки для работы с модулем ESP8266 рассмотрим небольшую программу, которая будет проверять возможность соединения между модулем ESP8266 и микроконтроллером PIC и если оно возможно, то она будет создавать WiFi точку доступа с заданными именем и паролем доступа к ней. Полный код программы приведен в конце статьи, здесь же мы рассмотрим ее небольшие фрагменты.

Перед началом ознакомления с данной программой рекомендуем прочитать статьи про подключение к микроконтроллеру PIC ЖК дисплея 16х2 и настройку в нем модуля USART (для последовательной связи).

Следующий фрагмент кода программы проверяет все ли работает нормально и показывает на экране ЖК дисплея приветственное сообщение.

Когда мы передаем команду “AT” модуль ESP8266 должен ответить нам “OK”, что будет свидетельствовать о том, что мы успешно подключились к модулю ESP8266. Если мы получили от модуля ответ “OK” мы выводим на экран ЖК дисплея сообщение “ESP is connected”.

Следующие строки кода используются для установки в модуле ESP8266 режима работы “soft AP”. Функция esp8266_mode(2) передает на модуль AT команду “AT+CWMODE=3” и ждет когда модуль ответит на нее “OK”.

SSID создаваемой нами WiFi точки доступа будет “CircuitDigest”, а пароль для доступа к ней – “619007123”. Когда WiFi точка доступа будет успешно создана мы покажем на экране ЖК дисплея сообщение "AP configured".

Моделирование работы проекта

Для моделирования работы проекта его авторы использовали симулятор Proteus. Поскольку в данном симуляторе нет библиотеки для работы с модулем ESP8266, то они моделировали работу по последовательному каналу межу микроконтроллером PIC и модулем ESP8266. Внешний вид смоделированной в Proteus схемы проекта приведен на следующем рисунке.

Внешний вид смоделированной в Proteus схемы проекта

Выходные данные проекта отображаются в окне виртуального терминала (Virtual terminal).

Тестирование работы проекта

После сборки схемы проекта в реальном "железе" и загрузки программы в микроконтроллер PIC можно приступать к тестированию его работы. Контроль результатов работы проекта можно осуществлять по информации, выводимой на экран ЖК дисплея.

После того как на ЖК дисплее появится сообщение о том, что точка доступа WiFi настроена (AP is configured) мы можем проверить ее работу с помощью смартфона или ноутбука.

Как только мы увидели в списке WiFi сетей нашу сеть это будет означать, что мы успешно подключили модуль ESP8266 к микроконтроллеру PIC и настроили его работу в качестве точки доступа.

Наша точка доступа появилась в списке WiFi сетей на смартфоне

Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.

Добавление функций в библиотеку для модуля ESP8266

Вы можете добавить собственную функцию в библиотеку для модуля ESP8266, которая будет передавать на модуль ту AT команду, которая вам нужна. Для этого вам необходимо изучить документацию на модуль ESP8266. Вы можете непосредственным образом передавать на модуль AT команду, которую вы найдете в инструкции. Но не забывайте добавлять символы “/r/n” в конце каждой AT команды. Например, вы хотите установить множественные соединения с помощью модуля ESP8266. Посмотрев документацию на модуль вы найдете что это можно сделать с помощью команды “AT+CIPMUX=1”.

Теперь вам необходимо передать эту команду “AP+CIPMUX=1” на модуль ESP8266 через последовательный порт. Это можно сделать с помощью команды

_esp8266_print("AT+CIPMUX=1\r\n"")

Это сработает, но это не самый лучший способ выполнить данную задачу. Модуль ESP8266 будет отвечать на ваши команды и в этом случае он ответит вам сообщением “OK”. Поэтому вам необходимо будет считать эти переданные модулем ESP8266 данные и убедиться в том, что модуль передал вам сообщение “OK”.

Исходный код программы

Видео, демонстрирующее работу проекта

Источник статьи

(Проголосуй первым!)
Загрузка...
146 просмотров

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

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