- Что нужно помнить перед началом
- Необходимые компоненты
- Принципиальная электрическая схема
- Настройка сервера SMTP2GO для отправки электронной почты
- Программирование микроконтроллеров AVR Atmega16 и ESP8266
- Программирование ATmega16 для отправки электронной почты
- Программирование ESP8266 NodeMCU
Atmega16 - это недорогой 8-битный микроконтроллер, который поставляется с большим количеством GPIO, чем его предыдущая версия микроконтроллеров. Он имеет все обычно используемые протоколы связи, такие как UART, USART, SPI и I2C. Он имеет широкое применение в робототехнике, автомобилестроении и автоматизации благодаря широкой поддержке сообщества и простоте.
Atmega16 не поддерживает ни один из протоколов беспроводной связи, таких как Wi-Fi и Bluetooth, что ограничивает области его применения в такой области, как IoT. Чтобы преодолеть это ограничение, можно подключить другие контроллеры с беспроводными протоколами. Существует ряд контроллеров, поддерживающих беспроводные протоколы, такие как широко используемые ESP8266,
Сегодня мы будем взаимодействовать ATmega16 с ESP8266 NodeMCU, чтобы сделать его беспроводную связь через Интернет. ESP8266 NodeMCU - это широко используемый модуль WiFi с поддержкой сообщества и легкодоступными библиотеками. Также ESP8266 NodeMCU легко программируется с помощью Arduino IDE. ESP8266 может взаимодействовать с любым микроконтроллером:
В этом руководстве электронная почта будет отправлена с использованием модуля ESP8266 NodeMCU и Atmega16. Инструкции будут предоставлены Atmega16, и когда ESP8266 получит инструкции, он отправит электронное письмо выбранному получателю электронной почты. ATmega16 и ESP8266 NodeMCU будут обмениваться данными через последовательный порт UART. Хотя для взаимодействия с ATmega16 и ESP8266 NodeMCU можно использовать любой протокол связи, такой как SPI, I2C или UART.
Что нужно помнить перед началом
Обратите внимание, что микроконтроллер ATmega16 используется в этом проекте работает на 5V логического уровня, тогда как ESP8266 NodeMCU работает на 3.3V логического уровня. Логические уровни обоих микроконтроллеров различаются, что может вызвать некоторое недопонимание между Atmega16 и ESP8266 NodeMCU или также может произойти потеря данных, если не поддерживается надлежащий логический уровень.
Однако, просмотрев таблицы данных обоих микроконтроллеров, мы обнаружили, что мы можем взаимодействовать без какого-либо сдвига логического уровня, поскольку все выводы ESP8266 NodeMCU устойчивы к уровню напряжения до 6 В. Так что нормально работать с логическим уровнем 5В. Кроме того, в таблице данных Atmega16 четко указано, что уровень напряжения выше 2 В считается логическим уровнем «1», а ESP8266 NodeMCU работает на 3,3 В, это означает, что если ESP8266 NodeMCU передает 3,3 В, то Atmega16 может принять его как логический уровень «1». Таким образом, связь будет возможна без использования переключения логического уровня. Хотя вы можете использовать логический переключатель уровня от 5 до 3,3 В.
Здесь можно посмотреть все проекты, связанные с ESP8266.
Необходимые компоненты
- Модуль ESP8266 NodeMCU
- Микроконтроллер Atmega16 IC
- Кристаллический осциллятор 16 МГц
- Два конденсатора по 100 нФ
- Два конденсатора 22 пФ
- Нажать кнопку
- Перемычки
- Макетная плата
- USBASP v2.0
- Светодиод (любой цвет)
Принципиальная электрическая схема
Настройка сервера SMTP2GO для отправки электронной почты
Перед началом программирования нам понадобится SMTP-сервер для отправки почты через ESP8266. В Интернете доступно множество SMTP-серверов. Здесь smtp2go.com будет использоваться как SMTP-сервер.
Поэтому перед написанием кода потребуются имя пользователя и пароль SMTP. Чтобы получить эти два учетных данных, выполните следующие действия, которые охватывают настройку SMTP-сервера для успешной отправки электронных писем.
Шаг 1: - Нажмите «Попробовать SMTP2GO Free», чтобы зарегистрировать бесплатную учетную запись.
Шаг 2: - Появится окно, в котором вам нужно ввести некоторые учетные данные, такие как имя, идентификатор электронной почты и пароль.
Шаг 3: - После регистрации вы получите запрос на активацию на введенный адрес электронной почты. Активируйте свою учетную запись с помощью ссылки подтверждения в электронном письме, а затем войдите в систему, используя свой идентификатор электронной почты и пароль.
Шаг 4: - После входа в систему вы получите имя пользователя SMTP и пароль SMTP. Запомните или скопируйте их в свой блокнот для дальнейшего использования. После этого нажмите «Готово».
Шаг 5: - Теперь на левой панели доступа нажмите «Настройки», а затем «Пользователи». Здесь вы можете увидеть информацию о SMTP-сервере и номере ПОРТА. Обычно это так:
Кодировать имя пользователя и пароль
Теперь нам нужно изменить имя пользователя и пароль в формате с кодировкой base64 с набором символов ASCII. Для преобразования адреса электронной почты и пароля в формат с кодировкой base64 используйте веб-сайт BASE64ENCODE (https://www.base64encode.org/). Скопируйте закодированные имя пользователя и пароль для дальнейшего использования:
После завершения этих шагов приступайте к программированию ESP8266 NodeMCU и Atmega16 IC.
Программирование микроконтроллеров AVR Atmega16 и ESP8266
Программирование будет включать в себя две программы: одну для Atmega16, которая будет действовать как отправитель инструкций, а вторая для ESP8266 NodeMCU, как получателя инструкций. Обе программы приведены в конце этого руководства. Arduino IDE используется для записи ESP8266 и программатора USBasp, а Atmel Studio используется для записи Atmega16.
Одна кнопка и светодиод связаны с Atmega16, поэтому, когда мы нажимаем кнопку, Atmega16 отправляет инструкции в NodeMCU, а NodeMCU отправляет электронное письмо соответственно. Светодиод покажет статус передачи данных. Итак, приступим к программированию Atmega16, а затем ESP8266 NodeMCU.
Программирование ATmega16 для отправки электронной почты
Начните с определения рабочей частоты и включения всех необходимых библиотек. Используемая библиотека поставляется с пакетом Atmel Studio.
#define F_CPU 16000000UL #include #include
После этого необходимо определить скорость передачи для связи с ESP8266. Обратите внимание, что скорость передачи данных должна быть одинаковой для обоих контроллеров, то есть Atmega16 и NodeMCU. В этом руководстве скорость передачи составляет 9600 бод.
#define BAUD_PRESCALE ((( F_CPU / (USART_BAUDRATE * 16UL))) - 1)
Два регистра UBRRL и UBRRH будут использоваться для загрузки значений скорости передачи данных. Младшие 8 бит скорости передачи загружаются в UBRRL, а верхние 8 бит скорости передачи загружаются в UBRRH. Для простоты сделайте функцию инициализации UART, где скорость передачи будет передаваться по значению. Функция инициализации UART будет включать:
- Установка битов передачи и приема в регистре UCSRB.
- Выбор 8-битных размеров символов в регистре UCSRC.
- Загрузка младших и старших битов скорости передачи в регистры UBRRL и UBRRH.
void UART_init (long USART_BAUDRATE) { UCSRB - = (1 << RXEN) - (1 << TXEN); UCSRC - = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRL = BAUD_PRESCALE; UBRRH = (BAUD_PRESCALE >> 8); }
Следующим шагом будет настройка функции передачи символов. Этот шаг включает ожидание завершения пустого буфера и затем загрузку значения char в регистр UDR. Символ будет передан только в функции.
void UART_TxChar (char c) { while (! (UCSRA & (1 <
Вместо передачи символов создайте функцию для отправки строк, как показано ниже.
void UART_sendString (char * str) { unsigned char s = 0; в то время как (str! = 0) { UART_TxChar (str); s ++; } }
В функции main () вызовите UART_init (), чтобы начать передачу. И выполните эхо-тест, отправив тестовую строку в NodeMCU.
UART_init (9600); UART_sendString («ТЕСТ»);
Начните настройку вывода GPIO для светодиода и кнопки.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); ПОРТА - = (1 << 1);
Если кнопка не нажата, оставьте светодиод включенным, а если нажата кнопка, то начните передачу команды «SEND» на NodeMCU и выключите светодиод.
если (bit_is_clear (PINA, 1)) { ПОРТА - = (1 << 0); _delay_ms (20); } еще { ПОРТА & = ~ (1 << 0); _delay_ms (50); UART_sendString («ОТПРАВИТЬ»); _delay_ms (1200); }
Программирование ESP8266 NodeMCU
Программирование NodeMCU включает прием команды от Atmega16 и отправку электронной почты с помощью одного SMTP-сервера.
Во-первых, включите библиотеку WIFI, так как Интернет будет использоваться для отправки электронной почты. Определите свой SSID и пароль WIFI для успешного подключения. Также определите SMTP-сервер.
#включают
В функции setup () установите скорость передачи, аналогичную скорости передачи данных Atmega16, равной 9600, подключитесь к WIFI и отобразите IP-адрес.
Serial.begin (9600); Serial.print («Подключение к:»); Serial.println (ssid); WiFi.begin (ssid, пароль); в то время как (WiFi.status ()! = WL_CONNECTED) { задержка (500); Serial.print ("."); }
В петле () функции, прочитать принимающий байты на Rx штифтом и преобразовать его в виде строки.
if (Serial.available ()> 0) { while (Serial.available ()> 0 && index1 <6) { задержка (100); inChar = Serial.read (); inData = inChar; index1 ++; inData = '\ 0'; } variable.toUpperCase (); for (байт я = 0; я <6; я ++) { переменная.concat (строка (inData)); } Serial.print ("переменная ="); Serial.println (переменная); Serial.print ("indata is ="); Serial.println (inData); задержка (20); } String string = String (переменная);
Если полученная команда совпадает, отправьте электронное письмо получателю, вызвав функцию sendEmail ().
если (строка == "ОТПРАВИТЬ") { sendEmail (); Serial.print («Письмо отправлено на:»); Serial.println («Получатель»); Serial.println (""); }
Очень важно настроить SMTP-сервер, и без этого отправка писем невозможна. Также обратите внимание, что при обмене данными установите одинаковую скорость передачи для обоих контроллеров.
Таким образом, ESP8266 может быть сопряжен с микроконтроллером AVR, чтобы включить его для связи IoT. Также проверьте рабочее видео, приведенное ниже.