- חומרים נדרשים:
- מודול GSM:
- תקשורת עם מודול GSM באמצעות פקודות AT:
- תרשים מעגל:
- מתכנת לך מיקרו-בקר PIC:
- סימולציה:
- ביצוע וקבלת שיחות באמצעות GSM ו- PIC:
מודולי GSM מרתקים לשימוש במיוחד כאשר הפרויקט שלנו דורש גישה מרחוק. המודולים הללו יכולים לבצע את כל הפעולות שהטלפון הנייד הרגיל שלנו יכול לעשות, כמו לבצע / לקבל שיחה, לשלוח / לקבל SMS, להתחבר לאינטרנט באמצעות GPRS וכו '. אתה יכול גם לחבר מיקרופון ורמקול רגילים למודול זה ולשוחח שיחות לנייד. זה יפתח דלתות לפרויקטים יצירתיים רבים אם ניתן יהיה להתממשק אליו עם מיקרו-בקר. מכאן שבמדריך זה נלמד כיצד אנו יכולים לממשק את מודול ה- GSM (SIM900A) עם מיקרו - בקר PIC שלנו, ונדגים זאת על ידי ביצוע וקבלת שיחה באמצעות מודול GSM. בעבר התממשקנו עם Arduino ו- Raspberry Pi לצורך שיחות והודעות:
- שיחה והודעה באמצעות Arduino ו- GSM Module
- התקשרו וטקסטו באמצעות Raspberry Pi ו- GSM Module
חומרים נדרשים:
- מיקרו-בקר PIC (PIC16F877A)
- מודול GSM (SIM900 או כל אחר)
- חוטי חיבור
- מתאם 12 וולט
- פיקיט 3
מודול GSM:
ניתן להשתמש במודול ה- GSM גם ללא כל מיקרו-בקר באמצעות מצב הפקודה AT. כפי שמוצג לעיל, מודול ה- GSM מגיע עם מתאם USART אשר ניתן לממשק ישירות למחשב באמצעות מודול MAX232 או בעזרת הפינים Tx ו- Rx ניתן לחבר אותו למיקרו-בקר. ניתן גם להבחין בסיכות האחרות כמו MIC +, MIC-, SP +, SP- וכו 'בהן ניתן לחבר מיקרופון או רמקול. ניתן להפעיל את המודול באמצעות מתאם 12 וולט דרך שקע חבית DC רגיל.
הכנס את כרטיס ה- SIM שלך לחריץ של המודול והפעל אותו, עליך להבחין בנורת חשמל דולקת. עכשיו המתן כדקה בערך, וכדאי שתראה נורית אדומה (או כל צבע אחר) מהבהבת פעם אחת בכל 3 שניות. משמעות הדבר היא שהמודול שלך הצליח ליצור קשר עם כרטיס ה- SIM שלך. עכשיו אתה יכול להמשיך בחיבור המודול שלך לטלפון או לכל מיקרו-בקר.
תקשורת עם מודול GSM באמצעות פקודות AT:
כפי שאולי ניחשתם נכון, מודול ה- GSM יכול לתקשר באמצעות תקשורת טורית ויכול להבין רק שפה אחת והיא " פקודות AT ". לא משנה מה אתה יכול לספר או לבקש ממודול ה- GSM, זה צריך להיות רק באמצעות פקודות AT. למשל אם אתה רוצה לדעת אם המודול שלך פעיל. עליך לשאול (לשלוח) פקודה כמו "AT" והמודול שלך יענה "בסדר".
פקודות AT אלה מוסברות היטב בגיליון הנתונים שלה וניתן למצוא אותן בגיליון הנתונים הרשמי שלה. בסדר! בסדר! זהו גיליון נתונים של 271 עמודים וייתכן שייקח לך ימים לקרוא אותם. אז נתתי כמה פקודות AT החשובות למטה כדי שתוכל להפעיל את זה בקרוב.
בְּ |
משיב באישור לאישור |
ב- + CPIN? |
בדוק את איכות האות |
AT + COPS? |
מצא את שם ספק השירות |
ATD96XXXXXXXX; |
התקשר למספר הספציפי, מסתיים במעי הגס למחצה |
AT + CNUM |
מצא את מספר כרטיס ה- SIM (ייתכן שלא יעבוד עבור חלק מה- SIM) |
ATA |
ענה לשיחה הנכנסת |
ATH |
השבת את השיחה הנכנסת הנוכחית |
AT + COLP |
הצג את מספר השיחה הנכנסת |
AT + VTS = (מספר) |
שלח מספר DTMF. אתה יכול להשתמש בכל מספר בלוח המקשים הנייד שלך עבור (מספר) |
AT + CMGR |
AT + CMGR = 1 קורא הודעה במיקום הראשון |
AT + CMGD = 1 |
מחק הודעה במיקום הראשון |
AT + CMGDA = "DEL ALL" |
מחק את כל ההודעות מה- SIM |
AT + CMGL = "ALL" |
קרא את כל ההודעות מה- SIM |
AT + CMGF = 1 |
הגדר תצורת SMS. "1" מיועד למצב טקסט בלבד |
AT + CMGS = “+91 968837XXXX” > טקסט CircuitDigest
|
שולח SMS למספר מסוים כאן 968837XXXX. כשרואים ">" התחל להזין את הטקסט. לחץ על Ctrl + Z כדי לשלוח את הטקסט. |
AT + CGATT? |
לבדיקת חיבור לאינטרנט בכרטיס SIM |
AT + CIPSHUT |
לסגירת חיבור TCP, כלומר לנתק את האינטרנט מהטופס |
AT + CSTT = "APN", "שם משתמש", "מעבר" |
התחבר ל- GPRS באמצעות APN ומפתח ה- Pass שלך. ניתן להשיג מספק הרשת. |
AT + CIICR |
בדוק אם בכרטיס ה- SIM יש חבילת נתונים |
AT + CIFSR |
קבל IP של רשת ה- SIM |
AT + CIPSTART = "TCP", "SERVER IP", "PORT" |
משמש להגדרת חיבור IP TCP |
ב- + CIPSEND |
פקודה זו משמשת לשליחת נתונים לשרת |
תרשים מעגל:
תרשים החיבור עבור מודול GSM ממשק עם מיקרו-בקר PIC מוצג להלן.
פשוט שילבנו בין סיכות Tx ו- Rx של מודול GSM לבין סיכות Rx ו- Tx של PIC MCU PIC16F877A בהתאמה. זה יצור קשר סדרתי בין שניהם. כמו כן, אז אל תשכח להיות בסיסי הן במודול ה- GSM והן ב- PIC. השתמשנו גם בתצוגת LCD כדי לדעת מה המצב של מודול ה- GSM שלנו. לאחר סיום החיבורים החומרה שלך תיראה כמו משהו למטה.
לוח ה- PIC Perf נוצר עבור סדרת ההדרכה שלנו ב- PIC, בה למדנו כיצד להשתמש במיקרו-בקר PIC. כדאי לחזור לאותם מדריכי PIC Microcontroller באמצעות MPLABX ו- XC8 אם אינך יודע כיצד לצרוב תוכנית באמצעות פיקיט 3, מכיוון שאדלג על כל המידע הבסיסי הזה.
מתכנת לך מיקרו-בקר PIC:
התוכנית המלאה לפרויקט זה נמצאת בתחתית הדרכה זו. כאן אסביר כמה פונקציות וחלקי קוד חשובים. לתוכנית זו יש גם קודי LCD שהיו מממשק LCD עם מיקרו-בקר PIC, אתה יכול לבקר בהדרכה זו אם אתה סקרן לדעת כיצד ניתן להשתמש ב- LCD עם מיקרו-בקר PIC.
כפי שנאמר קודם, אנו הולכים לתקשר בין PIC ו- GSM באמצעות פקודות AT דרך דרך התקשורת הסדרתית. אז ראשית עלינו לאתחל את מודול התקשורת USART במיקרו PIC שלנו באמצעות אתחול _SIM900 (); פוּנקצִיָה. בתוך פונקציה זו אנו מצהירים על סיכות ה- Tx וה- RX ומאתחלים קליטה ושידור אסינכרוני בקצב שידור 9600 ובמצב 8 סיביות.
// *** אתחל את ה- UART עבור ה- SIM900 ** // החלל אתחל את Initial_SIM900 (הריק) {// **** הגדרת סיכות קלט / פלט עבור ה- UART **** // TRISC6 = 0; // פין TX מוגדר כפלט TRISC7 = 1; // RX Pin pin מוגדר כקלט // ________ I / O pins pin set __________ // / ** אתחל את SPBRG register עבור קצב שידור נדרש והגדר BRGH עבור baud_rate מהיר ** / SPBRG = 129; // SIM900 פועל בקצב שידור 9600 כך ש 129 BRGH = 1; // עבור baud_rate גבוה // _________ הגדרת סוף baud_rate _________ // // **** אפשר יציאה טורית אסינכרונית ******* // SYNC = 0; // אסינכרוני SPEN = 1; // אפשר סיכות יציאה טורית // _____ יציאה טורית אסינכרונית מופעלת _______ // // ** בואו להתכונן לשידור וקליטה ** // TXEN = 1; // אפשר שידור CREN = 1; // הפעל קליטה // __ מודול UART מוכן ומוכן לשידור וקליטה __ // // ** בחר מצב 8 סיביות ** // TX9 = 0; // קבלת 8 סיביות שנבחרה RX9 = 0;// נבחר מצב קליטה של 8 סיביות // __ נבחר מצב 8 סיביות __ //} // ________ מודול UART מאותחל מאותו __________ //
כעת עלינו לקרוא ולכתוב מידע מ / למודול ה- GSM שלנו. לשם כך אנו משתמשים בפונקציות _SIM900_putch (), _SIM900_getch (), _SIM900_send_string (), _SIM900_print (). פונקציות אלה משתמשות במרשם המאגר שידור וקבלה כגון TXREG ו- RCREG כדי לקרוא או לכתוב נתונים באופן סדרתי.
// ** פונקציה לשליחת בת תאריך אחד ל- UART ** // בטל _SIM900_putch (char bt) {תוך (! TXIF); // החזק את התוכנית עד שמאגר TX יהיה חינם TXREG = bt; // טען את חיץ המשדר עם הערך שהתקבל} // _____________ סוף הפונקציה ________________ // // ** פונקציה כדי לקבל בתא תאריך אחד מ- UART ** // char _SIM900_getch () {if (OERR) // לבדוק שגיאה { CREN = 0; // אם שגיאה -> אפס CREN = 1; // אם שגיאה -> אפס} תוך כדי (! RCIF); // החזק את התוכנית עד שמאגר ה- RX הוא RCREG בחזרה בחינם; // לקבל את הערך ולשלוח אותו לפונקציה הראשית} // _____________ סוף הפונקציה ________________ // // ** פונקציה להמרת מחרוזת לבייט ** // ריק SIM900_send_string (char * st_pt) {while (* st_pt) // if there הוא char _SIM900_putch (* st_pt ++);// עיבד אותו כנתוני בתים} // ___________ סוף הפונקציה ______________ // // ** סוף הקודים שהשתנו ** // בטל _SIM900_print (תו const char * ptr לא חתום) {תוך (* ptr! = 0) {_SIM900_putch (* ptr ++); }
הפונקציות לעיל הן אוניברסליות ואין צורך לשנות אותן באף יישום. הסבירו להם רק כדי לתת הקדמה גסה. אתה יכול לצלול עמוק לתוכם אם אתה רוצה דרך הבנה.
כעת בתוך הפונקציה העיקרית שלנו, אנו מאתחלים את חיבור USART ובודקים אם אנו מסוגלים לקבל "אישור" כאשר אנו שולחים "AT" באמצעות שורת הקוד שלהלן
לעשות {Lcd_Set_Cursor (2,1); Lcd_Print_String ("המודול לא נמצא"); } בעוד (! SIM900_isStarted ()); // המתן עד שה- GSM ישלח בחזרה את "OK" Lcd_Set_Cursor (2,1); Lcd_Print_String ("זוהה מודול"); __השהיית_מס (1500);
הפונקציה SIM900_isStarted (); ישלח "AT" ל- GSM ומחכה לתגובה "OK" ממנו. אם כן, הוא יחזיר 1 אחר 0;
אם המודול לא מזוהה או אם קיימת בעיית חיבור כלשהי, ה- LCD יראה "המודול לא נמצא", אחרת הוא יראה שהמודול מזוהה וממשיך לשלב הבא שבו אנו בודקים אם ניתן לזהות את כרטיס ה- SIM על ידי להלן. שורת קוד.
/ * בדוק אם כרטיס ה- SIM מזוהה * / בצע {Lcd_Set_Cursor (2,1); Lcd_Print_String ("SIM לא נמצא"); } בעוד (! SIM900_isReady ()); // המתן עד שה- GSM ישלח בחזרה את "+ CPIN: READY" Lcd_Set_Cursor (2,1); Lcd_Print_String ("זוהה SIM"); __השהיית_מס (1500);
הפונקציה SIM900_isReady () תשלח "AT + CPIN?" ל- GSM ומחכה לתגובה "+ CPIN: READY" ממנו. אם כן, הוא יחזיר 1 אחר 0;
אם כרטיס SIM אם נמצא, נגלה ש- SIM יוצג על גבי LCD. ואז, אנחנו יכולים לנסות לבצע שיחה באמצעות הפקודה " ATD mobilenumber ; ”. הנה כדוגמה השתמשתי במספר שלי כ- ATD93643159XX;. עליך להחליף שם את מספר הנייד המתאים שלך.
/ * בצע שיחת טלפון * / עשה {_SIM900_print ("ATD93643XXXXX; \ r \ n"); // כאן אנו מתקשרים למספר 93643XXXXX Lcd_Set_Cursor (1,1); Lcd_Print_String ("ביצוע שיחה…."); } בעוד (_SIM900_waitResponse ()! = SIM900_OK); // המתן עד שה- ESP ישלח בחזרה את "OK" Lcd_Set_Cursor (1,1); Lcd_Print_String ("שיחה בוצעה…."); __השהיית_מס (1500);
לאחר ביצוע השיחה, LCD יציג את השיחה והיית אמור לקבל שיחה נכנסת למספר שצוין.
אתה יכול גם להתקשר למספר הנייד המחובר למודול ה- GSM ולקבל הודעה על כך במסך ה- LCD y באמצעות הקוד שלמטה
בזמן (1) {if (_SIM900_waitResponse () == SIM900_RING) // בדוק אם יש שיחה נכנסת {Lcd_Set_Cursor (2,1); Lcd_Print_String ("שיחה נכנסת !!."); }}
כאשר מודול ה- GSM מזהה שיחה נכנסת הוא יציג שיחה נכנסת בשורה השנייה של מודול ה- LCD. הפונקציה _SIM900_waitResponse () תבדוק אם קיימים נתונים נכנסים ממודול ה- GSM. כאשר הוא מקבל SIM900_RING, שווה ערך ל- "RING" עקב המתנה () , נציג את הסטטוס "שיחה נכנסת".
אתה יכול ליצור פונקציות משלך כך לבצע כמעט כל סוגי ההפעלות באמצעות מודול GSM. אם ברצונך לקבל דברים בקידוד קשה, תוכל פשוט להשתמש בפונקציה __SIM900_print () כדי לשלוח כל פקודת AT כזו למטה.
_SIM900_print ("AT + CPIN? \ R \ n");
זכור שיש לבצע את כל הפקודות שלך עם "\ r \ n" כדי לציין שהפקודה מסתיימת.
סימולציה:
לאחר שהבנתם כיצד התוכנית עובדת תוכלו לנסות לדמות ולבצע שינויים בהתאם לצרכים שלכם. סימולציה תחסוך לך הרבה זמן. הסימולציה נעשית באמצעות פרוטאוס והיא נראית כמו למטה.
כפי שניתן לראות השתמשנו באפשרות הטרמינל הווירטואלי ב- Proteus כדי לבדוק אם התוכנית מגיבה כצפוי. אנו יכולים להזין את הערכים דרך תיבת הדו-שיח הקופצת. לדוגמא ברגע שנלחץ על run, תופיע תיבת דו-שיח שחורה כמו לעיל ותציג AT, המשמעות היא שהיא שלחה את מודול ה- GSM AT, כעת נוכל להשיב ל- PIC על ידי הקלדת התיבה כ- "OK" ולחץ על Enter ו- PIC יגיב אליו. באופן דומה אנו יכולים לנסות את כל פקודות ה- AT.
ביצוע וקבלת שיחות באמצעות GSM ו- PIC:
ברגע שאתה מבין איך הקוד והחומרה פועלים, פשוט העלה את התוכנית שלהלן ל- PIC והפעל את המודול. LCD שלך צריך להציג "זוהה מודול", "זוהה SIM" ו "שיחה ממוקמת" אם הכל עובד בסדר. לאחר שתראה את "השיחה בוצעה" תקבל שיחה נכנסת למספר שצוין בתוכנית.
אתה יכול גם לנסות להתקשר למספר הקיים במודול ה- GSM וה- LCD שלך יציג "שיחה נכנסת" כדי לציין שה- SIM מתקשר.
העבודה המלאה של הפרויקט מוצגת בסרטון להלן. מקווה שהבנתם את הפרויקט ונהניתם לעשות זאת. אם יש לך בעיה לגרום לדברים לעבוד, פרסם את שאלתך בקטע ההערות או בפורומים שלנו ואשמח לעזור לך.