- Perkara yang perlu diingat sebelum memulakan
- Komponen Diperlukan
- Rajah Litar
- Menyiapkan Server SMTP2GO untuk menghantar E-mel
- Mengaturcara AVR Mikrokontroler Atmega16 dan ESP8266
- Pengaturcaraan ATmega16 untuk Menghantar E-mel
- Pengaturcaraan ESP8266 NodeMCU
Atmega16 adalah mikrokontroler 8 bit kos rendah dan dilengkapi dengan bilangan GPIO lebih banyak daripada mikrokontroler versi sebelumnya. Ia mempunyai semua protokol komunikasi yang biasa digunakan seperti UART, USART, SPI dan I2C. Ini memiliki aplikasi yang luas dalam industri robotik, kenderaan dan automasi kerana sokongan dan kesederhanaan masyarakatnya yang luas.
Atmega16 tidak menyokong protokol komunikasi tanpa wayar seperti Wi-Fi dan Bluetooth yang menghadkan kawasan aplikasinya dalam domain seperti IoT. Untuk mengatasi batasan ini, pengawal lain dapat dihubungkan dengan protokol tanpa wayar. Terdapat sebilangan pengawal yang menyokong protokol tanpa wayar seperti ESP8266 yang banyak digunakan,
Hari ini kita akan menghubungkan Atmega16 dengan ESP8266 NodeMCU untuk menjadikannya berkomunikasi tanpa wayar melalui internet. ESP8266 NodeMCU adalah modul WiFi yang banyak digunakan dengan sokongan komuniti dan perpustakaan yang mudah didapati. ESP8266 NodeMCU juga mudah diprogramkan dengan Arduino IDE. ESP8266 boleh dihubungkan dengan pengawal mikro mana-mana:
Dalam tutorial ini, e-mel akan dihantar menggunakan modul NodeMCU ESP8266 dan Atmega16. Arahan akan diberikan oleh Atmega16 dan apabila ESP8266 menerima arahan itu, ia akan menghantar e-mel kepada penerima e-mel terpilih. ATmega16 dan ESP8266 NodeMCU akan berkomunikasi melalui komunikasi bersiri UART. Walaupun sebarang protokol komunikasi dapat digunakan untuk menghubungkan ATmega16 dan ESP8266 NodeMCU seperti SPI, I2C atau UART.
Perkara yang perlu diingat sebelum memulakan
Perhatikan bahawa mikrokontroler Atmega16 yang digunakan dalam projek ini berfungsi pada tahap logik 5V manakala ESP8266 NodeMCU berfungsi pada tahap logik 3.3V. Tahap logik kedua mikrokontroler adalah berbeza yang boleh menyebabkan beberapa miskomunikasi antara Atmega16 dan ESP8266 NodeMCU atau mungkin juga ada kehilangan data jika tahap logik yang betul tidak dikekalkan.
Walau bagaimanapun, setelah melalui lembar data kedua mikrokontroler, kami mendapati bahawa kami dapat berinteraksi tanpa peralihan tahap logik kerana semua pin ESP8266 NodeMCU bertoleransi dari tahap voltan hingga 6V. Oleh itu, baiklah dengan tahap logik 5V. Juga, datasheet Atmega16 dengan jelas menyatakan bahawa tahap voltan di atas 2V dianggap sebagai Logic Level '1' dan ESP8266 NodeMCU berjalan pada 3.3 V, ini bermaksud jika ESP8266 NodeMCU memancarkan 3.3V maka Atmega16 dapat mengambilnya sebagai tahap logik '1'. Jadi komunikasi akan dapat dilakukan tanpa menggunakan peralihan tahap logik. Walaupun anda bebas menggunakan tahap perubahan logik dari 5 hingga 3.3V.
Lihat semua projek berkaitan ESP8266 di sini.
Komponen Diperlukan
- Modul ESP8266 NodeMCU
- IC Mikrokontroler Atmega16
- Pengayun Kristal 16Mhz
- Dua Kapasitor 100nF
- Dua Kapasitor 22pF
- Tekan butang
- Wayar Pelompat
- Papan roti
- USBASP v2.0
- Led (Sebarang Warna)
Rajah Litar
Menyiapkan Server SMTP2GO untuk menghantar E-mel
Sebelum memulakan pengaturcaraan, kami memerlukan pelayan SMTP untuk menghantar surat melalui ESP8266. Terdapat banyak pelayan SMTP yang tersedia dalam talian. Di sini, smtp2go.com akan digunakan sebagai pelayan SMTP.
Jadi sebelum menulis kod, nama pengguna dan kata laluan SMTP diperlukan. Untuk mendapatkan dua kelayakan ini ikuti langkah-langkah di bawah yang akan merangkumi penyediaan pelayan SMTP kerana berjaya menghantar e-mel.
Langkah 1: - Klik "Cuba SMTP2GO Percuma" untuk mendaftar dengan akaun percuma.
Langkah 2: - Tetingkap akan muncul, di mana anda perlu memasukkan beberapa kelayakan seperti nama, id e-mel dan kata laluan.
Langkah 3: - Setelah mendaftar, anda akan menerima permintaan pengaktifan pada E-mel yang dimasukkan. Aktifkan akaun anda dari pautan verifikasi dalam e-mel dan kemudian log masuk menggunakan id dan kata laluan e-mel anda.
Langkah 4: - Setelah anda log masuk, anda akan mendapat Nama Pengguna SMTP dan Kata Laluan SMTP anda. Ingat atau salin ini ke notepad anda untuk penggunaan selanjutnya. Selepas ini klik pada 'finish'.
Langkah 5: - Sekarang di bar akses kiri, klik pada "Tetapan" dan kemudian pada "Pengguna". Di sini, anda dapat melihat maklumat berkenaan dengan pelayan SMTP dan nombor PORT. Biasanya seperti berikut:
Encode Nama Pengguna dan Kata Laluan
Sekarang kita harus menukar Nama Pengguna dan Kata Laluan dalam format dikodkan base64 dengan set watak ASCII. Untuk menukar E-mel dan Kata Laluan dalam format dikodkan base64, gunakan laman web bernama BASE64ENCODE (https://www.base64encode.org/). Salin nama pengguna dan kata laluan yang dikodkan, untuk penggunaan selanjutnya:
Setelah menyelesaikan langkah-langkah ini, teruskan untuk pengaturcaraan ESP8266 NodeMCU dan Atmega16 IC.
Mengaturcara AVR Mikrokontroler Atmega16 dan ESP8266
Pengaturcaraan akan merangkumi dua program, satu untuk Atmega16 bertindak sebagai pengirim arahan dan yang kedua untuk ESP8266 NodeMCU bertindak sebagai penerima arahan. Kedua-dua program diberikan pada akhir tutorial ini. Arduino IDE digunakan untuk membakar ESP8266 dan pengaturcara USBasp dan Atmel Studio digunakan untuk membakar Atmega16.
Satu butang tekan dan LED dihubungkan dengan Atmega16 sehingga ketika kami menekan butang Atmega16 akan mengirimkan arahan ke NodeMCU dan NodeMCU akan menghantar e-mel dengan sewajarnya. LED akan menunjukkan status penghantaran data. Oleh itu, mari mulakan Pengaturcaraan Atmega16 dan kemudian ESP8266 NodeMCU.
Pengaturcaraan ATmega16 untuk Menghantar E-mel
Mulakan dengan menentukan frekuensi operasi dan termasuk semua perpustakaan yang diperlukan. Perpustakaan yang digunakan dilengkapi dengan Pakej Studio Atmel.
# menentukan F_CPU 16000000UL #include #include
Selepas ini, kadar baud harus ditentukan untuk berkomunikasi dengan ESP8266. Perhatikan bahawa kadar baud harus serupa untuk kedua-dua pengawal iaitu Atmega16 dan NodeMCU. Dalam tutorial ini, kadar baud adalah 9600.
#tentukan BAUD_PRESCALE ((( F_CPU / (USART_BAUDRATE * 16UL))) - 1)
Kedua-dua register UBRRL dan UBRRH akan digunakan untuk memuatkan nilai kadar baud. 8-bit baud rate yang lebih rendah akan dimuat di UBRRL dan 8-bit baud rate yang lebih tinggi akan dimuat di UBRRH. Untuk kesederhanaan, buat permulaan UART di mana kadar baud akan dilalui mengikut nilai. Fungsi inisialisasi UART akan merangkumi:
- Menetapkan bit Penghantaran dan Penerimaan dalam daftar UCSRB.
- Memilih saiz watak 8-bit dalam daftar UCSRC.
- Pemuatan bit Baud yang lebih rendah dan lebih tinggi dalam daftar UBRRL dan UBRRH.
batal UART_init (USART_BAUDRATE panjang) { UCSRB - = (1 << RXEN) - (1 << TXEN); UCSRC - = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRL = BAUD_PRESCALE; UBRRH = (BAUD_PRESCALE >> 8); }
Langkah seterusnya adalah menyiapkan fungsi untuk menghantar watak. Langkah ini merangkumi menunggu penyangga kosong selesai dan kemudian memuatkan nilai char ke daftar UDR. Arang hanya akan diserahkan dalam fungsi.
batal UART_TxChar (char c) { sementara (! (UCSRA & (1 <
Daripada memindahkan watak, buat fungsi untuk menghantar rentetan seperti di bawah.
batal UART_sendString (char * str) { char tidak bertanda s = 0; sementara (str! = 0) { UART_TxChar (str); s ++; } }
Dalam fungsi utama () , panggil UART_init () untuk memulakan penghantaran. Dan lakukan ujian echo dengan menghantar rentetan TEST ke NodeMCU.
UART_init (9600); UART_sendString ("UJIAN");
Mula mengkonfigurasi pin GPIO untuk LED dan Butang Tekan.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); PORTA - = (1 << 1);
Sekiranya butang tekan tidak ditekan maka teruskan LED menyala dan jika Tombol Tekan ditekan maka Mulailah mengirimkan perintah "HANTAR" ke NodeMCU dan buat LED dimatikan.
jika (bit_is_clear (PINA, 1)) { PORTA - = (1 << 0); _delay_ms (20); } lain { PORTA & = ~ (1 << 0); _delay_ms (50); UART_sendString ("HANTAR"); _delay_ms (1200); }
Pengaturcaraan ESP8266 NodeMCU
Pengaturcaraan NodeMCU merangkumi penerimaan arahan dari Atmega16 dan Menghantar E-mel menggunakan pelayan One SMTP.
Pertama, sertakan perpustakaan WIFI kerana internet akan digunakan untuk menghantar e-mel. Tentukan SSD dan kata laluan WIFI anda untuk sambungan yang berjaya. Tentukan juga pelayan SMTP.
#sertakan
Dalam fungsi persediaan () , Tetapkan kadar baud yang serupa dengan kadar baud Atmega16 sebagai 9600 dan sambungkan ke WIFI dan paparkan alamat IP.
Serial.begin (9600); Serial.print ("Menyambung ke:"); Serial.println (ssid); WiFi.begin (ssid, kata laluan); sementara (WiFi.status ()! = WL_CONNECTED) { kelewatan (500); Cetakan bersiri ("."); }
Dalam fungsi loop () , baca byte penerima pada pin Rx dan ubah menjadi bentuk rentetan.
if (Serial.available ()> 0) { while (Serial.available ()> 0 && index1 <6) { kelewatan (100); inChar = Serial.read (); inData = inChar; indeks1 ++; dalamData = '\ 0'; } variabel.toUpperCase (); untuk (byte i = 0; i <6; i ++) { variable.concat (String (inData)); } Serial.print ("pemboleh ubah adalah ="); Serial.println (pemboleh ubah); Serial.print ("indata is ="); Serial.println (inData); kelewatan (20); } String string = String (pemboleh ubah);
Sekiranya arahan penerimaan sesuai, hantarkan e-mel kepada penerima dengan memanggil fungsi sendEmail ().
jika (string == "HANTAR") { sendEmail (); Serial.print ("Surat dihantar ke:"); Serial.println ("Penerima"); Serial.println (""); }
Sangat penting untuk menyediakan pelayan SMTP dan tanpa melakukan ini, e-mel tidak dapat dihantar. Juga perhatikan bahawa semasa komunikasi, tetapkan kadar baud yang serupa untuk kedua-dua pengawal.
Jadi ini adalah bagaimana ESP8266 dapat dihubungkan dengan mikrokontroler AVR untuk memungkinkannya untuk komunikasi IoT. Lihat juga video berfungsi yang diberikan di bawah.