- דברים שכדאי לזכור לפני שמתחילים
- רכיבים נדרשים
- תרשים מעגל
- הגדרת שרת SMTP2GO לשליחת דוא"ל
- תכנות מיקרו-בקר AVR Atmega16 ו- ESP8266
- תכנות ATmega16 לשליחת דוא"ל
- תכנות ESP8266 NodeMCU
Atmega16 הוא מיקרו-בקר בעלות נמוכה של 8 סיביות ומגיע עם מספר רב יותר של GPIO מאשר הגרסה הקודמת של מיקרו-בקרים. יש בו את כל פרוטוקולי התקשורת הנפוצים כמו UART, USART, SPI ו- I2C. יש לו יישומים רחבים בתעשיות רובוטיקה, רכב ואוטומציה בגלל התמיכה והקהילה הרחבה שלה.
Atmega16 אינה תומכת באף אחד מפרוטוקולי התקשורת האלחוטית כגון Wi-Fi ו- Bluetooth שמגביל את אזורי היישומים שלה בתחום כמו IoT. כדי להתגבר על מגבלה זו ניתן להתממשק בקרים אחרים הכוללים פרוטוקולים אלחוטיים. ישנם מספר בקרים התומכים בפרוטוקולים אלחוטיים כמו שימוש נרחב ב- ESP8266,
היום אנו להתממשק Atmega16 עם ESP8266 NodeMCU לעשות את זה לתקשר באופן אלחוטי דרך האינטרנט. ESP8266 NodeMCU נמצא בשימוש נרחב במודול WiFi עם תמיכה בקהילה וספריות שזמינות בקלות. כמו כן ניתן לתכנות בקלות את ESP8266 NodeMCU עם Arduino IDE. ניתן לממשק ESP8266 עם כל מיקרו-בקר:
במדריך זה יישלח דוא"ל באמצעות מודול ESP8266 NodeMCU ו- Atmega16. ההוראות יינתנו על ידי Atmega16 וכאשר ESP8266 יקבל את ההוראות, הוא ישלח דוא"ל למקבל הדוא"ל שנבחר. ATmega16 ו- ESP8266 NodeMCU יתקשרו באמצעות תקשורת UART סדרתית. למרות שניתן להשתמש בכל פרוטוקול תקשורת לממשק ATmega16 ו- ESP8266 NodeMCU כגון SPI, I2C או UART.
דברים שכדאי לזכור לפני שמתחילים
שים לב כי המיקרו-בקר Atmega16 המשמש בפרויקט זה עובד ברמת לוגיקה 5V ואילו ESP8266 NodeMCU עובד ברמת לוגיקה 3.3V. רמות ההיגיון של שני המיקרו-בקרים שונות, מה שעלול לגרום לתקשורת לא נכונה בין Atmega16 ו- ESP8266 NodeMCU או שיש גם אובדן נתונים אם לא נשמרת רמת לוגיקה נכונה.
עם זאת, לאחר שעברנו על גליונות הנתונים של שני המיקרו-בקרים, גילינו שנוכל להתממשק ללא שינוי ברמת ההיגיון מכיוון שכל הפינים של ה- ESP8266 NodeMCU הם סובלניים מרמת המתח ועד 6V. אז זה בסדר קדימה עם רמת לוגיקה של 5 וולט. כמו כן, גיליון הנתונים של Atmega16 קובע בבירור שרמת המתח מעל 2 וולט נחשבת לרמה לוגית '1' ו- ESP8266 NodeMCU פועל על 3.3 וולט, זה אומר שאם ESP8266 NodeMCU מעביר 3.3 וולט אז Atmega16 יכולה לקחת את זה כרמת לוגיקה '1'. אז תקשורת תתאפשר ללא שימוש בהעברת רמות ההיגיון. למרות שאתה חופשי להשתמש בממתח לוגיקה בין 5 ל -3.3 וולט.
בדוק כאן את כל הפרויקטים הקשורים ל- ESP8266.
רכיבים נדרשים
- מודול ESP8266 NodeMCU
- מיקרו-בקרת Atmega16
- מתנד קריסטל 16Mhz
- שני קבלים 100nF
- שני קבלים 22pF
- לחץ על הכפתור
- חוטי מגשר
- קרש לחם
- USBASP v2.0
- Led (בכל צבע)
תרשים מעגל
הגדרת שרת SMTP2GO לשליחת דוא"ל
לפני שמתחילים לתכנת אנו זקוקים לשרת SMTP כדי לשלוח דואר דרך ESP8266. יש הרבה שרתי SMTP זמינים באופן מקוון. כאן, smtp2go.com ישמש כשרת SMTP.
אז לפני כתיבת קוד, שם המשתמש והסיסמה של SMTP יידרשו. כדי לקבל את שני האישורים, בצע את הצעדים הבאים שיספקו הגדרת שרת SMTP לשליחה בהצלחה של הודעות דוא"ל.
שלב 1: - לחץ על "נסה SMTP2GO חינם" כדי להירשם לחשבון בחינם.
שלב 2: - יופיע חלון, שבו עליך להזין אישורים כמו שם, מזהה דוא"ל וסיסמה.
שלב 3: - לאחר ההרשמה, תקבל בקשת הפעלה בדוא"ל שהוזן. הפעל את חשבונך מקישור האימות בדוא"ל ואז התחבר באמצעות מזהה הדוא"ל והסיסמה שלך.
שלב 4: - ברגע שתתחבר, תקבל את שם המשתמש שלך ואת סיסמת ה- SMTP שלך. זכור או העתק אותם לפנקס הרשימות שלך לשימוש נוסף. לאחר לחיצה על 'סיום'.
שלב 5: - עכשיו בסרגל הגישה השמאלי, לחץ על "הגדרות" ואז על "משתמשים". כאן תוכלו לראות את המידע לגבי שרת ה- SMTP ומספר ה- PORT. זה בדרך כלל כדלקמן:
קידוד שם משתמש וסיסמה
כעת עלינו לשנות את שם המשתמש והסיסמה בפורמט מקודד base64 עם ערכת תווים ASCII. להמרת הדוא"ל והסיסמה בפורמט מקודד base64 השתמש באתר בשם BASE64ENCODE (https://www.base64encode.org/). העתק את שם המשתמש והסיסמה המקודדים, לשימוש נוסף:
לאחר סיום שלבים אלה המשך לתכנות ESP8266 NodeMCU ו- Atmega16 IC.
תכנות מיקרו-בקר AVR Atmega16 ו- ESP8266
התכנות יכלול שתי תוכניות, האחת עבור Atmega16 לשמש כשולח הוראות והשנייה עבור ESP8266 NodeMCU שישמש כמקבל הוראות. שתי התוכניות ניתנות בסוף הדרכה זו. Arduino IDE משמש לצריבת ESP8266 ומתכנת USBasp ו- Atmel Studio משמש לצריבת Atmega16.
כפתור כפתור אחד ונורית ממשק עם Atmega16 כך שכשאנחנו לוחצים על כפתור הלחיצה Atmega16 ישלח הוראות ל- NodeMCU ו- NodeMCU ישלח אימייל בהתאם. נורית הנורית תציג את מצב העברת הנתונים. אז נתחיל לתכנת את Atmega16 ואז את ESP8266 NodeMCU.
תכנות ATmega16 לשליחת דוא"ל
התחל עם הגדרת תדירות ההפעלה וכולל את כל הספריות הדרושות. הספרייה המשמשת מגיעה עם חבילת Atmel Studio.
#define F_CPU 16000000UL #include #include
לאחר מכן, יש להגדיר את קצב השידור על מנת לתקשר עם ESP8266. שים לב שקצב השידור צריך להיות דומה עבור שני הבקרים, כלומר Atmega16 ו- NodeMCU. במדריך זה הבידראט הוא 9600.
#define BAUD_PRESCALE (((( F_CPU / (USART_BAUDRATE * 16UL))) - 1)
שני הרישומים UBRRL ו- UBRRH ישמשו לטעינת ערכי קצב שידור. 8 הסיביות התחתונות של קצב השידור יטענו ב- UBRRL וה- 8 סיביות העליונות של קצב השידור נטענו ב- UBRRH. לשם פשטות, הפעל פונקציה של אתחול UART שבו קצב השידור יועבר לפי ערך. פונקציית האתחול של UART תכלול:
- הגדרת סיביות שידור וקבלה ברשומה UCSRB.
- בחירת גדלי תווים של 8 סיביות ב- UCSRC.
- טעינה של סיביות תחתון וקצב עליון בקצב UBRRL ו- UBRRH.
בטל UART_init (USART_BAUDRATE ארוך) { UCSRB - = (1 << RXEN) - (1 << TXEN); UCSRC - = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRL = BAUD_PRESCALE; UBRRH = (BAUD_PRESCALE >> 8); }
השלב הבא יהיה הגדרת פונקציה להעברת תווים. שלב זה כולל המתנה לסיום מאגר ריק ואז טעינת ערך char לרישום UDR. הצ'ר יועבר רק בתפקוד.
בטל UART_TxChar (char c) { תוך (! (UCSRA & (1 <
במקום להעביר תווים, בצע פונקציה לשליחת מחרוזות כמו למטה.
בטל UART_sendString (char * str) { char לא חתום s = 0; בעוד (str! = 0) { UART_TxChar (str); s ++; } }
בשינה ראשית () פונקציה, קורא UART_init () כדי להפעיל את השידור. וזה עושה הד מבחן על ידי שליחת מחרוזת בדיקה כדי NodeMCU.
UART_init (9600); UART_sendString ("TEST");
התחל להגדיר תצורת סיכה של GPIO עבור LED ולחצן כפתור.
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); PORTA - = (1 << 1);
אם לא לוחצים על לחצן הדחיפה, שמור על נורית ה- LED מופעלת ואם לחצן הלחיצה נלחץ אז התחל לשדר את הפקודה "SEND" ל- NodeMCU והפוך את ה- LED לכיבוי.
אם (bit_is_clear (PINA, 1)) { PORTA - = (1 << 0); _עיכוב_מס (20); } אחר { PORTA & = ~ (1 << 0); _עיכוב_מס (50); UART_sendString ("SEND"); _עיכוב_מס (1200); }
תכנות ESP8266 NodeMCU
תכנות NodeMCU כולל קבלת פקודה מ- Atmega16 ושליחת דוא"ל באמצעות שרת SMTP אחד.
ראשית, כלול את ספריית ה- WIFI מאחר והאינטרנט ישמש למשלוח דוא"ל. הגדר את ה- WIFI והסיסמה שלך לחיבור מוצלח. הגדר גם את שרת ה- SMTP.
#לִכלוֹל
בשנת ההתקנה () פונקציה, להגדיר את קצב השידור דומה קצב השידור Atmega16 כמו 9600 ו מתחבר ל- WiFi וכתובת IP התצוגה.
Serial.begin (9600); Serial.print ("מתחבר ל:"); Serial.println (ssid); WiFi.begin (ssid, סיסמה); בעוד (WiFi.status ()! = WL_CONNECTED) { עיכוב (500); Serial.print ("."); }
בשנת לולאה () פונקציה, לקרוא את מקבל הבתים בבית הסיכה Rx ולהמיר אותו טופס מחרוזת.
אם (Serial.available ()> 0) { while (Serial.available ()> 0 && index1 <6) { עיכוב (100); inChar = Serial.read (); inData = inChar; index1 ++; inData = '\ 0'; } variable.toUpperCase (); עבור (בתים i = 0; i <6; i ++) { variable.concat (String (inData)); } Serial.print ("משתנה הוא ="); Serial.println (משתנה); Serial.print ("indata is ="); Serial.println (inData); עיכוב (20); } מחרוזת מחרוזת = מחרוזת (משתנה);
אם פקודת הקבלה תואמת, שלח דוא"ל לנמען על ידי קריאה לפונקציה sendEmail ().
אם (מחרוזת == "שלח") { sendEmail (); Serial.print ("דואר נשלח אל:"); Serial.println ("הנמען"); Serial.println (""); }
חשוב מאוד להתקין שרת SMTP ומבלי לעשות זאת, לא ניתן לשלוח אימיילים. שים לב גם בזמן התקשורת, הגדר קצב שידור דומה לשני הבקרים.
אז ככה ניתן להתממשק ESP8266 למיקרו בקר AVR כדי לאפשר אותו לתקשורת IoT. בדוק גם את סרטון העבודה המופיע להלן.