- Muistettavat asiat ennen aloittamista
- Tarvittavat komponentit
- Piirikaavio
- SMTP2GO-palvelimen määrittäminen sähköpostin lähettämistä varten
- AVR-mikrokontrollerin Atmega16 ja ESP8266 ohjelmointi
- ATmega16: n ohjelmointi sähköpostin lähettämistä varten
- ESP8266 NodeMCU: n ohjelmointi
Atmega16 on edullinen 8-bittinen mikrokontrolleri, ja siinä on enemmän GPIO-lukuja kuin edellisessä mikrokontrolleriversiossaan. Siinä on kaikki yleisesti käytetyt yhteyskäytännöt, kuten UART, USART, SPI ja I2C. Sillä on laaja sovellus robotiikka-, auto- ja automaatioteollisuudessa, koska sillä on laaja yhteisötuki ja yksinkertaisuus.
Atmega16 ei tue mitään langattoman viestinnän protokollia, kuten Wi-Fi ja Bluetooth, mikä rajoittaa sen sovellusalueita toimialueella, kuten IoT. Tämän rajoituksen voittamiseksi voidaan liittää muita ohjaimia, joissa on langattomat protokollat. On olemassa useita ohjaimia, jotka tukevat langattomia protokollia, kuten laajalti käytetty ESP8266,
Tänään rajapinta ATmega16 kanssa ESP8266 NodeMCU tehdä kommunikoida langattomasti internetin kautta. ESP8266 NodeMCU on laajalti käytetty WiFi-moduuli, jossa on yhteisön tuki ja helposti saatavilla olevat kirjastot. Myös ESP8266 NodeMCU on helposti ohjelmoitavissa Arduino IDE: llä. ESP8266 voidaan liittää minkä tahansa mikro-ohjaimen kanssa:
Tässä opetusohjelmassa sähköposti lähetetään ESP8266 NodeMCU -moduulilla ja Atmega16: lla. Ohjeet antaa Atmega16 ja kun ESP8266 vastaanottaa ohjeet, se lähettää sähköpostin valitulle sähköpostin vastaanottajalle. ATmega16 ja ESP8266 NodeMCU kommunikoivat UART-sarjaliikenteen kautta. Vaikka mitä tahansa tiedonsiirtoprotokollaa voidaan käyttää ATmega16: n ja ESP8266 NodeMCU: n liittämiseen, kuten SPI, I2C tai UART.
Muistettavat asiat ennen aloittamista
Huomaa, että tässä projektissa käytetty Atmega16-mikrokontrolleri toimii 5 V logiikkatasolla, kun taas ESP8266 NodeMCU toimii 3,3 V logiikkatasolla. Molempien mikrokontrollerien logiikkatasot ovat erilaiset, mikä voi aiheuttaa väärinkäsittelyä Atmega16: n ja ESP8266 NodeMCU: n välillä tai voi myös tapahtua tietojen menetystä, jos asianmukaista logiikkatasoa ei ylläpidetä.
Molempien mikrokontrollerien taulukkojen läpi kävi kuitenkin ilmi, että voimme liittyä ilman logiikkatason siirtymistä, koska kaikki ESP8266 NodeMCU: n nastat ovat suvaitsevaisia jännitetasosta 6 V asti. Joten on hienoa edetä 5 V: n logiikkatasolla. Lisäksi Atmega16: n tietolomakkeessa todetaan selvästi, että yli 2 V: n jännitetasoa pidetään logiikkatasona 1 ja ESP8266 NodeMCU toimii 3,3 V: lla, se tarkoittaa, että jos ESP8266 NodeMCU lähettää 3,3 V, Atmega16 voi ottaa sen logiikkatasoksi 1. Joten kommunikointi on mahdollista ilman logiikkatason siirtämistä. Vaikka voit vapaasti käyttää logiikkatason siirtäjää välillä 5-3,3 V.
Tarkista kaikki ESP8266: een liittyvät projektit täältä.
Tarvittavat komponentit
- ESP8266 NodeMCU-moduuli
- Atmega16-mikrokontrolleri-IC
- 16MHz kristalloskillaattori
- Kaksi 100nF-kondensaattoria
- Kaksi 22pF-kondensaattoria
- Paina nappia
- Neulalangat
- Leipälauta
- USBASP v2.0
- Led (kaikki värit)
Piirikaavio
SMTP2GO-palvelimen määrittäminen sähköpostin lähettämistä varten
Ennen ohjelmoinnin aloittamista tarvitsemme SMTP-palvelimen lähettämään sähköpostia ESP8266: n kautta. Verkossa on paljon SMTP-palvelimia. Täällä smtp2go.com käytetään SMTP-palvelimena.
Joten ennen koodin kirjoittamista vaaditaan SMTP-käyttäjänimi ja salasana. Saadaksesi nämä kaksi kirjautumistietoa, seuraa alla olevia vaiheita, jotka kattavat SMTP-palvelimen määrittämisen sähköpostien onnistuneelle lähettämiselle.
Vaihe 1: - Napsauta "Kokeile SMTP2GO Free" rekisteröityäksesi ilmaisella tilillä.
Vaihe 2: - Näkyviin tulee ikkuna, jossa sinun on annettava joitain kirjautumistietoja, kuten nimi, sähköpostiosoite ja salasana.
Vaihe 3: - Rekisteröitymisen jälkeen saat aktivointipyynnön syötettyyn sähköpostiosoitteeseen. Aktivoi tilisi sähköpostin vahvistuslinkistä ja kirjaudu sisään käyttämällä sähköpostiosoitteesi ja salasanasi.
Vaihe 4: - Kun kirjaudut sisään, saat SMTP-käyttäjänimesi ja SMTP-salasanasi. Muista tai kopioi nämä muistikirjaasi myöhempää käyttöä varten. Napsauta tämän jälkeen 'valmis'.
Vaihe 5: - Napsauta nyt vasemmassa käyttöpalkissa kohtaa ”Asetukset” ja sitten “Käyttäjät”. Täältä näet SMTP-palvelinta ja PORT-numeroa koskevat tiedot. Se on yleensä seuraava:
Koodaa käyttäjänimi ja salasana
Nyt meidän on vaihdettava käyttäjänimi ja salasana base64-koodatussa muodossa ASCII-merkistöön. Muunna sähköposti ja salasana base64-koodatussa muodossa käyttämällä verkkosivustoa nimeltä BASE64ENCODE (https://www.base64encode.org/). Kopioi koodattu käyttäjänimi ja salasana jatkokäyttöä varten:
Kun olet suorittanut nämä vaiheet, jatka ESP8266 NodeMCU: n ja Atmega16 IC: n ohjelmointia.
AVR-mikrokontrollerin Atmega16 ja ESP8266 ohjelmointi
Ohjelmointi sisältää kaksi ohjelmaa, yhden Atmega16: lle toimimaan ohjeiden lähettäjänä ja toisen ESP8266 NodeMCU: n toimimaan ohjeiden vastaanottajana. Molemmat ohjelmat annetaan tämän opetusohjelman lopussa. Arduino IDE: tä käytetään ESP8266: n ja USBasp-ohjelmoijan polttamiseen ja Atmel Studiota Atmega16: n polttamiseen.
Yksi painike ja LED on liitetty Atmega16: een, joten kun painamme painiketta, Atmega16 lähettää ohjeet NodeMCU: lle ja NodeMCU lähettää sähköpostia vastaavasti. LED näyttää tiedonsiirron tilan. Aloitetaan siis Atmega16: n ja sitten ESP8266 NodeMCU: n ohjelmointi.
ATmega16: n ohjelmointi sähköpostin lähettämistä varten
Aloita määrittämällä toimintataajuus ja sisällyttämällä kaikki tarvittavat kirjastot. Käytetyn kirjaston mukana tulee Atmel-studiopaketti.
#define F_CPU 16000000UL include # include
Tämän jälkeen tiedonsiirtonopeus on määriteltävä kommunikoimaan ESP8266: n kanssa. Huomaa, että siirtonopeuden on oltava samanlainen molemmille ohjaimille eli Atmega16 ja NodeMCU. Tässä opetusohjelmassa baudinopeus on 9600.
#define BAUD_PRESCALE (((( F_CPU / (USART_BAUDRATE * 16UL))) - 1)
Kahta rekisteriä UBRRL ja UBRRH käytetään siirtonopeuden arvojen lataamiseen. Alemmat 8-bittiset siirtonopeudet latautuvat UBRRL-muodossa ja ylemmät 8-bittiset baudinopeuden latautuvat UBRRH-muodossa. Tee yksinkertaisuuden vuoksi UART-alustuksen toiminto, jossa baudinopeus välitetään arvon mukaan. UART-alustustoiminto sisältää:
- Lähetys- ja vastaanottobittien asettaminen rekisteriin UCSRB.
- 8-bittisten merkkikokojen valitseminen UCSRC-rekisterissä.
- Baudinopeuden ala- ja yläbittien lataaminen UBRRL- ja UBRRH-rekisteriin.
void UART_init (pitkä USART_BAUDRATE) { UCSRB - = (1 << RXEN) - (1 << TXEN); UCSRC - = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRL = BAUD_PRESCALE; UBRRH = (BAUD_PRESCALE >> 8); }
Seuraava vaihe on toiminnon asettaminen merkkien lähettämistä varten. Tähän vaiheeseen kuuluu odottaa tyhjän puskurin päättymistä ja ladata sitten char-arvo UDR-rekisteriin. Merkki välitetään vain toiminnassa.
void UART_TxChar (char c) { while (! (UCSRA & (1 <
Merkkien siirtämisen sijaan tee funktio lähettää merkkijonoja kuten alla.
void UART_sendString (char * str) { allekirjoittamaton char s = 0; kun (str! = 0) { UART_TxChar (str); s ++; } }
In main () funktio, soita UART_init () lähetyksen aloittamiseksi. Ja tee kaiutesti lähettämällä TEST-merkkijono NodeMCU: lle.
UART_init (9600); UART_sendString ("TESTI");
Aloita GPIO-nastan määritys LEDille ja painikkeelle.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); PORTA - = (1 << 1);
Jos painonappia ei paineta, pidä LED-merkkivalo PÄÄLLÄ ja jos painetaan Push-painiketta, Aloita lähetyskomennon lähettäminen NodeMCU: lle ja sammuta LED.
if (bit_is_clear (PINA, 1)) { PORTA - = (1 << 0); _viive_ms (20); } muu { PORTA & = ~ (1 << 0); viive_ms (50); UART_sendString ("LÄHETÄ"); viive_ms (1200); }
ESP8266 NodeMCU: n ohjelmointi
NodeMCU: n ohjelmointi sisältää komentojen vastaanottamisen Atmega16: lta ja sähköpostin lähettämisen yhdellä SMTP-palvelimella.
Ensinnäkin sisällytä WIFI-kirjasto, koska Internetiä käytetään sähköpostin lähettämiseen. Määritä WIFI-tuki ja salasana yhteyden muodostamiseksi onnistuneesti. Määritä myös SMTP-palvelin.
#sisältää
Aseta setup () -toiminnossa Määritä Atmega16-siirtonopeuden kaltainen siirtonopeus 9600: ksi ja muodosta yhteys WIFI-verkkoon ja näytä IP-osoite.
Sarjan alku (9600); Serial.print ("Yhdistäminen:"); Serial.println (ssid); WiFi.begin (ssid, salasana); while (WiFi.status ()! = WL_CONNECTED) { viive (500); Sarjaprintti ("."); }
In silmukka () funktio, lue vastaanottava tavua Rx pin ja muuntaa sen merkkijonon muodossa.
jos (Sarja.käytettävissä ()> 0) { kun (Sarja.käytettävissä ()> 0 && index1 <6) { viive (100); inChar = Serial.read (); inData = inChar; indeksi1 ++; inData = '\ 0'; } muuttuja.toUpperCase (); for (tavu i = 0; i <6; i ++) { muuttuja.concat (String (inData)); } Sarja.tulos ("muuttuja on ="); Serial.println (muuttuja); Sarja.tulos ("indata is ="); Serial.println (inData); viive (20); } Merkkijono = Merkkijono (muuttuja);
Jos vastaanottokomento on sovitettu, lähetä sähköpostia vastaanottajalle soittamalla sendEmail () -toimintoa.
if (string == "LÄHETÄ") { sendEmail (); Serial.print ("Sähköposti lähetetty:"); Serial.println ("Vastaanottaja"); Sarja.println (""); }
On erittäin tärkeää määrittää SMTP-palvelin, ja tekemättä tätä, sähköposteja ei voida lähettää. Huomaa myös, että tiedonsiirron aikana aseta siirtonopeus samanlainen molemmille ohjaimille.
Joten ESP8266 voidaan liittää AVR-mikrokontrolleriin sen mahdollistamiseksi IoT-viestinnässä. Tarkista myös alla oleva toimiva video.