nournabhan

أوامر AT بشكل مبسط و موسع

13 ردود في هذا الموضوع

بسم الله الرحمن الرحيم

والصلاة والسلام على سيدنا محمد واله وصحبه أجمعين

السلام عليكم ورحمة الله وبركاته

مقدمة : سنتكلم إن شاء الله عن أوامر AT بشكل مبسط و موسع قليلاً بالنسبة للهاتف المحمول

أوامر AT commands: هي مجموعة من الأوامر التي يستخدمها الكمبيوتر للتحكم والتواصل مع أجهزة الاتصالات الخارجية مثل المودم أو الجوال أو GSM modem أو GPRS Modem

الآن وصل الكمبيوتر مع جهاز الموبايل أو المودم المعتبر :

طبعا الهاتف المحمول لابد أن يكون من الأنواع الجديدة أو على الأقل يحوي تقنية متقدمة وليس قديم وأغلب الأنواع الحديثة تدعم أوامر AT Commands وهذا ما يهمنا عموما في سياق الموضوع سنتعرف على كيفية معرفة صلاحية الهاتف لموضوعنا

يتم توصيل الموبايل مع الكمبيوتر بواسطة USB Cable أو أحد الأشكال المعروفة في هذا العصر

01273592438.jpg

تعريف الموبايل Driver:

طبعا عند توصيل الجهاز مع الحاسوب عبر الوصلة فأن الحاسوب سيتعرف عليه كجهاز جديد بالتالي لا بد من تعريف هذا الجهاز عبر ملفات التعريف Driver الخاصة به Nokia Connectivity Cable Driver في بحثنا هذا سنعتمد على هاتف من طراز نوكيا Nokia

طبعا مع الجهاز يأتي قرص CD مضغوط يحوي التعريف وبرنامج الاتصال أو بطرق أخرى

يمكنك البحث في الانترنت عن التعريف وبالنسبة للنوكيا أرح نفسك ونصب برنامج آل بي سي سيوت Nokia PC Suite

بعد تنصيب Nokia PC Suite و الانتهاء من التنصيب قم بوصل الجهاز وسيتعرف عليه الجهاز وسيتم تثبيت الملفات اللازمة للوصلة

الآن الوصلة معرفة والجهاز متصل

بعد انتهاء التعريف : نذهب إلى خصائص النظام من لوحة التحكم Device Manager نجد تحت بند Modems المودم نجد انه تم تعريف مودم خاص بجهازك المحمول الذي تم توصيله

ومن صفحة خصائص المودم ضمن تبويب Modemنعرف رقم المنفذ المخصص لهذا المودم وهو كما في الصورة المنفذCom4

11273592610.jpg

الأمر مشابه للمودم العادي المتصل عبر Serial Port والذي نستخدمه للاتصال بالهاتف أو الانترنيت

الآن الأمور جيدة لدينا هاتف متصل مع الجهاز ومعتبر كمودم ونعرف المنفذ الخاص به يبقى علينا الآن إجراء التجارب لكيفية التعامل مع هذا المودم

الاتصال بالمودم وإرسال الأوامر له: طبعا البرنامج المعتاد هو Hyper Terminal الشهيرة الموجودة مع Windows

أهم خطوة هي أن نتأكد من أن الجهاز يدعم أوامر AT

سنبدأ الآن إن شاء الله بشرح أساسي للتعامل مع Hyper Terminal ثم سننتقل للغة البرمجة حتى نتعرف على كيفية التعامل مع هذه الأوامر من خلال برنامجنا

بالنسبة للـــ Hyper Terminal

نفتح برنامج Hyper Terminal ضمن مساره الافتراضي في الجهاز XP

01273592810.jpg

نحدد اسم الاتصالوهو اسم اختياري حسب رغبتك ثم نضغط OK

01273592865.jpg

نحدد منفذ الاتصال (Com4)أو المنفذ المخصص للهاتف المحمول الموصول مع الجهاز و الذي تعرفنا عليه سابقا من خلال خصائص المودم طبعا ستجد المنفذ ضمن القائمة

01273593035.jpg

تظهر نافذة الخصائص للمودم HardWare =Configure اضغط OK

01273593554.jpg

تم إعداد البرنامج فتظهر لنا الشاشة التالية لنكتب فيها الأوامر والبيانات التي نريد إرسالها إلى الموبايل وتظهر فيها أيضا رد الموبايل على تلك الأوامر

11273593554.jpg

الآن حاول أن تكتب في صفحة البرنامج البيضاء أي حرف إذا لم يظهر مع شيء على الشاشة فقم بعميلة الضبط كما في الصورة التالية

01273593861.jpg

انتقل للتبويب الثاني و اضغط على ASCII Setup

01273594325.jpg

ضع علامة الاختيار على الخيار الثاني Echo Typed Characters Locally

01273594371.jpg

بعد ذلك اكتب AT ثم اضغط Enter إذا ظهر لك OK كما في الصورة التالية فإن الجوال يدعم أوامر AT

11273593554.jpg

الآن و الحمد لله تم التأكد من دعم الهاتف المحمول لأوامر AT

تطبيق سريع :

طبعا أوامر AT عديدة ومتنوعة من اتصال و إرسال و استقبل و معرفة خصائص وبحث .... الخ ....

وسنختار منها الاستخدامات الشائعة بالنسبة للـــ Hyper Terminal

سنقوم الآن بتجربة إجراء اتصال صوتي عبر رقم هاتف محدد وكذلك إرسال رسالة نصية لهذا الهاتف

أولاً : إجراء اتصال برقم هاتف :

داخل نافذة Hyper Terminal البيضاء نكتب

AT

ثم نضغط زر الإدخال ENTER

فيكون الرد هو OK طبعا تم شرح هذه النقطة من سابق

الآن نكتب الأمر التالي وهو للاتصال ATD أو ATDT وهو على الشكل التالي :

ATDT <+963966993175;>

ثم نضغط زر الإدخال ENTER

ماذا ترى ؟ الآن انظر إلى شاشة جوالك سترى جهازك يقوم بعملية الاتصال

تستطيع تغير الرقم أو كتابته بأي طريقة فربما يكون داخلي أو خارجي المهم أنك تكتب الرقم سواء داخلي أو دولي ADTA 0966993175

ملحوظة ربما تثير فضولك الفاصلة المنقوطة الموجودة في نهاية الرقم فما الغاية منها

هذه الفاصلة المنقوطة تشير إلى المودم على أن المكالمة هي مكالمة صوتية وليست من نوع البيانات أو الفاكس وبدونها سيتم الاتصال بمكالمة بيانات والرقم هو رقم هاتفي بالتالي لن يتم الاتصال فالفاصلة ضرورية لهذه العملية .

ثانياً : إرسال رسالة نصية :

سنبدأ ببعض المعلومات النظرية حول الرسائل وهي مقتبسة من مشاركة الأخ م. عبد الملك هنا

الرسائل النصية القصيرة (ٍSMS) تنقسم في تركيبها إلى قسمين

1- أسلوب النص( Text Mod)

2- أسلوب وحدات البيانات (PDU Mode)

أسلوب وحدات البيانات (PDU mode)

1-تكون الرسالة على شكل سلسلة من البيانات على بالهكسا (hexadecimal) مثال: A782340B11DCEFFF

2-أصعب لأن المبرمج يحتاج إلى معرفة تقسيم ال

Frame وماذا تعنى كل خانة بالهكسا مثال:

A789660B11DCEFFF

A78 : رمز الرسائل القصيرة

9660 : رقم الفتح

B11DC : الرقم المرسل إليه

CEFFF : نص الرسالة

3-أكثر مرونة

أسلوب النص text mod

1-تكون الرسالة بال ASCII بحروف مقروءة للمستخدم

مثال:How Are You

2-الأبسط في الاستخدام ولا يحتاج المبرمج سوى كتابة الرسالة والرقم المرسل إليه بشكل صحيح

3-أقل مرونة وأقل إمكانية لاستخدامها في تطبيقات مختلفة

المثال في فقرة 2 ليس دقيق وإنما للتوضيح فقط

• أسلوب النص أقل مرونة لأن التركيبة ثابتة واللغة ثابتة مثلاُ لو أردت أن ترسل رسالة بالعربي ، لن تتمكن من ذلك إذا كنت تستخدم أسلوب النص

• أسلوب وحدة البيانات تحتاج إلى برنامج للتحويل من هكسا إلى لغة مقروءة عند المستقبل وعلى هذا البرنامج أن يقوم بتحليل سلسلة الهكسا وتفكيكها اعتمادا على معرفته بتركيب إل Frame المستخدم في أسلوب وحدة البيانات

الآن ننتقل لعملية الإرسال :

طبعا لن ننسى الهاتف يدعم AT أليس كذلك؟

الآن نكتب الأمر التالي هو AT+CMGF=?

ثم نضغط زر الإدخال ENTER

وهو يستعلم عن نمط الرسائل التي يدعمها الموبايل وهناك نمطين SMS PDU و SMS Text كما ذكر أنفاً

ورد الموبايل على هذا الأمر هو الرقم 0 و 1 وصفر تعنى النمط SMS PDU و واحد تعنى النمط SMS Text

أي إن الموبايل يدعم النمطين ولو ظهر أحدهما فالموبايل يدعم نوع دون أخر

01273595295.jpg

ونحن سنستخدم النمط SMS Text لأنه الأسهل حيث يتم إرسال الرسالة إلى الموبايل على هيئة نص عادى بدون أية معالجة

لذلك سنكتب الأمر التالي لنجعل النمط هو SMS Text

الأمر هو AT+CMGF=1 ثم Enter ورد الموبايل عليه هو OK

11273595295.jpg

وزيادة في التأكيد سنستعلم عن النمط المستخدم لنتأكد انه SMS Text

ولذلك سنكتب الأمر AT+CMGF? ليكون الرد 1 مما يعنى أن النمط المستخدم هو SMS Text

لاحظ أن الاختلاف بين هذا الأمر وبين ما كتبناه سابقا هو علامة تساوى

21273595295.jpg

الأمر التالي هو AT+CMGS وهو إرسال SMS

وصيغته التالية "AT+CMGS="0966993175 حيث إن الرقم بين العلامتين هو رقم الموبايل الذي تريد أن ترسل له الرسالة

ورد الموبايل على هذا الأمر هو العلامة < حيث ينتظر منك الموبايل أن تكتب نص الرسالة

31273595295.jpg

نكتب نص الرسالة ولكن لن ننهى النص بـ Enter ولكن بالضغط على CTRL+Z ليتم إرسال الرسالة

ملحوظة :

نعلم أن لكل حرف كود معين يسمى AScii Code (الاسكى كود) وهناك حروف تكتب مثل الحروف العادية وهناك حروف لا تكتب ولكن لها معنى

ونلاحظ انه عند نهاية كل أمر كنا نضغط ENTER وهذا يعنى إرسال حرف الاسكى كود له هو 13 بالنظام العشري وD بالنظام السداسي عشر وهذا الحرف يسمى Carriage Return واختصارا CR

وأيضا نلاحظ انه عن إنهاء الرسالة ضغطنا CRTL+Z وهذا يعنى أننا أرسلنا الحرف الذي كوده 26 بالنظام العشري و A1 بالنظام السداسي عشر واسمه Substitute أو اختصاراً Sub

بعد الانتهاء من هذين القسمين أنوه إلى انه يمكن إجراء جميع أوامر AT بالها يبر وربما بفعالية أكبر من بعض لغات البرمجة لكن كوننا في مجتمع برمجي فما يهمنا أن تكون هذه العمليات تنفذ من خلال برنامجنا .

صراحة أنا الموضوع كله بحثت عنه لأجل إجراء مكالمة ليست صوتية أو بيانات أو فاكس وإنما مكالمة خدمة مثل الاستعلام عن الرصيد و التي تحوي في بدايتها رمز النجمة * وفي نهايتها رمز المربع # ولم تفلح معي إلى الآن مثال *150*5555#

وللامانة ما سبق قمت بتجميعه من هنا وهناك مع اضافة مايلزم وتصويب الخطا بعد التجربة

وكل ما سبق هو مقدمة للرد اللاحق وهو الموضوع الاساسي

نعود لموضوعنا :

بعد أن تركزت في أذهاننا أساسيات هذه العملية و أوامر AT و الفائدة منها سنقوم بكتابة بعض الأكواد التي نتعامل مع AT من خلال برنامجنا

اللغة المستخدمة VB6

بسم الله نبدأ :

سنستخدم الأداة Microsoft Comm Control يعني MSComm

ببساطة افتح مشروع جديد

أضف الأداة (Microsoft Comm control 6.0) كما تراها في الصورة التالية :

اضغط CTRL+T للوصول لنافذة الComponents وابحث عن الأداة وأضفها

01273595668.jpg

بعد أن تضيف الأداة جهز النموذج على هذا الشكل بالأدوات التالية :

أداة Microsoft Comm control 6.0 عدد 1 تحت مسمى MSComm1

أداة Text عدد 3 تحت مسمى TextCom و TextNum و TextMsg

أداة Command عدد 2 تحت مسمى CommandMsg و CommandCall

هذا هو تصميم الفورم :

11273595668.jpg

الآن الصق الكود التالي كاملا :

وهو كود الرسالة للزر الأول و الاتصال للزر الثاني :

 


'AT >> VB4ARAB
Private Sub CommandCall_Click()
'CALL
MSComm1.CommPort = TextCom.Text
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputLen = 0
MSComm1.PortOpen = True
MSComm1.Output = "AT" & Chr$(13) & Chr(10)
MSComm1.Output = "ATDT" & Chr$(34) & TextNum.Text & ";" & Chr$(13) & Chr(10)
MSComm1.PortOpen = False
End Sub

Private Sub CommandMsg_Click()
MSG
MSComm1.CommPort = TextCom.Text
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputLen = 0
MSComm1.PortOpen = True
MSComm1.Output = "AT" & Chr$(13) & Chr(10)
MSComm1.Output = "AT+CMGF=1" & Chr$(13) & Chr(10)
MSComm1.Output = "AT+CMGS=" & Chr$(34) & TextNum.Text & Chr$(34) & Chr(13) & Chr(10)
MSComm1.Output = TextMsg.Text & Chr(26)
MSComm1.PortOpen = False
End Sub




الآن شغل البرنامج و أملأ المدخلات المطلوبة : المنفذ و الرقم ونص الرسالة ثم جرب زر الاتصال وزر الإرسال .

تم تعديل بواسطه المزمجر
3

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

الآن سوف نقوم بعملية تسهيل لبرنامجنا حتى لا نجبر المستخدم إلى الذهاب إلى خصائص المودم فسوف نقوم من خلال برنامجنا بالبحث عن المنافذ المتاحة و إضافتها إلى قائمة منسدلة وبذلك نسهل على المستخدم عملية الاختيار .

نضيف موديولModule جديد ونسميه ListCommPorts

ونضع فيه الكود التالي :


Option Explicit
'// API Declarations
Public Declare Function CreateFile Lib
"kernel32" Alias "CreateFileA" (ByVal
lpFileName As String, ByVal
dwDesiredAccess As Long, ByVal
dwShareMode As Long,
lpSecurityAttributes As
SECURITY_ATTRIBUTES, ByVal
dwCreationDisposition As Long, ByVal
dwFlagsAndAttributes As Long, ByVal
hTemplateFile As Long) As Long
Public Declare Function CloseHandle Lib
"kernel32" (ByVal hObject As Long) As
Long
'// API Structures
Public Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
'// API constants
Public Const FILE_SHARE_READ = &H1
Public Const FILE_SHARE_WRITE = &H2
Public Const OPEN_EXISTING = 3
Public Const FILE_ATTRIBUTE_NORMAL =
&H80
'// Return TRUE if the COM exists, FALSE
if the COM does not exist
Public Function COMAvailable(COMNum As
Integer) As Boolean
Dim hCOM As Long
Dim ret As Long
Dim sec As SECURITY_ATTRIBUTES
'// try to open the COM port
hCOM = CreateFile("[url="file://\.\COM"]\\.\\COM[/url]" &
COMNum & "", 0, FILE_SHARE_READ + _
FILE_SHARE_WRITE, sec,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
If hCOM = -1 Then
COMAvailable = False
Else
COMAvailable = True
'// close the COM port
ret = CloseHandle(hCOM)
End If
End Function

نعود الآن إلى النموذج form ونعدل قليلا في التصميم ليصبح على الشكل التالي :

21273595668.jpg

ماذا أضفنا : أداتين فقط

الأولى زر أمر جديد Command اسمه AvailablComm

الثانية قائمة منسدلة جديدة اسمها cboComm

هذا التصميم الجديد سيتيح لنا معرف المنافذ المتاحة بالنقر على الزر ما هي المنافذ المتاحة

الآن نضع الكود التالي:أسفل الكود في الفورم وهما حدث النقر للزر ليظهر المنافذ المتاحة وكذلك حدث النقر على المنفذ لينتقل الرقم إلى صندوق رقم المنفذ تلقائيا بالضغط عليه

   Private Sub AvailablComm_Click()
'AvailablComm
Dim iCount As Integer
cboComm.Clear
For iCount = 1 To 25
If COMAvailable(iCount) Then
cboComm.AddItem iCount
End If
Next
cboComm.ListIndex = 0
End Sub
Private Sub cboComm_Click()
'print
TextCom.Text = cboComm.Text
End Sub

في كود فحص المنافذ ستجد الرقم 1 الى 25طبعا تستطيع إنقاص الرقم أو زيادته أنا اعتمدت فحص 25 منفذفقط.انتهينا الآن من برنامجنا الصغير الذي يقوم بعمليات الاتصال و إرسال الرسائل. __________________

سنتجه الآن إلى أوامر AT أخرى ربما تكون ذات استخدام قليل لكنه من باب التوسع :لكن قبل الدخول في هذا القسم سنقوم بعمل برنامج صغير أخر بدلاً من الهايبر لتنفيذ أوامرنا عليه أولاً نستعرض بعض الأوامر لل AT وحاول أن تجربها على الهايبر

AT commands set for Nokia GSM and WCDMA products

Call control

Command Description

ATA Answer command

ATD Dial command

ATH Hang up call

ATL Monitor speaker loudness

ATM Monitor speaker mode

ATO Go on-line

ATP Set pulse dial as default

ATT Set tone dial as default

AT+CSTA Select type of address

AT+CRC Cellular result codes

Data card control commands

Command Description

ATI Identification

ATS Select an S-register

ATZ Recall stored profile

AT&F Restore factory settings

AT&V View active configuration

AT&W Store parameters in given profile

AT&Y Select Set as power up option

AT+CLCK Facility lock command

AT+COLP Connected line identification presentation

AT+GCAP Request complete capabilities list

AT+GMI Request manufacturer identification

AT+GMM Request model identification

AT+GMR Request revision identification

AT+GSN Request product serial number identification (IMEI)

Phone control commands

Command Description

AT+CBC Battery charge

AT+CGMI Request manufacturer identification

AT+CGMM Request model identification

AT+CGMR Request revision identification

AT+CGSN Request product serial number identification

AT+CMEE Report mobile equipment error

AT+CPAS Phone activity status

AT+CPBF Find phone book entries

AT+CPBR Read phone book entry

AT+CPBS Select phone book memory storage

AT+CPBW Write phone book entry

AT+CSCS Select TE character set

AT+CSQ Signal quality

Computer data card interface commands

Command Description

ATE Command Echo

ATQ Result code suppression

ATV Define response format

ATX Response range selection

AT&C Define DCD usage

AT&D Define DTR usage

AT&K Select flow control

AT&Q Define communications mode option

AT&S Define DSR option

AT+ICF DTE-DCE character framing

AT+IFC DTE-DCE Local flow control

AT+IPR Fixed DTE rate

Service

Command Description

AT+CLIP Calling line identification presentation

AT+CR Service reporting control

AT+DR Data compression reporting

AT+ILRR DTE-DCE local rate reporting

Network communication parameter commands

Command Description

ATB Communications standard option

AT+CBST Select bearer service type

AT+CEER Extended error report

AT+CRLP Radio link protocol

AT+DS Data compression

Miscellaneous commands

Command Description

A/ Re-execute command line

AT? Command help

AT*C Start SMS interpreter

AT*T Enter SMS block mode protocol

AT*V Activate V.25bis mode

AT*NOKIATEST Test command

AT+CESP Enter SMS block mode protocol

SMS commands

SMS text mode

Command Description

AT+CSMS Select message service

AT+CPMS Preferred message storage

AT+CMGF Message format

AT+CSCA Service centre address

AT+CSMP Set text mode parameters

AT+CSDH Show text mode parameters

AT+CSCB Select cell broadcast message types

AT+CSAS Save settings

AT+CRES Restore settings

AT+CNMI New message indications to TE

AT+CMGL List messages

AT+CMGR Read message

AT+CMGS Send message

AT+CMSS Send message from storage

AT+CMGW Write message to memory

AT+CMGD Delete message

SMS PDU ode

Command Description

AT+CMGL List Messages

AT+CMGR Read message

AT+CMGS Send message

AT+CMGW Write message to memory

تم تعديل بواسطه المزمجر
3

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

موضوع مهم جدا وجميل اخى المزمجر ولك وحشة والله من أيام ال vb :)

مثبت فى القسم ان شاء الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

بارك الله فيك أخي الغالي حريف برمجة  :blush:

والله مشتاق للجميع لكن الدنيا دوارة

دخت وانا عما دور على الموضوع روح للاخر مش لاقيه ارجع للاول مش لاقيه  :ph34r:

اتمنى لك دوام التألق

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

الحمد لله على نعمه اتمنى لك دوام التوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

جزيتم خيرا..الموضوع جيد ومفيد...لاحرمت الاجر والثواب..

الحمدلله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

ما شاء الله حولك شكرا جزيلا لهذا الموضوع الشيق

وكرمك الله من علمه

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

جزاك الله كل خير أخي المزمجر

و نورت المنتدى بعودتك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

تسلم يداك اخي المزمجر بارك الله بك ونفع بك

ارسال طلب مثل *100# USSD command

يكون كالتالي

Sending USSD Commands

+CUSD=1,"USSD-Command"

e.g. AT+CUSD=1,"*100#"

for some devices you will need to attach ",15" to your AT-command, as there won't come any return otherwise:

e.g. AT+CUSD=1,"*100#",15

اذا كان الامر ناتجه قائمة

تستطيع ارسال اختيارك من القائمة مثل الامر الأساسي

lمثلا لاختيار العنصر الثالث من القائمة

AT+CUSD=1,"3"

المصدر

تحياتي

تم تعديل بواسطه ihope
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

Sending USSD Commands

+CUSD=1,"USSD-Command"

e.g. AT+CUSD=1,"*100#"

for some devices you will need to attach ",15" to your AT-command, as there won't come any return otherwise:

e.g. AT+CUSD=1,"*100#",15

لدي المساعدة في هذا المجال فقط راسلني ان أردة المساعدة

[email protected]

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

ازاي اكتب الاوامر دي بلغه ال VHDL

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .