- 시작하기 전에 기억해야 할 사항
- 필요한 구성 요소
- 회로도
- 이메일 전송을위한 SMTP2GO 서버 설정
- AVR 마이크로 컨트롤러 Atmega16 및 ESP8266 프로그래밍
- 이메일 전송을위한 ATmega16 프로그래밍
- ESP8266 NodeMCU 프로그래밍
Atmega16은 저가의 8 비트 마이크로 컨트롤러이며 이전 버전의 마이크로 컨트롤러보다 더 많은 GPIO를 제공합니다. UART, USART, SPI 및 I2C와 같이 일반적으로 사용되는 모든 통신 프로토콜이 있습니다. 광범위한 커뮤니티 지원과 단순성으로 인해 로봇 공학, 자동차 및 자동화 산업에서 광범위하게 적용됩니다.
Atmega16은 IoT와 같은 도메인에서 응용 영역을 제한하는 Wi-Fi 및 Bluetooth와 같은 무선 통신 프로토콜을 지원하지 않습니다. 이 한계를 극복하기 위해 무선 프로토콜이있는 다른 컨트롤러를 인터페이스 할 수 있습니다. 널리 사용되는 ESP8266과 같은 무선 프로토콜을 지원하는 컨트롤러가 많이 있습니다.
오늘 우리는 Atmega16을 ESP8266 NodeMCU와 인터페이스 하여 인터넷을 통해 무선으로 통신하도록 할 것입니다. ESP8266 NodeMCU 는 커뮤니티 지원 및 쉽게 사용할 수있는 라이브러리와 함께 널리 사용되는 WiFi 모듈입니다. 또한 ESP8266 NodeMCU는 Arduino IDE로 쉽게 프로그래밍 할 수 있습니다. ESP8266은 모든 마이크로 컨트롤러와 인터페이스 할 수 있습니다.
이 자습서에서는 ESP8266 NodeMCU 모듈 및 Atmega16을 사용하여 이메일이 전송됩니다. Atmega16에서 지침을 제공하고 ESP8266이 지침을 받으면 선택한 전자 메일 수신자에게 전자 메일을 보냅니다. ATmega16 및 ESP8266 NodeMCU는 UART 직렬 통신을 통해 통신합니다. 모든 통신 프로토콜은 SPI, I2C 또는 UART와 같은 ATmega16 및 ESP8266 NodeMCU를 인터페이스하는 데 사용할 수 있습니다.
시작하기 전에 기억해야 할 사항
있습니다 ESP8266 NodeMCU는 3.3V 로직 레벨에서 작동하는 반면,이 프로젝트에 사용 ATMEGA16 마이크로 컨트롤러는 5V 로직 레벨에서 작동합니다. 두 마이크로 컨트롤러의 로직 레벨이 다르기 때문에 Atmega16과 ESP8266 NodeMCU간에 약간의 통신 오류가 발생할 수 있으며 적절한 로직 레벨이 유지되지 않으면 데이터 손실이 발생할 수도 있습니다.
그러나 두 마이크로 컨트롤러의 데이터 시트를 살펴본 후 ESP8266 NodeMCU의 모든 핀이 전압 레벨에서 최대 6V까지 허용되므로 로직 레벨 이동없이 인터페이스 할 수 있음을 발견했습니다. 따라서 5V 로직 레벨로 진행하는 것이 좋습니다. 또한 Atmega16의 데이터 시트에는 2V 이상의 전압 레벨이 로직 레벨 '1'로 간주되고 ESP8266 NodeMCU가 3.3V에서 실행된다는 것은 ESP8266 NodeMCU가 3.3V를 전송하는 경우 Atmega16이이를 로직 레벨 '1'로 간주 할 수 있음을 명시합니다. 따라서 로직 레벨 시프 팅을 사용하지 않고도 통신이 가능합니다. 로직 레벨 시프터를 5V에서 3.3V로 자유롭게 사용할 수 있습니다.
여기에서 모든 ESP8266 관련 프로젝트를 확인하십시오.
필요한 구성 요소
- ESP8266 NodeMCU 모듈
- Atmega16 마이크로 컨트롤러 IC
- 16Mhz 수정 발진기
- 2 개의 100nF 커패시터
- 2 개의 22pF 커패시터
- 누름 단추
- 점퍼 와이어
- 브레드 보드
- USBASP v2.0
- Led (모든 색상)
회로도
이메일 전송을위한 SMTP2GO 서버 설정
프로그래밍을 시작하기 전에 ESP8266을 통해 메일을 보낼 SMTP 서버가 필요합니다. 온라인에서 사용할 수있는 SMTP 서버가 많이 있습니다. 여기서 smtp2go.com은 SMTP 서버로 사용됩니다.
따라서 코드를 작성하기 전에 SMTP 사용자 이름과 비밀번호가 필요합니다. 이 두 가지 자격 증명을 얻으려면 성공적으로 이메일을 보내기위한 SMTP 서버 설정을 다루는 아래 단계를 따르십시오.
단계 1:- 무료 계정으로 등록하려면 "Try SMTP2GO Free"를 클릭하십시오.
2 단계: 이름, 이메일 ID, 비밀번호와 같은 자격 증명을 입력해야하는 창이 나타납니다.
3 단계: 가입 후 입력 한 이메일로 활성화 요청을 받게됩니다. 이메일의 확인 링크에서 계정을 활성화 한 다음 이메일 ID와 비밀번호를 사용하여 로그인하십시오.
4 단계: 로그인하면 SMTP 사용자 이름과 SMTP 비밀번호를 받게됩니다. 추후 사용을 위해이를 기억하거나 메모장에 복사하십시오. 이 후 '마침'을 클릭하십시오.
5 단계: 이제 왼쪽 액세스 표시 줄에서 "설정"을 클릭 한 다음 "사용자"를 클릭합니다. 여기에서 SMTP 서버 및 PORT 번호에 대한 정보를 볼 수 있습니다. 일반적으로 다음과 같습니다.
사용자 이름 및 비밀번호 인코딩
이제 ASCII 문자 집합을 사용하여 base64 인코딩 형식으로 사용자 이름과 암호를 변경해야합니다. 이메일 및 비밀번호를 base64 인코딩 형식으로 변환하려면 BASE64ENCODE (https://www.base64encode.org/)라는 웹 사이트를 사용하세요. 나중에 사용할 수 있도록 인코딩 된 사용자 이름과 비밀번호를 복사합니다.
이 단계를 완료 한 후 ESP8266 NodeMCU 및 Atmega16 IC의 프로그래밍을 진행합니다.
AVR 마이크로 컨트롤러 Atmega16 및 ESP8266 프로그래밍
프로그래밍에는 두 개의 프로그램이 포함됩니다. 하나는 Atmega16이 명령의 발신자 역할을하고 다른 하나는 ESP8266 NodeMCU가 명령의 수신자 역할을합니다. 두 프로그램 모두이 튜토리얼의 끝에 제공됩니다. Arduino IDE는 ESP8266 및 USBasp 프로그래머를 굽는 데 사용되며 Atmel Studio는 Atmega16을 굽는 데 사용됩니다.
하나의 푸시 버튼과 LED가 Atmega16과 인터페이스되어 푸시 버튼을 누르면 Atmega16이 NodeMCU에 명령을 보내고 NodeMCU가 그에 따라 이메일을 보냅니다. LED는 데이터 전송 상태를 표시합니다. 이제 프로그래밍 Atmega16을 시작한 다음 ESP8266 NodeMCU를 시작하겠습니다.
이메일 전송을위한 ATmega16 프로그래밍
작동 주파수를 정의하고 필요한 모든 라이브러리를 포함하여 시작하십시오. 사용 된 라이브러리는 Atmel Studio 패키지와 함께 제공됩니다.
#define F_CPU 16000000UL #include #include
그런 다음 ESP8266과 통신하기 위해 전송 속도를 정의해야 합니다. 전송 속도는 두 컨트롤러 (예: Atmega16 및 NodeMCU)에서 비슷해야합니다. 이 자습서에서 전송 속도는 9600입니다.
#BAUD_PRESCALE 정의 ((( F_CPU / (USART_BAUDRATE * 16UL)))-1)
두 레지스터 UBRRL 및 UBRRH는 전송 속도 값을로드하는 데 사용됩니다. 낮은 8 비트 전송 속도는 UBRRL에로드되고 상위 8 비트 전송 속도는 UBRRH에로드됩니다. 단순성을 위해 전송 속도가 값으로 전달되는 UART 초기화 기능을 만드십시오. UART 초기화 기능에는 다음이 포함됩니다.
- 레지스터 UCSRB에서 전송 및 수신 비트 설정.
- 레지스터 UCSRC에서 8 비트 문자 크기 선택.
- UBRRL 및 UBRRH 레지스터에서 Baud rate의 하위 및 상위 비트로드.
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 레지스터에 char 값을로드하는 단계가 포함됩니다. 문자는 함수에서만 전달됩니다.
void UART_TxChar (char c) { while (! (UCSRA & (1 <
문자를 전송하는 대신 아래와 같이 문자열을 전송하는 기능을 만드세요.
void UART_sendString (char * str) { unsigned char s = 0; while (str! = 0) { UART_TxChar (str); s ++; } }
에서는 주 () 함수 호출 UART_init ()를 전송을 시작한다. 그리고 TEST 문자열을 NodeMCU로 보내 에코 테스트를 수행 합니다.
UART_init (9600); UART_sendString ("TEST");
LED 및 푸시 버튼에 대한 GPIO 핀 구성을 시작합니다.
DDRA-= (1 << 0); DDRA & = ~ (1 << 1); PORTA-= (1 << 1);
누름 버튼을 누르지 않으면 LED를 켜진 상태로 유지하고 누름 버튼을 누르면 NodeMCU에 "SEND" 명령을 전송하고 LED를 끄십시오.
if (bit_is_clear (PINA, 1)) { PORTA- = (1 << 0); _delay_ms (20); } else { PORTA & = ~ (1 << 0); _delay_ms (50); UART_sendString ("SEND"); _delay_ms (1200); }
ESP8266 NodeMCU 프로그래밍
NodeMCU 프로그래밍에는 Atmega16에서 명령 수신 및 하나의 SMTP 서버를 사용하여 이메일 보내기가 포함됩니다.
첫째, 인터넷이 이메일을 보내는 데 사용 되므로 WIFI 라이브러리 를 포함합니다. 성공적인 연결을 위해 WIFI ssid 및 암호 를 정의하십시오. 또한 SMTP 서버를 정의하십시오.
#포함
에서 설정 () 함수를 설정 WIFI 디스플레이 IP 주소 9600 ATMEGA16 같은 전송 속도와 유사한 연결 보레이트.
Serial.begin (9600); Serial.print ("연결 대상:"); Serial.println (ssid); WiFi.begin (ssid, password); while (WiFi.status ()! = WL_CONNECTED) { delay (500); Serial.print ("."); }
에서는 루프 () 함수, 수신은 수신 핀에서 바이트 읽기 및 문자열 형태로 변환한다.
if (Serial.available ()> 0) { while (Serial.available ()> 0 && index1 <6) { delay (100); inChar = Serial.read (); inData = inChar; index1 ++; inData = '\ 0'; } variable.toUpperCase (); for (byte i = 0; i <6; i ++) { variable.concat (String (inData)); } Serial.print ("변수는 ="); Serial.println (변수); Serial.print ("indata는 ="); Serial.println (inData); 지연 (20); } 문자열 문자열 = 문자열 (변수);
수신 명령이 일치하면 sendEmail () 함수를 호출하여 수신자에게 이메일을 보냅니다.
if (string == "SEND") { sendEmail (); Serial.print ("메일 발송:"); Serial.println ("수신자"); Serial.println (""); }
SMTP 서버를 설정하는 것은 매우 중요하며 이렇게하지 않으면 이메일을 보낼 수 없습니다. 또한 통신하는 동안 두 컨트롤러에 대해 유사한 전송 속도를 설정하십시오.
그래서 이것이 ESP8266을 AVR 마이크로 컨트롤러와 인터페이스하여 IoT 통신을 가능하게하는 방법 입니다. 또한 아래 제공된 작동 비디오를 확인하십시오.