Передача Email с использованием микроконтроллера AVR ATmega16 и ESP8266


ATmega16 (семейство AVR) является дешевым 8 битным микроконтроллером и имеет достаточно большое число интерфейсов ввода-вывода общего назначения. Он поддерживает все часто используемые в настоящее время протоколы связи такие как UART, USART, SPI и I2C. Он достаточно широко применяется в робототехнике, автомобилестроении и автоматизированных производствах из-за своей простоты и универсальности.

Подключение ESP8266 к микроконтроллеру AVR ATmega16: внешний вид

Но, к сожалению, ATmega16 не поддерживает никакие беспроводные протоколы связи, такие как, например, Wi-Fi и Bluetooth. Это обстоятельство существенно ограничивает его применение в такой сфере как интернет вещей (IoT), которая считается очень перспективной в современных реалиях. Чтобы преодолеть это ограничение к микроконтроллеру ATmega16 необходимо подключить устройство, которое поддерживало бы беспроводные протоколы связи. Таких устройств сейчас существует много, но одним из наиболее широко используемых является ESP8266.

В этой статье мы рассмотрим подключение микроконтроллера AVR ATmega16 к устройству управления многосторонней связью (NodeMCU) ESP8266 чтобы при помощи беспроводной связи, обеспечиваемой данным устройством, получить доступ в интернет. ESP8266 представляет собой WiFi модуль с поддержкой различных протоколов связи и множеством доступных библиотек.

Мы рассмотрим передачу email (электронной почты) с использованием ESP8266 и микроконтроллера ATmega16. ATmega16 будет давать команды ESP8266, которое будет пересылать email выбранному корреспонденту. ATmega16 и ESP8266 будут взаимодействовать через универсальный асинхронный приемопередатчик (UART), хотя можно использовать и другие доступные ATmega16 протоколы связи, такие как SPI и I2C.

Некоторые особенности поставленной задачи

Необходимо помнить о том, что микроконтроллер ATmega16 работает от напряжения 5В, а микросхема ESP8266 – от напряжения 3.3В. То есть логические уровни между этими двумя устройствами отличаются, что может вызвать "недопонимание" между ними и даже потерю данных если необходимые логические уровни не будут поддерживаться.

Но, тем не менее, если внимательно изучить технические характеристики (datasheet) микросхемы ESP8266, можно обнаружить что она терпимо (толерантно) относится к напряжению до 6В на своих контактах, поэтому ESP8266 сможет "понимать" логический уровень напряжения 5В. Также в даташите на ATmega16 указано, что уровень напряжения больший 2В он воспринимает как логическую единицу и, поскольку, ESP8266 оперирует напряжением 3.3В, то сигнал такого уровня будет восприниматься микроконтроллером как логическая "1". Поэтому взаимосвязь между этими устройствами можно организовать без переключения логических уровней напряжения.

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

  1. Микроконтроллер ATmega16 (купить на AliExpress).
  2. Программатор AVR-ISP (купить на AliExpress), USBASP (купить на AliExpress) или другой подобный.
  3. Устройство управления многосторонней связью (NodeMCU) ESP8266 (купить на AliExpress).
  4. Кварцевый генератор на 16 МГц (купить на AliExpress).
  5. Конденсатор 100 нФ (2 шт.) (купить на AliExpress).
  6. Конденсатор 22 пФ (2 шт.) (купить на AliExpress).
  7. Светодиод (купить на AliExpress).
  8. Кнопка.
  9. Макетная плата.
  10. Соединительные провода.
  11. Источник питания с напряжением 5 Вольт.

Схема подключения ESP8266 к микроконтроллеру ATmega16

Схема устройства приведена на следующем рисунке.

Схема подключения ESP8266 к микроконтроллеру ATmega16

Конфигурирование SMTP2GO сервера для передачи Email

Перед тем как начать программировать микроконтроллер нам нужно сконфигурировать SMTP сервер чтобы осуществлять передачу Email (электронной почты) при помощи ESP8266. Для выполнения этой задачи можно использовать сайт smtp2go.com.

Для начала нам будет необходимо имя пользователя и пароль для SMTP. Для их получения выполните следующие шаги:

Шаг 1: Кликните на “Try SMTP2GO Free” чтобы зарегистрировать бесплатный аккаунт.

Главная страница сайта smtp2go.com

Шаг 2. Откроется окно, в котором вы должны будете ввести имя, email и пароль.

Страница регистрации на сайте smtp2go.com

Шаг 3. После заполнения всех этих полей и нажатия кнопки "sign up" вам на указанную электронную почту придет запрос на активацию вашего аккаунта. Кликните на полученную ссылку для активации вашего аккаунта и затем войдите на smtp2go.com используя ваш email и пароль.

Шаг 4. После того как вы войдете на сайт со своими учетными данными сразу же после этого вам будет предоставлен ваш SMTP Username (имя пользователя) и ваш SMTP Password (пароль). Запомните или запишите где-нибудь эти данные. После этого нажмите на ‘finish’.

Установка имени пользователя и пароля

Шаг 5. Затем в левом меню кликните сначала на “Settings”, а потом на “Users”. В этих разделах вы можете посмотреть информацию про ваш SMTP Server и номер порта (PORT number). К примеру, как показано на следующем рисунке.

Страница настроек SMTP сервера

После этого необходимо декодировать имя пользователя (Email) и пароль из формата ASCII в формат base64. Для этой цели можно использовать сайт BASE64ENCODE. Конвертированные имя пользователя и пароль сохраните чтобы можно было ими пользоваться в дальнейшем.

Главная страница сайта https://www.base64encode.org/

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

Программирование микроконтроллера AVR ATmega16 и ESP8266

Необходимы будут две программы: одна для ATmega16, который будет действовать как передатчик команд, и вторая для ESP8266, который будет работать как приемник команд. Обе программы приведены в конце данной статьи. Для загрузки программы в ATmega16 можно использовать программатор USBasp, а для загрузки программы в модуль ESP8266 - Arduino IDE.

Также к микроконтроллеру ATmega16 подключим одну кнопку – при ее нажатии микроконтроллер передает команды в ESP8266, а ESP8266 в соответствии с ними осуществляет передачу электронной почты. Светодиод будет показывать статус (состояние) процесса передачи данных.

Исходный код программы для ATmega16 с пояснениями

Начнем с задания тактовой частоты микроконтроллера и подключения всех необходимых библиотек. Все используемые библиотеки находятся в Atmel Studio Package.

После этого необходимо определиться с бодовой скоростью передачи последовательного порта, который мы будем использовать для связи микроконтроллера с ESP8266. Эта скорость будет одинаковой и для ATmega16, и для ESP8266. Выберем скорость передачи равную 9600 бод/с.

Регистры UBRRL и UBRRH будут использоваться для загрузки значения скорости передачи. Нижние 8 бит скорости передачи будут загружаться в UBRRL, а верхние 8 бит – в UBRRH. Для упрощения нашей задачи запрограммируем функцию для инициализации универсального асинхронного последовательного приемопередатчика (UART), в которой входным параметром будет требуемая скорость передачи. Эта функция будет включать:

  1. Установку битов приема и передачи в регистре UCSRB.
  2. Выбор 8-битного размера символа в регистре UCSRC.
  3. Загрузка нижних и верхних бит бодовой скорости в регистры UBRRL и UBRRH.

Далее запрограммируем функцию, которая будет отвечать за передачу одного символа. Данная функция будет ждать до тех пор, пока буфер не будет чист, а затем будет загружать значение символа в регистр UDR.

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

В главной функции main() сделаем вызов UART_init() чтобы начать передачу, а также сделаем эхотест (echo test) при помощи передачи строки "TEST" на модуль ESP8266.

Начнем конфигурирование контактов ввода-вывода общего назначения для светодиода и кнопки.

Если кнопка не нажата оставляем светодиод во включенном состоянии. Если кнопка нажата, то начинаем передачу данных (передаем команду “SEND”) на модуль ESP8266 и выключаем светодиод.

Исходный код программы для модуля беспроводной связи ESP8266

Программирование модуля ESP8266 будет заключаться в приеме команд от микроконтроллера Atmega16 и передачи Email используя полученный нами SMTP сервер.

Сначала подключим библиотеку WiFi чтобы у нас был доступ к интернету для передачи электронной почты. Определите ваш WiFi идентификатор (ssid) и пароль для осуществления успешного соединения с интернетом. Также определите ваш SMTP сервер.

В функции setup() задайте бодовую скорость передачи 9600 бод/с (такую же как и у Atmega16), произведите соединение с WiFi и отобразите IP адрес.

В функции loop() прочтите принятые байты с контакта Rx и конвертируйте их в строку.

Если принимаемая команда опознана, то выполните передачу email адресату при помощи вызова функции sendEmail().

Результат передачи тестового Email

Необходимо отметить, что очень важно сконфигурировать SMTP сервер потому что без этого шага email не будет отправляться. Также необходимо установить одинаковые скорости передачи данных для микроконтроллера Atmega16 и модуля ESP8266.

Если вы успешно осуществите все действия, которые описаны в данной статье, то вы сможете успешно интегрировать микроконтроллер AVR в любой проект, связанный с интернетом вещей (IoT).

Полный текст программы

Для модуля беспроводной связи ESP8266

В представленном коде программы там, где вы видите последовательность симоволов "// ********************", необходимо изменить значения переменных на свои данные: имя пользователя, пароль, email и т.д.

Для микроконтроллера ATmega16

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

(1 голосов, оценка: 5,00 из 5)
Загрузка...
3 055 просмотров

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

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