- Những điều cần nhớ trước khi bắt đầu
- Thành phần bắt buộc
- Sơ đồ mạch
- Thiết lập Máy chủ SMTP2GO để gửi Email
- Lập trình vi điều khiển AVR Atmega16 và ESP8266
- Lập trình ATmega16 để gửi email
- Lập trình ESP8266 NodeMCU
Atmega16 là bộ vi điều khiển 8 bit chi phí thấp và đi kèm với số lượng GPIO nhiều hơn so với phiên bản vi điều khiển trước đó của nó. Nó có tất cả các giao thức truyền thông thường được sử dụng như UART, USART, SPI và I2C. Nó có các ứng dụng rộng rãi trong các ngành công nghiệp robot, ô tô và tự động hóa vì tính đơn giản và hỗ trợ cộng đồng rộng rãi.
Atmega16 không hỗ trợ bất kỳ giao thức truyền thông không dây nào như Wi-Fi và Bluetooth giới hạn các khu vực ứng dụng của nó trong miền như IoT. Để khắc phục hạn chế này, các bộ điều khiển khác có thể được giao tiếp với các giao thức không dây. Có một số bộ điều khiển hỗ trợ các giao thức không dây như ESP8266 được sử dụng rộng rãi,
Hôm nay chúng ta sẽ giao tiếp Atmega16 với ESP8266 NodeMCU để làm cho nó giao tiếp không dây thông qua internet. ESP8266 NodeMCU là mô-đun WiFi được sử dụng rộng rãi với sự hỗ trợ của cộng đồng và các thư viện có sẵn dễ dàng. Ngoài ra ESP8266 NodeMCU có thể dễ dàng lập trình với Arduino IDE. ESP8266 có thể được giao tiếp với bất kỳ bộ vi điều khiển nào:
Trong hướng dẫn này, email sẽ được gửi bằng mô-đun ESP8266 NodeMCU và Atmega16. Các hướng dẫn sẽ được đưa ra bởi Atmega16 và khi ESP8266 nhận được hướng dẫn, nó sẽ gửi một email đến người nhận email đã chọn. ATmega16 và ESP8266 NodeMCU sẽ giao tiếp qua giao tiếp nối tiếp UART. Mặc dù bất kỳ giao thức truyền thông nào cũng có thể được sử dụng để giao tiếp ATmega16 và ESP8266 NodeMCU như SPI, I2C hoặc UART.
Những điều cần nhớ trước khi bắt đầu
Lưu ý rằng vi điều khiển Atmega16 được sử dụng trong dự án này hoạt động ở mức logic 5V trong khi ESP8266 NodeMCU hoạt động trên mức logic 3,3V. Mức logic của cả hai bộ vi điều khiển là khác nhau, điều này có thể gây ra một số thông tin sai lệch giữa Atmega16 và ESP8266 NodeMCU hoặc cũng có thể mất dữ liệu nếu mức logic thích hợp không được duy trì.
Tuy nhiên, sau khi xem qua bảng dữ liệu của cả hai vi điều khiển, chúng tôi nhận thấy rằng chúng tôi có thể giao tiếp mà không có bất kỳ sự thay đổi mức logic nào vì tất cả các chân của ESP8266 NodeMCU đều có thể chịu được từ mức điện áp lên đến 6V. Vì vậy, nó là tốt để tiếp tục với mức logic 5V. Ngoài ra, biểu dữ liệu của Atmega16 nói rõ rằng mức điện áp trên 2V được coi là Mức logic '1' và ESP8266 NodeMCU chạy trên 3,3 V, có nghĩa là nếu ESP8266 NodeMCU đang truyền 3,3V thì Atmega16 có thể coi nó là mức logic '1'. Vì vậy, sẽ có thể giao tiếp mà không cần sử dụng dịch chuyển mức logic. Mặc dù bạn có thể tự do sử dụng bộ chuyển đổi mức logic từ 5 đến 3,3V.
Kiểm tra tất cả các dự án liên quan đến ESP8266 tại đây.
Thành phần bắt buộc
- Mô-đun NodeMCU ESP8266
- IC vi điều khiển Atmega16
- Bộ dao động tinh thể 16Mhz
- Hai tụ điện 100nF
- Hai tụ điện 22pF
- Nút ấn
- Dây nhảy
- Breadboard
- USBASP v2.0
- Led (Bất kỳ màu nào)
Sơ đồ mạch
Thiết lập Máy chủ SMTP2GO để gửi Email
Trước khi bắt đầu lập trình, chúng ta cần một máy chủ SMTP để gửi thư qua ESP8266. Có rất nhiều máy chủ SMTP trực tuyến. Ở đây, smtp2go.com sẽ được sử dụng làm máy chủ SMTP.
Vì vậy, trước khi viết mã, tên người dùng và mật khẩu SMTP sẽ được yêu cầu. Để có được hai thông tin đăng nhập này, hãy làm theo các bước bên dưới sẽ bao gồm việc thiết lập máy chủ SMTP để gửi email thành công.
Bước 1: - Nhấp vào “Dùng thử SMTP2GO Miễn phí” để đăng ký tài khoản miễn phí.
Bước 2: - Một cửa sổ sẽ hiện ra, bạn cần nhập một số thông tin đăng nhập như tên, id email và mật khẩu.
Bước 3: - Sau khi đăng ký, bạn sẽ nhận được yêu cầu kích hoạt trên Email đã nhập. Kích hoạt tài khoản của bạn từ liên kết xác minh trong email và sau đó đăng nhập bằng id email và mật khẩu của bạn.
Bước 4: - Sau khi đăng nhập, bạn sẽ nhận được Tên người dùng SMTP và Mật khẩu SMTP. Hãy nhớ hoặc sao chép chúng vào sổ ghi chú của bạn để sử dụng thêm. Sau khi nhấp vào 'kết thúc'.
Bước 5: - Bây giờ trên thanh truy cập bên trái, nhấp vào “Cài đặt” và sau đó vào “Người dùng”. Tại đây, bạn có thể xem thông tin liên quan đến Máy chủ SMTP và số PORT. Nó thường như sau:
Mã hóa tên người dùng và mật khẩu
Bây giờ chúng ta phải thay đổi Tên người dùng và Mật khẩu ở định dạng được mã hóa base64 với bộ ký tự ASCII. Để chuyển đổi Email và Mật khẩu ở định dạng được mã hóa base64, hãy sử dụng trang web có tên BASE64ENCODE (https://www.base64encode.org/). Sao chép tên người dùng và mật khẩu được mã hóa để sử dụng thêm:
Sau khi hoàn thành các bước này, hãy tiến hành lập trình ESP8266 NodeMCU và IC Atmega16.
Lập trình vi điều khiển AVR Atmega16 và ESP8266
Lập trình sẽ bao gồm hai chương trình, một chương trình cho Atmega16 hoạt động như người gửi lệnh và chương trình thứ hai cho ESP8266 NodeMCU hoạt động như người nhận lệnh. Cả hai chương trình được đưa ra ở cuối hướng dẫn này. Arduino IDE được sử dụng để ghi ESP8266 và bộ lập trình USBasp và Atmel Studio được sử dụng để ghi Atmega16.
Một nút nhấn và đèn LED được giao tiếp với Atmega16 để khi chúng ta nhấn nút nhấn, Atmega16 sẽ gửi hướng dẫn đến NodeMCU và NodeMCU sẽ gửi email tương ứng. Đèn LED sẽ hiển thị trạng thái truyền dữ liệu. Vì vậy, hãy bắt đầu Lập trình Atmega16 và sau đó là ESP8266 NodeMCU.
Lập trình ATmega16 để gửi email
Bắt đầu với việc xác định tần suất hoạt động và bao gồm tất cả các thư viện cần thiết. Thư viện được sử dụng đi kèm với Gói Atmel Studio.
#define F_CPU 16000000UL #include #include
Sau đó, tốc độ truyền phải được xác định để giao tiếp với ESP8266. Lưu ý rằng tốc độ truyền phải giống nhau cho cả hai bộ điều khiển tức là Atmega16 và NodeMCU. Trong hướng dẫn này, tốc độ truyền là 9600.
#define BAUD_PRESCALE ((( F_CPU / (USART_BAUDRATE * 16UL))) - 1)
Hai thanh ghi UBRRL và UBRRH sẽ được dùng để tải các giá trị tốc độ truyền. 8 bit tốc độ baud thấp hơn sẽ tải trong UBRRL và 8 bit tốc độ baud trên sẽ tải trong UBRRH. Để đơn giản, hãy tạo hàm khởi tạo UART trong đó tốc độ truyền sẽ được truyền theo giá trị. Chức năng khởi tạo UART sẽ bao gồm:
- Đặt bit Truyền và Nhận trong thanh ghi UCSRB.
- Chọn kích thước ký tự 8 bit trong thanh ghi UCSRC.
- Đang tải các bit thấp hơn và trên của tốc độ Baud trong thanh ghi UBRRL và 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); }
Bước tiếp theo sẽ là thiết lập chức năng truyền ký tự. Bước này bao gồm việc đợi bộ đệm trống kết thúc và sau đó tải giá trị char vào thanh ghi UDR. Char sẽ chỉ được chuyển trong hàm.
void UART_TxChar (char c) { while (! (UCSRA & (1 <
Thay vì chuyển các ký tự, hãy thực hiện một hàm để gửi chuỗi như bên dưới.
void UART_sendString (char * str) { unsigned char s = 0; while (str! = 0) { UART_TxChar (str); s ++; } }
Trong hàm main () , gọi UART_init () để bắt đầu truyền. Và thực hiện kiểm tra tiếng vang bằng cách gửi chuỗi TEST đến NodeMCU.
UART_init (9600); UART_sendString ("KIỂM TRA");
Bắt đầu cấu hình chân GPIO cho đèn LED và Nút nhấn.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); PORTA - = (1 << 1);
Nếu nút nhấn không được nhấn thì giữ đèn LED BẬT và nếu nhấn nút nhấn thì Bắt đầu truyền lệnh “GỬI” tới NodeMCU và làm cho đèn LED TẮT.
if (bit_is_clear (PINA, 1)) { PORTA - = (1 << 0); _delay_ms (20); } else { PORTA & = ~ (1 << 0); _delay_ms (50); UART_sendString ("GỬI"); _delay_ms (1200); }
Lập trình ESP8266 NodeMCU
Lập trình NodeMCU bao gồm nhận lệnh từ Atmega16 và Gửi email bằng một máy chủ SMTP.
Đầu tiên, hãy bao gồm thư viện WIFI vì internet sẽ được sử dụng để gửi email. Xác định ssid và mật khẩu WIFI của bạn để kết nối thành công. Cũng xác định máy chủ SMTP.
#include
Trong hàm setup () , Đặt tốc độ truyền tương tự như tốc độ truyền Atmega16 là 9600 và kết nối với WIFI và hiển thị địa chỉ IP.
Serial.begin (9600); Serial.print ("Đang kết nối với:"); Serial.println (ssid); WiFi.begin (ssid, mật khẩu); while (WiFi.status ()! = WL_CONNECTED) { delay (500); Serial.print ("."); }
Trong hàm loop () , đọc các byte nhận tại chân Rx và chuyển nó sang dạng chuỗi.
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 ("biến là ="); Serial.println (biến); Serial.print ("indata is ="); Serial.println (inData); chậm trễ (20); } Chuỗi chuỗi = String (biến);
Nếu lệnh nhận được khớp thì hãy gửi email đến người nhận bằng cách gọi hàm sendEmail ().
if (string == "SEND") { sendEmail (); Serial.print ("Thư gửi đến:"); Serial.println ("Người nhận"); Serial.println (""); }
Điều rất quan trọng là phải thiết lập máy chủ SMTP và nếu không làm điều này, không có email nào có thể được gửi. Cũng lưu ý rằng trong khi giao tiếp, hãy đặt tốc độ truyền tương tự cho cả hai bộ điều khiển.
Vì vậy, đây là cách ESP8266 có thể được giao tiếp với vi điều khiển AVR để kích hoạt nó cho truyền thông IoT. Cũng kiểm tra Video hoạt động được cung cấp bên dưới.