- المواد المطلوبة:
- وحدة GSM:
- التواصل مع وحدة GSM باستخدام أوامر AT:
- مخطط الرسم البياني:
- برمجة PIC Microcontroller:
- محاكاة:
- إجراء واستقبال المكالمات باستخدام GSM و PIC:
تعتبر وحدات GSM رائعة للاستخدام خاصة عندما يتطلب مشروعنا الوصول عن بُعد. يمكن أن تتخذ هذه الوحدات جميع الإجراءات التي يمكن أن يقوم بها هاتفنا المحمول العادي ، مثل إجراء / تلقي مكالمة ، وإرسال / استقبال رسائل SMS ، والاتصال بالإنترنت باستخدام GPRS وما إلى ذلك. يمكنك أيضًا توصيل ميكروفون ومكبر صوت عاديين بهذه الوحدة والتحدث على جهازك. مكالمات الجوال. سيؤدي هذا إلى فتح الأبواب أمام الكثير من المشاريع الإبداعية إذا كان من الممكن ربطها بوحدة تحكم دقيقة. ومن ثم في هذا البرنامج التعليمي سوف نتعلم كيف يمكننا ربط وحدة GSM (SIM900A) بوحدة التحكم الدقيقة PIC الخاصة بنا وسوف نعرضها من خلال إجراء واستقبال المكالمات باستخدام وحدة GSM. لقد قمنا سابقًا بتفاعله مع Arduino و Raspberry Pi للاتصال والمراسلة:
- الاتصال والرسائل باستخدام وحدة Arduino و GSM
- الاتصال والنص باستخدام Raspberry Pi و GSM Module
المواد المطلوبة:
- متحكم PIC (PIC16F877A)
- وحدة GSM (SIM900 أو أي وحدة أخرى)
- توصيل الأسلاك
- محول 12 فولت
- PicKit 3
وحدة GSM:
يمكن استخدام وحدة GSM حتى بدون أي متحكم باستخدام وضع أوامر AT. كما هو موضح أعلاه ، تأتي وحدة GSM مع محول USART والذي يمكن توصيله مباشرة بالكمبيوتر باستخدام وحدة MAX232 أو يمكن استخدام دبابيس Tx و Rx لتوصيله بوحدة تحكم دقيقة. يمكنك أيضًا ملاحظة المسامير الأخرى مثل MIC + و MIC- و SP + و SP- إلخ حيث يمكن توصيل ميكروفون أو مكبر صوت. يمكن تشغيل الوحدة بواسطة محول 12 فولت من خلال مقبس أسطواني عادي.
أدخل بطاقة SIM الخاصة بك في فتحة الوحدة وقم بتشغيلها ، يجب أن تلاحظ تشغيل مؤشر LED للطاقة. انتظر الآن لمدة دقيقة أو نحو ذلك ، وسترى مؤشر LED أحمر (أو أي لون آخر) يومض مرة واحدة كل 3 ثوانٍ. هذا يعني أن الوحدة النمطية الخاصة بك كانت قادرة على إنشاء اتصال ببطاقة SIM الخاصة بك. الآن يمكنك متابعة توصيل الوحدة الخاصة بك بالهاتف أو أي متحكم.
التواصل مع وحدة GSM باستخدام أوامر AT:
كما قد تكون خمنت ، يمكن لوحدة GSM التواصل من خلال الاتصال التسلسلي ويمكن أن تفهم لغة واحدة فقط وهي " أوامر AT ". أيًا كان ما قد ترغب في إخباره أو طلب وحدة GSM ، يجب أن يكون فقط عبر أوامر AT. على سبيل المثال ، إذا كنت تريد معرفة ما إذا كانت الوحدة النمطية الخاصة بك نشطة. يجب أن تطلب (إرسال) أمرًا مثل "AT" وسترد الوحدة النمطية الخاصة بك بـ "موافق".
يتم شرح أوامر AT هذه بشكل جيد في ورقة البيانات الخاصة بها ويمكن العثور عليها هنا في ورقة البيانات الرسمية الخاصة بها. حسنا! حسنا! إنها ورقة بيانات 271 صفحة وقد تستغرق أيامًا لقراءتها. لذا فقد قدمت لك بعض أوامر AT الأكثر أهمية أدناه حتى تتمكن من تشغيلها قريبًا.
في |
الردود بـ "موافق" للإقرار |
AT + CPIN؟ |
تحقق من جودة الإشارة |
في + COPS؟ |
ابحث عن اسم مزود الخدمة |
ATD96XXXXXXXX ؛ |
استدعاء الرقم المحدد ، ينتهي بفاصلة منقوطة |
في + 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 |
في + CMGF = 1 |
ضبط تكوين الرسائل القصيرة. "1" لوضع النص فقط |
AT + CMGS = "+91 968837XXXX" > نص CircuitDigest
|
لإرسال رسالة نصية إلى رقم معين هنا 968837XXXX. عندما ترى ">" ابدأ بإدخال النص. اضغط على Ctrl + Z لإرسال النص. |
AT + CGATT؟ |
للتحقق من اتصال الإنترنت على بطاقة SIM |
AT + CIPSHUT |
لإغلاق اتصال TCP ، وهذا يعني قطع الاتصال بالإنترنت |
AT + CSTT = "APN" ، "اسم المستخدم" ، "تمرير" |
اتصل بـ GPRS باستخدام APN ومفتاح المرور. يمكن الحصول عليها من مزود الشبكة. |
AT + CIICR |
تحقق مما إذا كانت بطاقة SIM بها حزمة بيانات |
في + CIFSR |
احصل على IP لشبكة SIM |
AT + CIPSTART = "TCP" ، "SERVER IP" ، "PORT" |
يستخدم لتعيين اتصال TCP IP |
في + CIPSEND |
يستخدم هذا الأمر لإرسال البيانات إلى الخادم |
مخطط الرسم البياني:
يظهر أدناه مخطط التوصيل لوحدة GSM البينية بوحدة التحكم الدقيقة PIC.
لقد قمنا ببساطة بتوصيل دبابيس Tx و Rx لوحدة GSM مع دبابيس Rx و Tx في PIC MCU PIC16F877A على التوالي. سيؤدي ذلك إلى إنشاء اتصال تسلسلي بين كليهما. أيضًا ، لا تنسَ إنشاء أرضية مشتركة لكل من وحدة GSM و PIC. لقد استخدمنا أيضًا شاشة عرض LCD لمعرفة حالة وحدة GSM الخاصة بنا. بمجرد الانتهاء من الاتصالات ، سيبدو جهازك كشيء أدناه.
تم إنشاء لوحة PIC Perf لسلسلة دروس PIC ، والتي تعلمنا فيها كيفية استخدام متحكم PIC. قد ترغب في العودة إلى دروس PIC Microcontroller التعليمية باستخدام MPLABX و XC8 إذا كنت لا تعرف كيفية نسخ برنامج باستخدام Pickit 3 ، لأنني سأتخطى كل هذه المعلومات الأساسية.
برمجة PIC Microcontroller:
يمكن العثور على البرنامج الكامل لهذا المشروع في الجزء السفلي من هذا البرنامج التعليمي. سأشرح هنا بعض الوظائف المهمة وأجزاء التعليمات البرمجية. يحتوي هذا البرنامج أيضًا على رموز LCD والتي كانت من Interfacing LCD with PIC Microcontroller ، يمكنك زيارة هذا البرنامج التعليمي إذا كنت مهتمًا بمعرفة كيفية استخدام LCD مع متحكم PIC.
كما ذكرنا سابقًا ، سنقوم بالتواصل بين PIC و GSM باستخدام أوامر AT من خلال الوضع التسلسلي للاتصال. لذلك ، علينا أولاً تهيئة وحدة الاتصالات USART في متحكم PIC الخاص بنا باستخدام Initialize _SIM900 () ؛ وظيفة. داخل هذه الوظيفة ، نعلن عن دبابيس Tx و RX ونقوم بتهيئة الاستقبال غير المتزامن والإرسال بمعدل 9600 باود ووضع 8 بت.
// *** تهيئة UART لـ SIM900 ** // void Initialize_SIM900 (باطل) {// **** إعداد دبابيس الإدخال / الإخراج لـ UART **** // TRISC6 = 0 ؛ // تم تعيين TX Pin كمخرج TRISC7 = 1 ؛ // تم تعيين RX Pin كمدخل // ________ مجموعة دبابيس I / O __________ // / ** تهيئة سجل SPBRG لمعدل البث بالباود المطلوب وتعيين BRGH للحصول على معدل باود سريع ** / 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 ** // void _SIM900_putch (char bt) {while (! TXIF)؛ // امسك البرنامج حتى يصبح TX buffer مجانيًا TXREG = bt ؛ // تحميل المخزن المؤقت لجهاز الإرسال بالقيمة المستلمة} // _____________ نهاية الوظيفة ________________ // // ** وظيفة للحصول على بايت واحد من التاريخ من UART ** // char _SIM900_getch () {if (OERR) // تحقق من وجود خطأ { CREN = 0 ؛ // إذا كان الخطأ -> إعادة تعيين CREN = 1 ؛ // If error -> Reset} while (! RCIF)؛ // امسك البرنامج حتى يتم إرجاع RX buffer مجانًا ؛ // تلقي القيمة وإرسالها إلى الوظيفة الرئيسية} // _____________ نهاية الوظيفة ________________ // // ** وظيفة لتحويل السلسلة إلى بايت ** // void SIM900_send_string (char * st_pt) {while (* st_pt) // إذا كان هناك عبارة عن char _SIM900_putch (* st_pt ++) ؛// معالجتها كبيانات بايت} // ___________ نهاية الوظيفة ______________ // // ** نهاية الرموز المعدلة ** // void _SIM900_print (حرف const char * ptr) {while (* ptr! = 0) {_SIM900_putch (* ptr ++) ؛ }
الوظائف المذكورة أعلاه عالمية ولا تحتاج إلى تغيير لأي تطبيقات. تم شرحهم فقط لتقديم مقدمة تقريبية. يمكنك الغوص بعمق فيها إذا كنت تريد من خلال الفهم.
الآن داخل وظيفتنا الرئيسية ، نقوم بتهيئة اتصال USART والتحقق مما إذا كنا قادرين على تلقي "موافق" عندما نرسل "AT" باستخدام سطر الكود أدناه
افعل {Lcd_Set_Cursor (2،1) ، Lcd_Print_String ("الوحدة غير موجودة") ؛ } بينما (! SIM900_isStarted ()) ؛ // انتظر حتى يقوم GSM بإرسال "موافق" Lcd_Set_Cursor (2،1) ؛ Lcd_Print_String ("تم اكتشاف الوحدة النمطية") ؛ __delay_ms (1500) ؛
الوظيفة SIM900_isStarted () ؛ سيرسل "AT" إلى GSM وينتظر الرد "موافق" منه. إذا كانت الإجابة بنعم ، فسيتم إرجاع 1 آخر 0 ؛
إذا لم يتم اكتشاف الوحدة أو إذا كان هناك أي مشكلة في الاتصال ، فستعرض شاشة LCD رسالة "الوحدة غير موجودة" ، وإلا ستعرض الوحدة النمطية تم اكتشافها وانتقل إلى الخطوة التالية حيث نتحقق مما إذا كان يمكن اكتشاف بطاقة SIM من خلال سطر من التعليمات البرمجية.
/ * تحقق مما إذا تم اكتشاف بطاقة SIM * / do {Lcd_Set_Cursor (2،1) ؛ Lcd_Print_String ("SIM غير موجودة") ؛ } بينما (! SIM900_isReady ()) ؛ // انتظر حتى يرسل GSM "+ CPIN: READY" Lcd_Set_Cursor (2،1) ؛ Lcd_Print_String ("تم اكتشاف SIM") ؛ __delay_ms (1500) ؛
سترسل الوظيفة SIM900_isReady () "AT + CPIN؟" إلى GSM وينتظر الرد "+ CPIN: READY" منه. إذا كانت الإجابة بنعم ، فسيتم إرجاع 1 آخر 0 ؛
إذا تم العثور على بطاقة SIM ، فسنحصل على بطاقة SIM معروضة على شاشة LCD. بعد ذلك ، يمكننا محاولة إجراء مكالمة باستخدام الأمر " ATD mobilenumber ؛ ". هنا كمثال استخدمت رقمي كـ ATD93643159XX ؛. يجب عليك استبدال رقم هاتفك المحمول هناك.
/ * إجراء مكالمة هاتفية * / do {_SIM900_print ("ATD93643XXXXX؛ \ r \ n")؛ // هنا نقوم بإجراء مكالمة على الرقم 93643XXXXX Lcd_Set_Cursor (1،1) ؛ Lcd_Print_String ("إجراء مكالمة….") ؛ } بينما (_SIM900_waitResponse ()! = SIM900_OK) ؛ // انتظر حتى يرسل ESP "موافق" Lcd_Set_Cursor (1،1) ؛ Lcd_Print_String ("تم إجراء المكالمة….") ؛ __delay_ms (1500) ؛
بمجرد وضع المكالمة ، ستعرض شاشة LCD رسالة تم إجراء المكالمة ويجب أن تتلقى مكالمة واردة إلى هذا الرقم المحدد.
يمكنك أيضًا الاتصال برقم الهاتف المحمول المتصل بوحدة GSM والحصول على إشعار بذلك على شاشة LCD الخاصة بك باستخدام الرمز أدناه
while (1) {if (_SIM900_waitResponse () == SIM900_RING) // تحقق مما إذا كانت هناك مكالمة واردة {Lcd_Set_Cursor (2،1) ؛ Lcd_Print_String ("مكالمة واردة !!")؛ }}
عندما تكتشف وحدة GSM مكالمة واردة ، ستعرض مكالمة واردة في السطر الثاني من وحدة LCD. ستتحقق الوظيفة _SIM900_waitResponse () من البيانات الواردة من وحدة GSM. عندما يتلقى SIM900_RING ، وهو ما يعادل "RING" بسبب انتظار waitResponce () ، سنعرض الحالة "مكالمة واردة".
يمكنك إنشاء وظائف خاصة بك مثل هذه لأداء جميع أنواع التنشيط تقريبًا باستخدام وحدة GSM. إذا كنت تريد ترميز الأشياء بشكل ثابت ، فيمكنك ببساطة استخدام وظيفة __SIM900_print () لإرسال أي أمر AT مثل هذا أدناه.
_SIM900_print ("AT + CPIN؟ \ r \ n")؛
تذكر أنه يجب اتباع كل أوامرك بـ "\ r \ n" للإشارة إلى إنهاء الأمر.
محاكاة:
بمجرد أن تفهم كيفية عمل البرنامج ، يمكنك محاولة محاكاة وإجراء تغييرات لتناسب احتياجاتك. ستوفر لك المحاكاة الكثير من الوقت. تم إجراء المحاكاة باستخدام Proteus ويبدو أدناه.
كما ترى ، استخدمنا خيار المحطة الافتراضية في Proteus للتحقق مما إذا كان البرنامج يستجيب كما هو متوقع. يمكننا تغذية القيم من خلال مربع الحوار المنبثق. على سبيل المثال بمجرد أن نضغط على Run ، سيظهر مربع حوار أسود مثل أعلاه ويعرض AT ، وهذا يعني أنه أرسل وحدة GSM AT ، والآن يمكننا الرد على PIC عن طريق كتابة المربع باسم "OK" واضغط على Enter وستستجيب الموافقة المسبقة عن علم له. وبالمثل يمكننا تجربة جميع أوامر AT.
إجراء واستقبال المكالمات باستخدام GSM و PIC:
بمجرد فهم كيفية عمل الكود والأجهزة ، ما عليك سوى تحميل البرنامج أدناه إلى الموافقة المسبقة عن علم وتشغيل الوحدة. يجب أن تعرض شاشة LCD "تم اكتشاف الوحدة" و "تم اكتشاف بطاقة SIM" و "تم وضع الاتصال" إذا كان كل شيء يعمل بشكل جيد. بمجرد رؤية "تم إجراء المكالمة" ، ستصلك مكالمة واردة على الرقم المحدد في البرنامج.
يمكنك أيضًا محاولة الاتصال بالرقم الموجود في وحدة GSM وستعرض شاشة LCD "مكالمة واردة" للإشارة إلى أنه يتم الاتصال ببطاقة SIM.
يظهر العمل الكامل للمشروع في الفيديو أدناه. آمل أن تكون قد فهمت المشروع واستمتعت به. إذا كانت لديك أي مشكلة في عمل الأشياء ، فقم بنشر سؤالك في قسم التعليقات أو في منتدياتنا وسأكون سعيدًا بمساعدتك.