- Πράγματα που πρέπει να θυμάστε πριν ξεκινήσετε
- Απαιτούμενα στοιχεία
- Διάγραμμα κυκλώματος
- Ρύθμιση διακομιστή SMTP2GO για αποστολή email
- Προγραμματισμός μικροελεγκτή AVR Atmega16 και ESP8266
- Προγραμματισμός ATmega16 για αποστολή email
- Προγραμματισμός ESP8266 NodeMCU
Το Atmega16 είναι ένας μικροελεγκτής χαμηλού κόστους 8 bit και συνοδεύεται από μεγαλύτερο αριθμό GPIO από ό, τι η προηγούμενη έκδοση μικροελεγκτών. Διαθέτει όλα τα κοινά πρωτόκολλα επικοινωνίας όπως UART, USART, SPI και I2C. Έχει ευρείες εφαρμογές στη βιομηχανία ρομποτικής, αυτοκινήτων και αυτοματισμού λόγω της ευρείας κοινοτικής υποστήριξης και απλότητας.
Το Atmega16 δεν υποστηρίζει κανένα από τα πρωτόκολλα ασύρματης επικοινωνίας όπως το Wi-Fi και το Bluetooth που περιορίζει τις περιοχές εφαρμογής του σε τομέα όπως το IoT. Για να ξεπεραστεί αυτός ο περιορισμός μπορούν να διασυνδεθούν και άλλοι ελεγκτές που διαθέτουν ασύρματα πρωτόκολλα. Υπάρχει αριθμός ελεγκτών που υποστηρίζει ασύρματα πρωτόκολλα, όπως το ESP8266 που χρησιμοποιείται ευρέως,
Σήμερα θα διασυνδέονται ATmega16 με ESP8266 NodeMCU να καταστεί επικοινωνούν ασύρματα μέσω του διαδικτύου. Το ESP8266 NodeMCU χρησιμοποιείται ευρέως στην ενότητα WiFi με υποστήριξη κοινότητας και εύκολα διαθέσιμες βιβλιοθήκες. Επίσης, το ESP8266 NodeMCU είναι εύκολα προγραμματιζόμενο με το Arduino IDE. Το ESP8266 μπορεί να συνδεθεί με οποιονδήποτε μικροελεγκτή:
Σε αυτό το σεμινάριο, θα σταλεί email χρησιμοποιώντας το ESP8266 NodeMCU module και Atmega16. Οι οδηγίες θα δοθούν από το Atmega16 και όταν το ESP8266 λάβει τις οδηγίες, θα στείλει ένα email σε έναν επιλεγμένο παραλήπτη email. Τα ATmega16 και ESP8266 NodeMCU θα επικοινωνούν μέσω σειριακής επικοινωνίας UART. Αν και οποιοδήποτε πρωτόκολλο επικοινωνίας μπορεί να χρησιμοποιηθεί για τη διασύνδεση ATmega16 και ESP8266 NodeMCU όπως SPI, I2C ή UART.
Πράγματα που πρέπει να θυμάστε πριν ξεκινήσετε
Σημειώστε ότι ο μικροελεγκτής Atmega16 που χρησιμοποιείται σε αυτό το έργο λειτουργεί σε επίπεδο λογικής 5V, ενώ το ESP8266 NodeMCU λειτουργεί σε επίπεδο λογικής 3.3V. Τα λογικά επίπεδα και των δύο μικροελεγκτών είναι διαφορετικά που μπορεί να προκαλέσουν κάποια εσφαλμένη επικοινωνία μεταξύ των Atmega16 και ESP8266 NodeMCU ή μπορεί επίσης να υπάρξει απώλεια δεδομένων εάν δεν διατηρηθεί το κατάλληλο επίπεδο λογικής.
Ωστόσο, αφού περάσαμε από τα φύλλα δεδομένων και των δύο μικροελεγκτών, βρήκαμε ότι μπορούμε να πραγματοποιήσουμε διασύνδεση χωρίς αλλαγή λογικού επιπέδου, καθώς όλες οι ακίδες του ESP8266 NodeMCU είναι ανεκτικές από το επίπεδο τάσης έως τα 6V. Επομένως, είναι καλό να προχωράμε με λογικό επίπεδο 5V. Επίσης, το δελτίο δεδομένων του Atmega16 δηλώνει ξεκάθαρα ότι το επίπεδο τάσης πάνω από 2V θεωρείται ως Logic Level '1' και το ESP8266 NodeMCU τρέχει σε 3.3 V, αυτό σημαίνει ότι εάν το ESP8266 NodeMCU μεταδίδει 3.3V τότε το Atmega16 μπορεί να το πάρει ως λογικό επίπεδο '1'. Έτσι, η επικοινωνία θα είναι δυνατή χωρίς τη χρήση αλλαγής επιπέδου λογικής. Παρόλο που είστε ελεύθεροι να χρησιμοποιήσετε μετατόπιση επιπέδου λογικής από 5 έως 3.3V.
Δείτε όλα τα σχετικά έργα ESP8266 εδώ.
Απαιτούμενα στοιχεία
- Μονάδα ESP8266 NodeMCU
- Atmega16 Μικροελεγκτής IC
- 16Mhz Crystal Oscillator
- Δύο πυκνωτές 100nF
- Δύο πυκνωτές 22pF
- Πλήκτρο
- Καλώδια αλτών
- Ψωμί
- USBASP v2.0
- Led (Οποιοδήποτε χρώμα)
Διάγραμμα κυκλώματος
Ρύθμιση διακομιστή SMTP2GO για αποστολή email
Πριν ξεκινήσουμε τον προγραμματισμό, χρειαζόμαστε έναν διακομιστή SMTP για την αποστολή αλληλογραφίας μέσω ESP8266. Υπάρχουν πολλοί διακομιστές SMTP διαθέσιμοι στο Διαδίκτυο. Εδώ, το smtp2go.com θα χρησιμοποιηθεί ως διακομιστής SMTP.
Επομένως, πριν από τη σύνταξη του κωδικού, θα απαιτείται το όνομα χρήστη και ο κωδικός πρόσβασης SMTP Για να λάβετε αυτά τα δύο διαπιστευτήρια ακολουθήστε τα παρακάτω βήματα που θα καλύψουν τη ρύθμιση διακομιστή SMTP για την επιτυχή αποστολή email.
Βήμα 1: - Κάντε κλικ στο "Δοκιμάστε το SMTP2GO Free" για να εγγραφείτε σε έναν δωρεάν λογαριασμό.
Βήμα 2: - Θα εμφανιστεί ένα παράθυρο, όπου πρέπει να εισαγάγετε κάποια διαπιστευτήρια όπως όνομα, αναγνωριστικό email και κωδικό πρόσβασης.
Βήμα 3: - Μετά την εγγραφή, θα λάβετε ένα αίτημα ενεργοποίησης στο email που έχετε εισάγει. Ενεργοποιήστε τον λογαριασμό σας από το σύνδεσμο επαλήθευσης στο email και, στη συνέχεια, συνδεθείτε χρησιμοποιώντας το αναγνωριστικό και τον κωδικό πρόσβασης email
Βήμα 4: - Μόλις συνδεθείτε, θα λάβετε το όνομα χρήστη SMTP και τον κωδικό πρόσβασης SMTP. Θυμηθείτε ή αντιγράψτε τα στο σημειωματάριό σας για περαιτέρω χρήση. Μετά από αυτό κάντε κλικ στο «φινίρισμα».
Βήμα 5: - Τώρα στην αριστερή γραμμή πρόσβασης, κάντε κλικ στο "Ρυθμίσεις" και στη συνέχεια στο "Χρήστες". Εδώ, μπορείτε να δείτε τις πληροφορίες σχετικά με τον αριθμό διακομιστή SMTP και PORT. Συνήθως έχει ως εξής:
Κωδικοποίηση ονόματος χρήστη και κωδικού πρόσβασης
Τώρα πρέπει να αλλάξουμε το όνομα χρήστη και τον κωδικό πρόσβασης σε κωδικοποιημένη μορφή base64 με το σύνολο χαρακτήρων ASCII. Για τη μετατροπή του email και του κωδικού πρόσβασης σε κωδικοποιημένη μορφή base64 χρησιμοποιήστε έναν ιστότοπο που ονομάζεται BASE64ENCODE (https://www.base64encode.org/). Αντιγράψτε το κωδικοποιημένο όνομα χρήστη και τον κωδικό πρόσβασης, για περαιτέρω χρήση:
Αφού ολοκληρώσετε αυτά τα βήματα, προχωρήστε στον προγραμματισμό των ESP8266 NodeMCU και Atmega16 IC.
Προγραμματισμός μικροελεγκτή AVR Atmega16 και ESP8266
Ο προγραμματισμός θα περιλαμβάνει δύο προγράμματα, ένα για το Atmega16 να ενεργεί ως αποστολέας οδηγιών και το δεύτερο για το ESP8266 NodeMCU να ενεργεί ως αποδέκτης οδηγιών. Και τα δύο προγράμματα δίνονται στο τέλος αυτού του σεμιναρίου. Το Arduino IDE χρησιμοποιείται για την εγγραφή ESP8266 και του προγραμματιστή USBasp και το Atmel Studio χρησιμοποιείται για την εγγραφή του Atmega16.
Ένα κουμπί και το LED είναι διασυνδεδεμένα με το Atmega16, έτσι ώστε όταν πατάμε το κουμπί, το Atmega16 θα στέλνει οδηγίες στο NodeMCU και το NodeMCU θα στέλνει email αντίστοιχα. Το LED θα δείξει την κατάσταση της μετάδοσης δεδομένων. Ας ξεκινήσουμε λοιπόν τον προγραμματισμό Atmega16 και μετά το ESP8266 NodeMCU.
Προγραμματισμός ATmega16 για αποστολή email
Ξεκινήστε με τον καθορισμό της συχνότητας λειτουργίας και συμπεριλαμβανομένων όλων των απαραίτητων βιβλιοθηκών. Η βιβλιοθήκη που χρησιμοποιείται συνοδεύεται από το πακέτο Atmel Studio.
#define F_CPU 16000000UL #include #include
Μετά από αυτό, ο ρυθμός baud πρέπει να καθοριστεί για να επικοινωνήσει με το ESP8266. Σημειώστε ότι ο ρυθμός baud πρέπει να είναι παρόμοιος και για τους δύο ελεγκτές, π.χ. Atmega16 και NodeMCU. Σε αυτό το σεμινάριο, το baudrate είναι 9600.
#define BAUD_PRESCALE ((( F_CPU / (USART_BAUDRATE * 16UL))) - 1)
Οι δύο καταχωρητές UBRRL και UBRRH θα χρησιμοποιηθούν για τη φόρτωση τιμών baud rate. Τα χαμηλότερα 8 bits του ρυθμού baud θα φορτωθούν σε UBRRL και τα άνω 8 bits του ρυθμού baud θα φορτωθούν σε UBRRH. Για απλότητα, κάντε λειτουργία της αρχικοποίησης UART όπου ο ρυθμός baud θα περάσει από την τιμή. Η συνάρτηση αρχικοποίησης UART θα περιλαμβάνει:
- Ρύθμιση bit μετάδοσης και λήψης στο μητρώο UCSRB.
- Επιλογή μεγεθών χαρακτήρων 8-bit στο μητρώο UCSRC.
- Φόρτωση χαμηλότερων και ανώτερων bits του ρυθμού Baud στο μητρώο UBRRL και UBRRH.
άκυρο UART_init (long USART_BAUDRATE) { UCSRB - = (1 << RXEN) - (1 << TXEN) UCSRC - = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRL = BAUD_PRESCALE; UBRRH = (BAUD_PRESCALE >> 8); }
Το επόμενο βήμα θα είναι η ρύθμιση λειτουργίας για τη μετάδοση χαρακτήρων. Αυτό το βήμα περιλαμβάνει την αναμονή για άδειο buffer για να ολοκληρωθεί και στη συνέχεια να φορτώσει την τιμή char στο UDR register Ο χαρακτήρας θα περάσει μόνο σε λειτουργία.
άκυρο UART_TxChar (char c) { ενώ (! (UCSRA & (1 <
Αντί να μεταφέρετε χαρακτήρες, κάντε μια συνάρτηση για αποστολή συμβολοσειρών όπως παρακάτω.
άκυρο UART_sendString (char * str) { unsigned char s = 0; ενώ (str! = 0) { UART_TxChar (str); s ++; } }
Στην κύρια λειτουργία () , καλέστε το UART_init () για να ξεκινήσετε τη μετάδοση. Και κάντε echo test στέλνοντας TEST string στο NodeMCU.
UART_init (9600); UART_sendString ("ΔΟΚΙΜΗ");
Ξεκινήστε να διαμορφώνετε τον ακροδέκτη GPIO για LED και Πλήκτρο.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); ΠΟΡΤΑ - = (1 << 1);
Εάν δεν πατήσετε το κουμπί, κρατήστε το LED αναμμένο και αν το κουμπί πιέζεται, τότε ξεκινήστε τη μετάδοση της εντολής "ΑΠΟΣΤΟΛΗ" στο NodeMCU και απενεργοποιήστε το LED.
εάν (bit_is_clear (PINA, 1)) { PORTA - = (1 << 0); _delay_ms (20); } αλλιώς { PORTA & = ~ (1 << 0); _delay_ms (50); UART_sendString ("ΑΠΟΣΤΟΛΗ"); _delay_ms (1200); }
Προγραμματισμός ESP8266 NodeMCU
Ο προγραμματισμός NodeMCU περιλαμβάνει λήψη εντολών από το Atmega16 και την αποστολή email χρησιμοποιώντας έναν διακομιστή SMTP.
Πρώτον, συμπεριλάβετε τη βιβλιοθήκη WIFI καθώς το Διαδίκτυο θα χρησιμοποιηθεί για την αποστολή email. Ορίστε το WIFI SSID και τον κωδικό πρόσβασής σας για επιτυχημένη σύνδεση. Ορίστε επίσης τον διακομιστή SMTP.
#περιλαμβάνω
Στη λειτουργία setup () , Ρυθμίστε το ρυθμό baud παρόμοιο με το ρυθμό baud Atmega16 ως 9600 και συνδεθείτε στο WIFI και εμφανίστε τη διεύθυνση IP.
Serial.begin (9600); Serial.print ("Σύνδεση σε:"); Serial.println (SSD); WiFi.begin (SSD, κωδικός πρόσβασης); ενώ (WiFi.status ()! = WL_CONNECTED) { καθυστέρηση (500); Serial.print ("."); }
Στη συνάρτηση loop () , διαβάστε τα byte λήψης σε Rx pin και μετατρέψτε το σε μορφή συμβολοσειράς.
if (Serial.available ()> 0) { while (Serial.available ()> 0 && index1 <6) { καθυστέρηση (100); inChar = Serial.read (); inData = inChar; ευρετήριο1 ++; inData = '\ 0'; } variable.toUpperCase (); για (byte i = 0; i <6; i ++) { variable.concat (String (inData)); } Serial.print ("μεταβλητή είναι ="); Serial.println (μεταβλητή); Serial.print ("indata is ="); Serial.println (inData); καθυστέρηση (20) } String string = String (μεταβλητή);
Εάν η εντολή λήψης ταιριάζει, στείλτε email στον παραλήπτη καλώντας τη λειτουργία sendEmail ().
if (string == "ΑΠΟΣΤΟΛΗ") { sendEmail (); Serial.print ("Η αλληλογραφία στάλθηκε σε:"); Serial.println ("Ο παραλήπτης"); Serial.println (""); }
Είναι πολύ σημαντικό να ρυθμίσετε τον διακομιστή SMTP και χωρίς να το κάνετε αυτό, δεν μπορούν να σταλούν email. Σημειώστε επίσης ότι κατά την επικοινωνία, ορίστε παρόμοιο ρυθμό baud και για τους δύο ελεγκτές.
Έτσι , έτσι το ESP8266 μπορεί να διασυνδεθεί με τον μικροελεγκτή AVR για να το ενεργοποιήσει για επικοινωνίες IoT. Ελέγξτε επίσης το βίντεο που δίνεται παρακάτω.