- Lietas, kas jāatceras pirms sākuma
- Nepieciešamās sastāvdaļas
- Ķēdes shēma
- SMTP2GO servera iestatīšana e-pasta sūtīšanai
- AVR mikrokontrolleru Atmega16 un ESP8266 programmēšana
- ATmega16 programmēšana e-pasta sūtīšanai
- ESP8266 NodeMCU programmēšana
Atmega16 ir zemu izmaksu 8 bitu mikrokontrolleris, un tajā ir vairāk GPIO nekā iepriekšējā mikrokontrolleru versijā. Tam ir visi parasti izmantotie sakaru protokoli, piemēram, UART, USART, SPI un I2C. Tā plašā sabiedrības atbalsta un vienkāršības dēļ to plaši izmanto robotikas, automobiļu un automatizācijas nozarēs.
Atmega16 neatbalsta nevienu bezvadu sakaru protokolu, piemēram, Wi-Fi un Bluetooth, kas ierobežo tā lietojuma apgabalus domēnā, piemēram, IoT. Lai pārvarētu šo ierobežojumu, var pieslēgties citiem kontrolieriem, kuriem ir bezvadu protokoli. Ir vairāki kontrolieri, kas atbalsta bezvadu protokolus, piemēram, plaši izmantoto ESP8266,
Šodien mēs saskarne Atmega16 ar ESP8266 NodeMCU, lai padarītu to sazināties bezvadu caur internetu. ESP8266 NodeMCU ir plaši izmantots WiFi modulis ar kopienas atbalstu un viegli pieejamām bibliotēkām. Arī ESP8266 NodeMCU ir viegli programmējams ar Arduino IDE. ESP8266 var sasaistīt ar jebkuru mikrokontrolleru:
Šajā apmācībā e-pasts tiks nosūtīts, izmantojot moduli ESP8266 NodeMCU un Atmega16. Norādījumus sniegs Atmega16, un, kad ESP8266 saņems instrukcijas, tas nosūtīs e-pastu izvēlētajam e-pasta adresātam. ATmega16 un ESP8266 NodeMCU sazināsies, izmantojot UART sērijveida sakarus. Lai gan ATmega16 un ESP8266 NodeMCU saskarnei var izmantot jebkuru sakaru protokolu, piemēram, SPI, I2C vai UART.
Lietas, kas jāatceras pirms sākuma
Ņemiet vērā, ka šajā projektā izmantotais mikrokontrolleris Atmega16 darbojas 5V loģikas līmenī, savukārt ESP8266 NodeMCU darbojas 3,3 V loģikas līmenī. Abu mikrokontrolleru loģikas līmeņi ir atšķirīgi, kas var izraisīt zināmu nepareizu saziņu starp Atmega16 un ESP8266 NodeMCU, vai arī var tikt zaudēti dati, ja netiek uzturēts pareizs loģikas līmenis.
Tomēr, iepazīstoties ar abu mikrokontrolleru datu lapām, mēs noskaidrojām, ka mēs varam saskarties bez loģiskā līmeņa maiņas, jo visas ESP8266 NodeMCU tapas ir tolerantas no sprieguma līmeņa līdz 6 V. Tāpēc ir labi, ja iet uz priekšu ar 5V loģikas līmeni. Arī Atmega16 datu lapā ir skaidri norādīts, ka sprieguma līmenis virs 2V tiek uzskatīts par loģisko līmeni “1” un ESP8266 NodeMCU darbojas ar 3,3 V, tas nozīmē, ka, ja ESP8266 NodeMCU pārraida 3,3 V, tad Atmega16 to var uzskatīt par loģisko līmeni “1”. Tātad saziņa būs iespējama, neizmantojot loģisko līmeņa maiņu. Lai gan jūs varat brīvi izmantot loģiskā līmeņa pārslēdzēju no 5 līdz 3,3 V.
Pārbaudiet visus ar ESP8266 saistītos projektus šeit.
Nepieciešamās sastāvdaļas
- ESP8266 NodeMCU modulis
- Atmega16 mikrokontrolleru IC
- 16Mhz kristāla oscilators
- Divi 100nF kondensatori
- Divi 22pF kondensatori
- Uzspied pogu
- Džemperu vadi
- Maizes dēlis
- USBASP v2.0
- Led (jebkura krāsa)
Ķēdes shēma
SMTP2GO servera iestatīšana e-pasta sūtīšanai
Pirms programmēšanas sākšanas mums ir nepieciešams SMTP serveris, lai nosūtītu vēstules, izmantojot ESP8266. Tiešsaistē ir daudz SMTP serveru. Šeit smtp2go.com tiks izmantots kā SMTP serveris.
Tātad pirms koda rakstīšanas būs nepieciešami SMTP lietotājvārds un parole. Lai iegūtu šos divus akreditācijas datus, veiciet tālāk norādītās darbības, kas aptvers SMTP servera iestatīšanu veiksmīgai e-pasta ziņojumu sūtīšanai.
1. solis: - Lai reģistrētos bezmaksas kontā, noklikšķiniet uz “Izmēģināt SMTP2GO Free”.
2. solis: - Tiks parādīts logs, kurā jāievada daži akreditācijas dati, piemēram, vārds, e-pasta ID un parole.
3. solis: - pēc reģistrēšanās uz ievadīto e-pastu saņemsit aktivizācijas pieprasījumu. Aktivizējiet savu kontu, izmantojot e-pasta verifikācijas saiti, un pēc tam piesakieties, izmantojot savu e-pasta ID un paroli.
4. solis: - Pēc pieteikšanās jūs saņemsit savu SMTP lietotājvārdu un SMTP paroli. Atcerieties vai kopējiet tos savā piezīmju blokā turpmākai lietošanai. Pēc šī noklikšķiniet uz "pabeigt".
5. solis: - Tagad kreisajā piekļuves joslā noklikšķiniet uz “Iestatījumi” un pēc tam uz “Lietotāji”. Šeit jūs varat redzēt informāciju par SMTP serveri un PORT numuru. Parasti tas ir šāds:
Kodēt lietotājvārdu un paroli
Tagad mums ir jāmaina lietotājvārds un parole base64 kodētā formātā ar ASCII rakstzīmju kopu. Lai konvertētu e-pastu un paroli base64 kodētā formātā, izmantojiet vietni BASE64ENCODE (https://www.base64encode.org/). Kopējiet kodēto lietotājvārdu un paroli turpmākai lietošanai:
Pēc šo darbību pabeigšanas turpiniet programmēt ESP8266 NodeMCU un Atmega16 IC.
AVR mikrokontrolleru Atmega16 un ESP8266 programmēšana
Programmēšana ietvers divas programmas, vienu, lai Atmega16 darbotos kā instrukciju sūtītājs, un otru, lai ESP8266 NodeMCU darbotos kā instrukciju uztvērējs. Abas programmas ir norādītas šīs apmācības beigās. Arduino IDE tiek izmantots, lai sadedzinātu ESP8266, un USBasp programmētājs, un Atmel Studio tiek izmantots, lai sadedzinātu Atmega16.
Viena spiedpoga un LED ir saskarnē Atmega16, lai, nospiežot spiedpogu, Atmega16 nosūtītu norādījumus NodeMCU un NodeMCU attiecīgi nosūtītu e-pastu. LED parādīs datu pārraides statusu. Tātad sāksim programmēt Atmega16 un pēc tam ESP8266 NodeMCU.
ATmega16 programmēšana e-pasta sūtīšanai
Sāciet ar darbības frekvences noteikšanu un visu nepieciešamo bibliotēku iekļaušanu. Izmantotā bibliotēka ir aprīkota ar Atmel Studio Package.
#define F_CPU 16000000UL #include #include
Pēc tam ir jānosaka datu pārraides ātrums, lai sazinātos ar ESP8266. Ņemiet vērā, ka datu pārraides ātrumam jābūt līdzīgam abiem kontrolleriem, ti, Atmega16 un NodeMCU. Šajā apmācībā bauda ātrums ir 9600.
#define BAUD_PRESCALE ((( F_CPU / (USART_BAUDRATE * 16UL))) - 1)
Divi reģistri UBRRL un UBRRH tiks izmantoti, lai ielādētu baudas ātruma vērtības. Apakšējie 8 bitu pārraides ātruma ielādes veidi tiks veikti UBRRL, bet augšējie 8 bitu pārraides ātruma ielādes ātrumi - UBRRH. Vienkāršības labad izveidojiet UART inicializācijas funkciju, kur datu pārraides ātrums tiks nodots pēc vērtības. UART inicializācijas funkcija ietvers:
- Pārraides un saņemšanas bitu iestatīšana UCSRB reģistrā.
- 8 bitu rakstzīmju izmēru izvēle reģistrā UCSRC.
- Bauda ātruma apakšējo un augšējo bitu ielāde UBRRL un UBRRH reģistrā.
void UART_init (garš USART_BAUDRATE) { UCSRB - = (1 << RXEN) - (1 << TXEN); UCSRC - = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRL = BAUD_PRESCALE; UBRRH = (BAUD_PRESCALE >> 8); }
Nākamais solis būs funkcijas iestatīšana rakstzīmju pārsūtīšanai. Šis solis ietver gaidīšanu, kamēr beigsies tukšais buferis, un pēc tam ielādējiet char vērtību UDR reģistrā. Atzīme tiks nodota tikai ar funkciju.
void UART_TxChar (char c) { while (! (UCSRA & (1 <
Rakstzīmju pārsūtīšanas vietā izveidojiet funkciju, lai nosūtītu virknes, piemēram, zemāk.
void UART_sendString (char * str) { neparakstīta char s = 0; kamēr (str! = 0) { UART_TxChar (str); s ++; } }
Jo galvenais () funkciju, zvaniet UART_init () , lai sāktu pārraidi. Un darīt atbalss testu nosūtot TEST string NodeMCU.
UART_init (9600); UART_sendString ("TEST");
Sāciet konfigurēt GPIO tapu LED un spiedpogai.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); PORTA - = (1 << 1);
Ja spiedpoga netiek nospiesta, turiet LED ieslēgtu un, ja tiek nospiesta spiedpoga, tad sāciet nosūtīt komandu “Sūtīt” NodeMCU un izslēdziet LED.
if (bit_is_clear (PINA, 1)) { PORTA - = (1 << 0); _delay_ms (20); } cits { PORTA & = ~ (1 << 0); _kavējums_ms (50); UART_sendString ("SŪTĪT"); _delay_ms (1200); }
ESP8266 NodeMCU programmēšana
NodeMCU programmēšana ietver komandu saņemšanu no Atmega16 un e-pasta nosūtīšanu, izmantojot vienu SMTP serveri.
Pirmkārt, iekļaujiet WIFI bibliotēku, jo internets tiks izmantots e-pasta ziņojumu sūtīšanai. Lai veiksmīgi izveidotu savienojumu, definējiet savu WIFI atbalstu un paroli. Definējiet arī SMTP serveri.
# iekļaut
Funkcijā setup () iestatiet pārraides ātrumu, kas līdzīgs Atmega16 pārraides ātrumam, kā 9600 un izveidojiet savienojumu ar WIFI un parādiet IP adresi.
Sērijas sākums (9600); Serial.print ("Savienojums ar:"); Serial.println (ssid); WiFi.begin (ssid, parole); while (WiFi.status ()! = WL_CONNECTED) { aizkave (500); Sērijas.druka ("."); }
Jo cilpas () funkciju, izlasiet saņēmēja baiti pie Rx tapu un pārvērst to virknes formā.
ja (Serial.available ()> 0) { while (Serial.available ()> 0 && index1 <6) { delay (100); inChar = Serial.read (); inData = inChar; indekss1 ++; inData = '\ 0'; } mainīgais.toUpperCase (); for (baits i = 0; i <6; i ++) { mainīgais.concat (virkne (inData)); } Serial.print ("mainīgais ir ="); Serial.println (mainīgais); Serial.print ("indata is ="); Serial.println (inData); kavēšanās (20); } Virknes virkne = virkne (mainīgais);
Ja saņemšanas komanda ir saskaņota, nosūtiet e-pastu saņēmējam, izsaucot funkciju sendEmail ().
if (string == "SŪTĪT") { sendEmail (); Serial.print ("Pasts nosūtīts uz:"); Serial.println ("Saņēmējs"); Serial.println (""); }
Ir ļoti svarīgi iestatīt SMTP serveri, un, to nedarot, e-pastus nevar nosūtīt. Ņemiet vērā arī to, ka sakaru laikā abiem kontrolleriem iestatiet līdzīgu datu pārraides ātrumu.
Tādējādi ESP8266 var sasaistīt ar AVR mikrokontrolleru, lai to iespējotu IoT sakariem. Pārbaudiet arī zemāk sniegto darba video.