- O czym należy pamiętać przed rozpoczęciem
- Wymagane składniki
- Schemat obwodu
- Konfiguracja serwera SMTP2GO do wysyłania wiadomości e-mail
- Programowanie mikrokontrolera AVR Atmega16 i ESP8266
- Programowanie ATmega16 do wysyłania wiadomości e-mail
- Programowanie ESP8266 NodeMCU
Atmega16 to niedrogi 8-bitowy mikrokontroler, wyposażony w większą liczbę GPIO niż jego poprzednia wersja mikrokontrolerów. Posiada wszystkie powszechnie używane protokoły komunikacyjne, takie jak UART, USART, SPI i I2C. Ma szerokie zastosowanie w robotyce, przemyśle samochodowym i automatyzacji ze względu na szerokie wsparcie społeczności i prostotę.
Atmega16 nie obsługuje żadnego z protokołów komunikacji bezprzewodowej, takich jak Wi-Fi i Bluetooth, co ogranicza obszary zastosowań w domenie, takiej jak IoT. Aby przezwyciężyć to ograniczenie, można podłączyć inne kontrolery, które obsługują protokoły bezprzewodowe. Istnieje wiele kontrolerów obsługujących protokoły bezprzewodowe, takie jak szeroko stosowany ESP8266,
Dziś będziemy współpracować ATmega16 z ESP8266 NodeMCU aby komunikować się bezprzewodowo za pośrednictwem Internetu. ESP8266 NodeMCU to szeroko stosowany moduł WiFi z obsługą społeczności i łatwo dostępnymi bibliotekami. Również ESP8266 NodeMCU można łatwo programować za pomocą Arduino IDE. ESP8266 może współpracować z dowolnym mikrokontrolerem:
W tym samouczku wiadomość e-mail zostanie wysłana za pomocą modułu ESP8266 NodeMCU i Atmega16. Instrukcje zostaną przekazane przez Atmega16, a gdy ESP8266 otrzyma instrukcje, wyśle wiadomość e-mail do wybranego odbiorcy wiadomości e-mail. ATmega16 i ESP8266 NodeMCU będą komunikować się za pośrednictwem komunikacji szeregowej UART. Chociaż do interfejsu ATmega16 i ESP8266 NodeMCU można użyć dowolnego protokołu komunikacyjnego, takiego jak SPI, I2C lub UART.
O czym należy pamiętać przed rozpoczęciem
Zwróć uwagę, że mikrokontroler Atmega16 zastosowany w tym projekcie działa na poziomie logicznym 5V, podczas gdy ESP8266 NodeMCU działa na poziomie logicznym 3,3V. Poziomy logiczne obu mikrokontrolerów są różne, co może powodować pewne nieporozumienia między NodeMCU Atmega16 i ESP8266 lub może również wystąpić utrata danych, jeśli nie zostanie utrzymany odpowiedni poziom logiczny.
Jednak po przejrzeniu arkuszy danych obu mikrokontrolerów stwierdziliśmy, że możemy współpracować bez przesunięcia poziomu logicznego, ponieważ wszystkie piny NodeMCU ESP8266 są tolerancyjne od poziomu napięcia do 6 V. Więc dobrze jest iść naprzód z poziomem logicznym 5V. Ponadto arkusz danych Atmega16 wyraźnie stwierdza, że poziom napięcia powyżej 2 V jest uważany za poziom logiczny `` 1 '', a NodeMCU ESP8266 działa na 3,3 V, co oznacza, że jeśli ESP8266 NodeMCU przesyła 3,3 V, Atmega16 może przyjąć to jako poziom logiczny `` 1 ''. Tak więc komunikacja będzie możliwa bez użycia przesunięcia poziomów logicznych. Chociaż możesz swobodnie używać przełącznika poziomu logicznego od 5 do 3,3 V.
Sprawdź wszystkie projekty związane z ESP8266 tutaj.
Wymagane składniki
- Moduł NodeMCU ESP8266
- Układ scalony mikrokontrolera Atmega16
- Oscylator kwarcowy 16 MHz
- Dwa kondensatory 100nF
- Dwa kondensatory 22pF
- Naciśnij przycisk
- Przewody połączeniowe
- Płytka prototypowa
- USBASP v2.0
- Led (dowolny kolor)
Schemat obwodu
Konfiguracja serwera SMTP2GO do wysyłania wiadomości e-mail
Przed przystąpieniem do programowania potrzebujemy serwera SMTP do wysyłania poczty przez ESP8266. W Internecie dostępnych jest wiele serwerów SMTP. Tutaj smtp2go.com będzie używany jako serwer SMTP.
Dlatego przed napisaniem kodu wymagana będzie nazwa użytkownika i hasło SMTP. Aby uzyskać te dwa poświadczenia, wykonaj poniższe kroki, które obejmują konfigurację serwera SMTP do pomyślnego wysyłania wiadomości e-mail.
Krok 1: - Kliknij „Wypróbuj SMTP2GO Free”, aby zarejestrować darmowe konto.
Krok 2: - Pojawi się okno, w którym należy wprowadzić dane uwierzytelniające, takie jak imię i nazwisko, identyfikator e-mail i hasło.
Krok 3: - Po rejestracji na podany adres e-mail otrzymasz żądanie aktywacji. Aktywuj swoje konto za pomocą linku weryfikacyjnego w wiadomości e-mail, a następnie zaloguj się, używając swojego identyfikatora e-mail i hasła.
Krok 4: - Po zalogowaniu otrzymasz nazwę użytkownika SMTP i hasło SMTP. Zapamiętaj lub skopiuj je do swojego notatnika w celu dalszego wykorzystania. Następnie kliknij „Zakończ”.
Krok 5: - Teraz na lewym pasku dostępu kliknij „Ustawienia”, a następnie „Użytkownicy”. Tutaj możesz zobaczyć informacje dotyczące serwera SMTP i numeru PORTU. Zwykle wygląda to następująco:
Zakoduj nazwę użytkownika i hasło
Teraz musimy zmienić nazwę użytkownika i hasło w formacie zakodowanym w base64 z zestawem znaków ASCII. Aby przekonwertować adres e-mail i hasło w formacie zakodowanym w formacie base64, użyj witryny internetowej o nazwie BASE64ENCODE (https://www.base64encode.org/). Skopiuj zakodowaną nazwę użytkownika i hasło do dalszego użytku:
Po zakończeniu tych kroków przejdź do programowania ESP8266 NodeMCU i Atmega16 IC.
Programowanie mikrokontrolera AVR Atmega16 i ESP8266
Programowanie obejmie dwa programy, jeden dla Atmega16, który będzie pełnił rolę nadawcy instrukcji, a drugi dla NodeMCU ESP8266, który będzie działał jako odbiornik instrukcji. Oba programy podano na końcu tego samouczka. Arduino IDE służy do nagrywania programatora ESP8266 i USBasp, a Atmel Studio do nagrywania Atmega16.
Jeden przycisk i dioda LED są połączone z Atmega16, więc po naciśnięciu przycisku Atmega16 wyśle instrukcje do NodeMCU, a NodeMCU wyśle odpowiednio e-mail. Dioda LED pokaże stan transmisji danych. Zacznijmy więc programować Atmega16, a następnie ESP8266 NodeMCU.
Programowanie ATmega16 do wysyłania wiadomości e-mail
Zacznij od zdefiniowania częstotliwości pracy i uwzględnienia wszystkich niezbędnych bibliotek. Używana biblioteka jest dostarczana z pakietem Atmel Studio.
# zdefiniować F_CPU 16000000UL #include #include
Następnie należy zdefiniować prędkość transmisji, aby komunikować się z ESP8266. Zwróć uwagę, że prędkość transmisji musi być podobna dla obu kontrolerów, tj. Atmega16 i NodeMCU. W tym samouczku szybkość transmisji wynosi 9600.
# zdefiniować BAUD_PRESCALE ((( F_CPU / (USART_BAUDRATE * 16UL))) - 1)
Dwa rejestry UBRRL i UBRRH zostaną użyte do załadowania wartości szybkości transmisji. Dolne 8 bitów szybkości transmisji zostanie załadowane w UBRRL, a górne 8 bitów szybkości transmisji zostanie załadowane w UBRRH. Dla uproszczenia, wykonaj funkcję inicjalizacji UART, w której prędkość transmisji będzie przekazywana przez wartość. Funkcja inicjalizacji UART będzie obejmować:
- Ustawianie bitów transmisji i odbioru w rejestrze UCSRB.
- Wybieranie 8-bitowych rozmiarów znaków w rejestrze UCSRC.
- Ładowanie dolnego i górnego bitu szybkości transmisji w rejestrze UBRRL i 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); }
Następnym krokiem będzie ustawienie funkcji przesyłania znaków. Ten krok obejmuje oczekiwanie na zakończenie pustego bufora, a następnie załadowanie wartości char do rejestru UDR. Znak zostanie przekazany tylko w funkcji.
void UART_TxChar (char c) { while (! (UCSRA & (1 <
Zamiast przesyłać znaki, utwórz funkcję wysyłającą ciągi, jak poniżej.
void UART_sendString (char * str) { unsigned char s = 0; while (str! = 0) { UART_TxChar (str); s ++; } }
W funkcji main () wywołaj UART_init (), aby rozpocząć transmisję. I wykonaj test echa, wysyłając ciąg TEST do NodeMCU.
UART_init (9600); UART_sendString ("TEST");
Rozpocznij konfigurację pinów GPIO dla diody LED i przycisku.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); PORTA - = (1 << 1);
Jeśli przycisk nie jest wciśnięty, włącz diodę LED, a jeśli przycisk jest wciśnięty, rozpocznij wysyłanie polecenia „SEND” do NodeMCU i wyłącz diodę 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); }
Programowanie ESP8266 NodeMCU
Programowanie NodeMCU obejmuje odbiór poleceń z Atmega16 i wysyłanie wiadomości e-mail za pomocą jednego serwera SMTP.
Po pierwsze, dołącz bibliotekę WIFI, ponieważ Internet będzie używany do wysyłania wiadomości e-mail. Zdefiniuj swój identyfikator WIFI i hasło w celu pomyślnego połączenia. Zdefiniuj także serwer SMTP.
#zawierać
W funkcji setup () ustaw szybkość transmisji podobną do szybkości transmisji Atmega16 na 9600 i połącz się z WIFI i wyświetl adres IP.
Serial.begin (9600); Serial.print („Łączenie z:”); Serial.println (ssid); WiFi.begin (ssid, hasło); while (WiFi.status ()! = WL_CONNECTED) { opóźnienie (500); Serial.print („.”); }
W pętli () funkcji odczytać odbierający bajty w Rx kołka i jego konwersję do postaci łańcuchów.
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 ("zmienna to ="); Serial.println (zmienna); Serial.print ("indata is ="); Serial.println (inData); opóźnienie (20); } String string = String (zmienna);
Jeśli polecenie odbioru zostanie dopasowane, wyślij wiadomość e-mail do odbiorcy, wywołując funkcję sendEmail ().
if (string == "WYŚLIJ") { sendEmail (); Serial.print ("Poczta wysłana do:"); Serial.println ("Odbiorca"); Serial.println (""); }
Bardzo ważne jest skonfigurowanie serwera SMTP i bez tego nie można wysyłać żadnych wiadomości e-mail. Zwróć również uwagę, że podczas komunikacji ustaw podobną prędkość transmisji dla obu kontrolerów.
W ten sposób ESP8266 można połączyć z mikrokontrolerem AVR, aby umożliwić mu komunikację IoT. Sprawdź również działające wideo podane poniżej.