- Cose da ricordare prima di iniziare
- Componenti richiesti
- Schema elettrico
- Configurazione del server SMTP2GO per l'invio di e-mail
- Programmazione del microcontrollore AVR Atmega16 e ESP8266
- Programmazione di ATmega16 per l'invio di e-mail
- Programmazione ESP8266 NodeMCU
Atmega16 è un microcontrollore a 8 bit a basso costo e viene fornito con un numero maggiore di GPIO rispetto alla sua versione precedente di microcontrollori. Ha tutti i protocolli di comunicazione comunemente usati come UART, USART, SPI e I2C. Ha ampie applicazioni nei settori della robotica, automobilistica e dell'automazione grazie al suo ampio supporto e semplicità da parte della comunità.
Atmega16 non supporta nessuno dei protocolli di comunicazione wireless come Wi-Fi e Bluetooth, il che limita le sue aree di applicazione in domini come l'IoT. Per superare questa limitazione è possibile interfacciare altri controller dotati di protocolli wireless. Esistono numerosi controller che supportano protocolli wireless come ESP8266 ampiamente utilizzato,
Oggi interfacciamo Atmega16 con ESP8266 NodeMCU per farlo comunicare in modalità wireless tramite internet. ESP8266 NodeMCU è un modulo WiFi ampiamente utilizzato con supporto della comunità e librerie facilmente disponibili. Anche ESP8266 NodeMCU è facilmente programmabile con Arduino IDE. ESP8266 può essere interfacciato con qualsiasi microcontrollore:
In questo tutorial, l' e-mail verrà inviata utilizzando il modulo NodeMCU ESP8266 e Atmega16. Le istruzioni verranno fornite da Atmega16 e quando ESP8266 riceverà le istruzioni, invierà un'e-mail al destinatario selezionato. ATmega16 e ESP8266 NodeMCU comunicheranno tramite la comunicazione seriale UART. Sebbene sia possibile utilizzare qualsiasi protocollo di comunicazione per interfacciare ATmega16 e ESP8266 NodeMCU come SPI, I2C o UART.
Cose da ricordare prima di iniziare
Si noti che il microcontrollore Atmega16 utilizzato in questo progetto funziona a livello logico 5V mentre ESP8266 NodeMCU funziona a livello logico 3,3V. I livelli logici di entrambi i microcontrollori sono diversi, il che può causare problemi di comunicazione tra Atmega16 e ESP8266 NodeMCU oppure può verificarsi anche una perdita di dati se non viene mantenuto il livello logico appropriato.
Tuttavia, dopo aver esaminato le schede tecniche di entrambi i microcontrollori, abbiamo scoperto che possiamo interfacciarci senza alcun cambiamento di livello logico poiché tutti i pin di ESP8266 NodeMCU sono tolleranti dal livello di tensione fino a 6V. Quindi va bene andare avanti con il livello logico 5V. Inoltre, la scheda tecnica di Atmega16 afferma chiaramente che il livello di tensione superiore a 2 V è considerato come livello logico "1" e ESP8266 NodeMCU funziona a 3,3 V, significa che se ESP8266 NodeMCU sta trasmettendo 3,3 V, Atmega16 può prenderlo come livello logico "1". Quindi la comunicazione sarà possibile senza utilizzare lo spostamento del livello logico. Sebbene tu sia libero di utilizzare il cambio di livello logico da 5 a 3,3 V.
Controlla tutti i progetti relativi a ESP8266 qui.
Componenti richiesti
- Modulo NodeMCU ESP8266
- Atmega16 Microcontroller IC
- Oscillatore in cristallo da 16 Mhz
- Due condensatori da 100 nF
- Due condensatori da 22pF
- Premi il bottone
- Cavi per ponticelli
- Breadboard
- USBASP v2.0
- Led (qualsiasi colore)
Schema elettrico
Configurazione del server SMTP2GO per l'invio di e-mail
Prima di iniziare la programmazione abbiamo bisogno di un server SMTP per inviare la posta tramite ESP8266. Ci sono molti server SMTP disponibili online. Qui, smtp2go.com verrà utilizzato come server SMTP.
Quindi, prima di scrivere il codice, saranno richiesti il nome utente e la password SMTP. Per ottenere queste due credenziali, segui i passaggi seguenti che copriranno la configurazione del server SMTP per l'invio corretto di e-mail.
Passaggio 1: - Fare clic su "Prova SMTP2GO gratis" per registrarsi con un account gratuito.
Passaggio 2: verrà visualizzata una finestra in cui è necessario inserire alcune credenziali come nome, ID e-mail e password.
Passaggio 3: - Dopo la registrazione, riceverai una richiesta di attivazione sull'e-mail inserita. Attiva il tuo account dal collegamento di verifica nell'e-mail e quindi accedi utilizzando l'ID e la password dell'e-mail.
Passaggio 4: - Una volta effettuato l'accesso, riceverai il nome utente SMTP e la password SMTP. Ricorda o copia questi sul tuo blocco note per un ulteriore utilizzo. Dopo questo, fare clic su "Fine".
Passaggio 5: - Ora nella barra di accesso a sinistra, fare clic su "Impostazioni" e quindi su "Utenti". Qui puoi vedere le informazioni relative al server SMTP e al numero di PORTA. Di solito è il seguente:
Codifica nome utente e password
Ora dobbiamo cambiare Username e Password nel formato codificato base64 con set di caratteri ASCII. Per convertire l'e-mail e la password nel formato codificato base64, utilizzare un sito Web chiamato BASE64ENCODE (https://www.base64encode.org/). Copia il nome utente e la password codificati, per un ulteriore utilizzo:
Dopo aver terminato questi passaggi, procedere con la programmazione di ESP8266 NodeMCU e Atmega16 IC.
Programmazione del microcontrollore AVR Atmega16 e ESP8266
La programmazione includerà due programmi, uno per Atmega16 per agire come mittente di istruzioni e il secondo per ESP8266 NodeMCU per agire come ricevitore di istruzioni. Entrambi i programmi sono forniti alla fine di questo tutorial. Arduino IDE viene utilizzato per masterizzare ESP8266 e il programmatore USBasp e Atmel Studio viene utilizzato per masterizzare Atmega16.
Un pulsante e un LED sono interfacciati con Atmega16 in modo che quando premiamo il pulsante Atmega16 invierà istruzioni a NodeMCU e NodeMCU invierà un'email di conseguenza. Il LED mostrerà lo stato della trasmissione dei dati. Quindi iniziamo a programmare Atmega16 e poi ESP8266 NodeMCU.
Programmazione di ATmega16 per l'invio di e-mail
Inizia con la definizione della frequenza operativa e includendo tutte le librerie necessarie. La libreria utilizzata viene fornita con Atmel Studio Package.
#define F_CPU 16000000UL #include #include
Dopodiché, è necessario definire la velocità di trasmissione per poter comunicare con ESP8266. Si noti che la velocità di trasmissione deve essere simile per entrambi i controller, ovvero Atmega16 e NodeMCU. In questo tutorial, il baudrate è 9600.
#define BAUD_PRESCALE ((( F_CPU / (USART_BAUDRATE * 16UL))) - 1)
I due registri UBRRL e UBRRH verranno utilizzati per caricare i valori di baud rate. Gli 8 bit inferiori di baud rate verranno caricati in UBRRL e gli 8 bit superiori di baud rate verranno caricati in UBRRH. Per semplicità, rendere funzione di inizializzazione UART in cui la velocità di trasmissione sarà passata per valore. La funzione di inizializzazione UART includerà:
- Impostazione dei bit di trasmissione e ricezione nel registro UCSRB.
- Selezione delle dimensioni dei caratteri a 8 bit nel registro UCSRC.
- Caricamento dei bit inferiore e superiore della velocità di trasmissione nei registri UBRRL e 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); }
Il prossimo passo sarà l' impostazione della funzione per la trasmissione dei caratteri. Questo passaggio include l'attesa del completamento del buffer vuoto e quindi il caricamento del valore char nel registro UDR. Il carattere verrà passato solo in funzione.
void UART_TxChar (char c) { while (! (UCSRA & (1 <
Invece di trasferire caratteri, crea una funzione per inviare stringhe come di seguito.
void UART_sendString (char * str) { unsigned char s = 0; while (str! = 0) { UART_TxChar (str); s ++; } }
Nella funzione main () , chiama UART_init () per avviare la trasmissione. Ed esegui il test dell'eco inviando la stringa TEST a NodeMCU.
UART_init (9600); UART_sendString ("TEST");
Inizia a configurare il pin GPIO per LED e pulsante.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); PORTA - = (1 << 1);
Se il pulsante non viene premuto, mantenere il LED acceso e se viene premuto il pulsante, iniziare a trasmettere il comando "SEND" a NodeMCU e spegnere il LED.
if (bit_is_clear (PINA, 1)) { PORTA - = (1 << 0); _delay_ms (20); } altro { PORTA & = ~ (1 << 0); _delay_ms (50); UART_sendString ("SEND"); _delay_ms (1200); }
Programmazione ESP8266 NodeMCU
La programmazione di NodeMCU include la ricezione del comando da Atmega16 e l'invio di e-mail utilizzando un server SMTP.
Innanzitutto, includi la libreria WIFI poiché Internet verrà utilizzato per inviare e-mail. Definisci il tuo SSID WIFI e la password per una connessione corretta. Definisci anche il server SMTP.
#includere
Nella funzione setup () , impostare la velocità di trasmissione simile alla velocità di trasmissione Atmega16 come 9600 e connettersi al WIFI e visualizzare l'indirizzo IP.
Serial.begin (9600); Serial.print ("Connessione a:"); Serial.println (ssid); WiFi.begin (ssid, password); while (WiFi.status ()! = WL_CONNECTED) { ritardo (500); Serial.print ("."); }
Nella funzione loop () , leggi i byte di ricezione sul pin Rx e convertili in forma di stringa.
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 ("la variabile è ="); Serial.println (variabile); Serial.print ("indata is ="); Serial.println (inData); ritardo (20); } String string = String (variabile);
Se il comando di ricezione corrisponde, invia un'email al destinatario chiamando la funzione sendEmail ().
if (string == "SEND") { sendEmail (); Serial.print ("Mail inviata a:"); Serial.println ("Il destinatario"); Serial.println (""); }
È molto importante configurare il server SMTP e senza farlo non è possibile inviare e-mail. Notare inoltre che durante la comunicazione, impostare una velocità di trasmissione simile per entrambi i controller.
Quindi questo è il modo ESP8266 può essere interfacciato con AVR microcontroller per abilitarla per le comunicazioni IoT. Controlla anche il video di lavoro fornito di seguito.