- Неща, които трябва да запомните преди да започнете
- Необходими компоненти
- Електрическа схема
- Настройка на 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 са толерантни от ниво на напрежение до 6V. Така че е добре да продължите с 5V логическо ниво. Също така, лист с данни на Atmega16 ясно посочва, че нивото на напрежение над 2V се счита за логическо ниво '1' и ESP8266 NodeMCU работи на 3.3 V, това означава, че ако ESP8266 NodeMCU предава 3.3V, тогава Atmega16 може да го приеме като логическо ниво '1'. Така че комуникацията ще бъде възможна, без да се използва изместване на логическо ниво. Въпреки че можете свободно да използвате логически нивелир от 5 до 3.3V.
Вижте всички проекти, свързани с ESP8266 тук.
Необходими компоненти
- ESP8266 NodeMCU модул
- IC микроконтролер Atmega16
- 16Mhz кристален осцилатор
- Два кондензатора 100nF
- Два кондензатора 22pF
- Натисни бутона
- Джъмперни проводници
- Макет
- USBASP v2.0
- LED (всеки цвят)
Електрическа схема
Настройка на SMTP2GO сървър за изпращане на имейл
Преди да започнем програмирането, се нуждаем от SMTP сървър за изпращане на поща чрез ESP8266. Има много SMTP сървъри, достъпни онлайн. Тук smtp2go.com ще се използва като SMTP сървър.
Така че, преди да напишете код, SMTP потребителско име и парола ще бъдат необходими. За да получите тези две идентификационни данни, следвайте стъпките по-долу, които ще обхващат настройката на SMTP сървър за успешно изпращане на имейли.
Стъпка 1: - Щракнете върху „Опитайте SMTP2GO безплатно“, за да се регистрирате с безплатен акаунт.
Стъпка 2: - Ще се появи прозорец, където трябва да въведете някои идентификационни данни като име, имейл адрес и парола.
Стъпка 3: - След като се регистрирате, ще получите заявка за активиране на въведения имейл. Активирайте акаунта си от връзката за потвърждение в имейл и след това влезте, използвайки вашия имейл адрес и парола.
Стъпка 4: - След като влезете, ще получите вашето SMTP потребителско име и SMTP парола. Запомнете или копирайте тези в бележника си за по-нататъшна употреба. След това кликнете върху „завърши“.
Стъпка 5: - Сега в лявата лента за достъп кликнете върху „Настройки“ и след това върху „Потребители“. Тук можете да видите информацията относно SMTP сървъра и номера на PORT. Обикновено е както следва:
Кодирайте потребителско име и парола
Сега трябва да сменим потребителското име и паролата във формат, кодиран в 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 Package.
#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) { неподписан char s = 0; докато (str! = 0) { UART_TxChar (str); s ++; } }
Във функцията main () извикайте UART_init (), за да стартирате предаването. И направете ехо тест, като изпратите TEST низ до NodeMCU.
UART_init (9600); UART_sendString ("TEST");
Започнете да конфигурирате GPIO щифт за LED и бутон.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); ПОРТА - = (1 << 1);
Ако бутонът не е натиснат, оставете светодиода ВКЛЮЧЕН и ако натиснете бутона, започнете да предавате командата „SEND“ на NodeMCU и изключете LED.
if (bit_is_clear (PINA, 1)) { PORTA - = (1 << 0); _delay_ms (20); } else { PORTA & = ~ (1 << 0); _delay_ms (50); UART_sendString ("ИЗПРАТИ"); _delay_ms (1200); }
Програмиране на ESP8266 NodeMCU
Програмирането на NodeMCU включва получаване на команда от Atmega16 и изпращане на имейл с помощта на един SMTP сървър.
Първо, включете WIFI библиотеката, тъй като интернет ще се използва за изпращане на имейл. Дефинирайте вашия WIFI ssid и парола за успешна връзка. Също така дефинирайте SMTP сървъра.
#include
В функцията setup () задайте скорост на предаване, подобна на скоростта на предаване Atmega16, като 9600 и се свържете с WIFI и покажете IP адрес.
Serial.begin (9600); Serial.print ("Свързване към:"); Serial.println (ssid); WiFi.begin (ssid, парола); докато (WiFi.status ()! = WL_CONNECTED) { закъснение (500); Serial.print ("."); }
Във функция loop () прочетете приемащите байтове на Rx pin и го конвертирайте в низова форма.
if (Serial.available ()> 0) { while (Serial.available ()> 0 && index1 <6) { delay (100); inChar = Serial.read (); inData = inChar; индекс1 ++; inData = '\ 0'; } променлива.toUpperCase (); за (байт i = 0; i <6; i ++) { променлива.concat (String (inData)); } Serial.print ("променливата е ="); Serial.println (променлива); Serial.print ("indata is ="); Serial.println (inData); забавяне (20); } String низ = String (променлива);
Ако командата за получаване съвпада, изпратете имейл до получателя, като извикате функцията sendEmail ().
if (string == "SEND") { sendEmail (); Serial.print („Поща, изпратена до:“); Serial.println ("Получателят"); Serial.println (""); }
Много е важно да настроите SMTP сървър и без да правите това, не могат да се изпращат имейли. Също така имайте предвид, че докато комуникирате, задайте скорост на предаване, подобна и за двата контролера.
Така че по този начин ESP8266 може да бъде свързан с AVR микроконтролер, за да го активира за IoT комуникации. Също така проверете работното видео, дадено по-долу.