- Що слід пам’ятати перед початком
- Потрібні компоненти
- Кругова діаграма
- Налаштування сервера 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
- Кристалічний генератор 16 МГц
- Два конденсатори 100 нФ
- Два конденсатори 22pF
- Нажимна Кнопка
- Провід перемички
- Макет
- USBASP v2.0
- Led (будь-який колір)
Кругова діаграма
Налаштування сервера SMTP2GO для надсилання електронної пошти
Перед початком програмування нам потрібен SMTP-сервер для надсилання пошти через ESP8266. В Інтернеті доступно безліч SMTP-серверів. Тут smtp2go.com буде використовуватися як SMTP-сервер.
Тому перед написанням коду потрібно буде ввести ім’я користувача та пароль SMTP. Щоб отримати ці два облікові дані, виконайте наведені нижче дії, які стосуватимуться налаштування SMTP-сервера для успішної відправки електронних листів.
Крок 1: - Натисніть «Спробувати SMTP2GO безкоштовно», щоб зареєструватись із безкоштовним рахунком.
Крок 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); }
Наступним кроком буде налаштування функції передачі символів. Цей крок включає очікування закінчення порожнього буфера, а потім завантаження значення символу в регістр UDR. Символ буде передано лише у функції.
void UART_TxChar (char c) { while (! (UCSRA & (1 <
Замість передачі символів створіть функцію для надсилання рядків, як показано нижче.
void UART_sendString (char * str) { unsigned char s = 0; while (str! = 0) { UART_TxChar (str); s ++; } }
У функції main () зателефонуйте UART_init (), щоб розпочати передачу. І виконайте ехо-тест, надіславши рядок TEST на NodeMCU.
UART_init (9600); UART_sendString ("ТЕСТ");
Почніть налаштовувати штифт GPIO для світлодіода та кнопки.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); ПОРТА - = (1 << 1);
Якщо кнопка не натиснута, залиште світлодіод увімкненим, а якщо натиснути кнопку, тоді почніть передавати команду “SEND” на NodeMCU і вимкніть LED.
if (bit_is_clear (PINA, 1)) { PORTA - = (1 << 0); _delay_ms (20); } ще { ПОРТА & = ~ (1 << 0); _delay_ms (50); UART_sendString ("НАДІСЛАТИ"); _delay_ms (1200); }
Програмування ESP8266 NodeMCU
Програмування NodeMCU включає прийом команд від Atmega16 та надсилання електронної пошти за допомогою одного SMTP-сервера.
По-перше, включіть бібліотеку WIFI, оскільки Інтернет буде використовуватися для надсилання електронної пошти. Визначте свій WIFI ssid та пароль для успішного з’єднання. Також визначте SMTP-сервер.
#включати
У функції setup () встановіть швидкість передачі даних, подібну до швидкості передачі даних Atmega16, як 9600, і підключіться до WIFI та відображайте IP-адресу.
Serial.begin (9600); Serial.print ("Підключення до:"); Serial.println (ssid); WiFi.begin (ssid, пароль); while (WiFi.status ()! = WL_CONNECTED) { затримка (500); Serial.print ("."); }
В петлі () функції, прочитати приймає байти на Rx штифтом і перетворити його у вигляді рядка.
if (Serial.available ()> 0) { while (Serial.available ()> 0 && index1 <6) { delay (100); inChar = Serial.read (); inData = inChar; index1 ++; inData = '\ 0'; } змінної.toUpperCase (); for (байт i = 0; i <6; i ++) { variable.concat (String (inData)); } Serial.print ("змінна ="); Serial.println (змінна); Serial.print ("indata is ="); Serial.println (inData); затримка (20); } Рядок рядок = Рядок (змінна);
Якщо команда прийому відповідає, надішліть електронне повідомлення одержувачу, зателефонувавши функції sendEmail ().
if (string == "SEND") { sendEmail (); Serial.print ("Лист надіслано на адресу:"); Serial.println ("Одержувач"); Serial.println (""); }
Дуже важливо налаштувати сервер SMTP, і без цього не можна надсилати електронні листи. Також зверніть увагу, що під час зв’язку встановіть швидкість передачі, подібну для обох контролерів.
Отже, таким чином ESP8266 може бути пов’язаний з мікроконтролером AVR, щоб увімкнути його для зв’язку IoT. Також перевірте робоче відео, подане нижче.