SIM800

ارسال و دریافت sms در مد pdu با sim800

5/5 - (19 امتیاز)

به طور کلی دو فرمت برای ارسال و دریافت sms در gsm مودمها وجود دارد . فرمت ها عبارت است از text mode و pdu mode که توسط فرمان AT+CMGF در GSM تعیین می گردد . توسط فرمان AT+CMGF=1 مد text فعال و توسط فرمان AT_CMGF=0 مد pdu فعال می شود . اکثر gsm ها از جمله ماژول sim800  از هر دو فرمت pdu , text پشتیبانی می کنند . در برخی از gsm ها و موبایل های قدیمی فقط از فرمت pdu پشتیبانی می شود .

در فرمت text برای ارسال و دریافت sms از کاراکترهای نوشتاری استاندارد استفاده می شود . همچنین شما می توانید آموزش ارسال SMS فارسی در MODE TEXT را از همین سایت مطالعه کنید .

اما در فرمت pdu اطلاعات ارسال و دریافت باید به صورت قالب خاصی فشرده سازی و رمز نگاری شوند ، که در هنگام دریافت باید این اطلاعات رمزگشایی شوند تا برای ما قابل فهم شوند .

در ادامه به مزیت استفاده از mode pdu خواهیم پرداخت ، همانطور که می دانید تعداد کاراکترهایی که می توانیم در قالب یک sms ارسال کنیم برابر با 140 کاراکتر می باشد . این کاراکترها که شامل همه حروف بزرگ و کوچک و اعداد و علامت ها هستند را کاراکترهای اسکی می نامیم . هر کاراکتر اسکی مقدار 7 بیت از یک کاراکتر(8 بیت) را اشغال می کند . بنابراین زمانی که ما sms را ارسال می کنیم در هر بایت یک بیت بلااستفاده نیز ارسال می شود . در mode pdu ما طی عملیاتی از تمامی ظرفیت بیت ها استفاده می کنیم و تعداد کاراکتری را که می توانیم در قالب یک sms ارسال کنیم برابر با (140*8)/7=160 می باشد .

ارسال sms در mode pdu :

در ادامه با ذکر یک مثال به صورت عملی با نحوه فشرده سازی و ارسال یک پیامک در مد pdu آشنا می شویم . در این مثال ما می خواهیم کلمه hello را توسط سیمکارت رایتل به شماره مقصد 09120197955 ارسال کنیم .

mode pdu از سه نوع داده خاص استفاده می کند :

  1. octet : گروهی از داده های 8 بیتی به صورت هگزا دسیمال می باشد .
  2. semi-octet : گروهی از داده های 8 بیتی به صورت دسیمال می باشد .
  3. septet : گروهی از داده های 7 بیتی به صورت عدد صحیح می باشد .

کلمه hello شامل 5 کاراکتر است که septet نامیده می شود  . هر کدام از septet ها کاراکترهای 7 بیتی را تشکیل می دهند . برای ارسال باید septet ها به octet تبدیل شوند . اولین septet کاراکتر (h(1101000  می باشد که با افزودن کم ارزشترین بیت از septet دوم  به انتهای h به octet تبدیل می شود (1101000+1=11101000) . کاراکتر دوم 2 بیت از septet سوم دریافت می کند و این عملیات تا septet آخر ادامه می یابد .

ارسال sms در مد pdu
ارسال sms در مد pdu

بعد از اینکه متن sms به داده های octet تبدیل شد ، برای ارسال باید یک سری فیلد که توسط انستیتو استاندارد اروپا (ETSI) مشخص شده ، به قالب sms اضافه شود . کد زیر یک نمونه sms در فرمت pdu  است که به بررسی تمام فیلدهای آن می پردازیم .

AT+CMGF=0 
OK
AT+CMGS=19 
> 079189290000900231000B819021107959F50000FF05E8329BFD06 <control+z>

+CMGS: 6

OK
ارسال sms در مد pdu
ارسال sms در مد pdu

1 . طول شماره مرکز پیام را در مبنای هگز نشان می دهد . در قسمت 3 توضیح داده خواهد شد .

2 . نوع شماره مرکز پیام می باشد ، اگر شماره با + شروع شود از نوع بین الملل است و به جای آن عدد 91 قرار می گیرد در غیر اینصورت عدد 81 قرار می گیرد .

3 . شماره مرکز پیام از نوع semi-octet می باشد ، در این مثال سیم کارت اپراتور رایتل است و شماره مرکز پیام  989200000920+ می باشد . شماره ها باید دو رقم به دو رقم جدا و برعکس شود . اگر تعداد ارقام شماره فرد باشد باید مقدار F به آخر آن اضافه شود . در نهایت طول شماره مرکز پیام 7 می باشد که در قسمت 1 قرار داده شده است .

02 90 00 00 29 89 91

توسط فرمان زیر شماره مرکز پیام سیم کارت را بدست می آوریم :

AT+CSCA?

+CSCA: "+989200000920",145

OK

4 . گزارش تحویل یا delivery را فعال می کند ، عدد  31 فعال و عدد 11 غیر فعال می باشد . شما می توانید آموزش فعال سازی delivery در ماژول های GSM را در همین سایت مطالعه نمایید .

5 . شماره Index پیام را مشخص می کند ، اگر مقدار 00 باشد متن پیام فعلی و غیر صفر مقدار Index پیام ذخیره شده در حافظه را نشان می دهد .

6 . طول شماره مقصد از نوع semi-octet می باشد .

7 . نوع شماره مقصد را مشخص می کند ، اگر با + آغاز شود از نوع بین الملل است و به جای آن عدد 91 قرار می گیرد در غیر اینصورت عدد 81 قرار می گیرد .

8 . شماره مقصد  09120197955  می باشد ، این شماره باید دو رقم دو رقم جدا و برعکس شود . اگر تعداد ارقام شماره فرد باشد باید مقدار F به آخر آن اضافه شود .

     09 12 01 97 95 5F
81 90 21 10 79 59 F5

9 . پروتکل پیام  از نوع sms یا mms و … را مشخص می کند . بنابراین برای sms مقدار 00 قرار می گیرد .

10 .  نوع کدگذاری محتوی پیام می باشد ، mode pdu دارای دو نوع فرمت Defult Alphabet و Unicode  می باشد .

مقدار 00 فرمت Defult Alphabet را فعال می کند که همان استاندارد اسکی می باشد و برای ارسال پیام های انگلیسی استفاده می شود . هر کاراکتر در مد Defult Alphabet برابر یک بایت می باشد .

مقدار 08 فرمت Unicode  را فعال می کند . هر کاراکتر در مد Unicode  برابر دو بایت می باشد که برای ارسال پیام های فارسی می توانیم از این استاندارد استفاده کنیم . در ادامه با ذکر مثال به آن خواهیم پرداخت .

11 . مدت زمانی است که یک sms می تواند در شبکه معلق بماند تا به مقصد تحویل داده شود ، مدت زمان طبق جدول زیر مشخص می شود .

ارسال sms در مد pdu
ارسال sms در مد pdu

12 . طول septet های متن پیام را مشخص می کند ، کلمه hello از 5 septet تشکیل شده است .

13 . متن تبدیل شده به octet پیام که شامل  E8329BFD06 می باشد .

نکته : متن پیام انگلیسی در محدوده کاراکترهای اسکی می باشد که هر کاراکتر معادل یک بایت می باشد . اما اگر متن پیام حروف فارسی یا فارسی و انگلیسی باشد ، باید از استاندارد Unicode استفاده شود . در مد Unicode دیگر فشرده سازی انجام نمی شود و هر حرف در استاندارد Unicode برابر دو بایت در مبنای HEX ارسال می شود . بنابراین تعداد کاراکترهای فارسی که در قالب یک sms می توان ارسال کرد 140/2=70  کاراکتر می باشد . جدول زیر کاراکترهای یونیکد فارسی و انگلیسی می باشد .

 

ارسال sms فارسی با sim800
ارسال sms فارسی با sim800

 

ارسال sms فارسی در مد pdu با sim800 :

برای مثال معادل کلمه فارسی “سلام” را از جدول استخراج می کنیم (0633064406270645) و در فیلد سیزدهم قرار می دهیم و طبق آموزش داده شده فیلد دهم را برای مد Unicode برابر 08 قرار می دهیم . طول کاراکترهای پیام نیز 08 است که در فیلد دوازدهم قرار می دهیم .

AT+CMGF=0

OK
AT+CMGS=22

>   079189290000900231000B819021107959F50008FF080633064406270645 <control+z>

 
+CMGS: 7

OK

 

دریافت sms در مد pdu با sim800 :

برای خواندن پیام دریافتی از فرمان AT+CMGR استفاده می کنیم . در مثال زیر پیام حاوی متن “hello” می باشد که به شرح آن می پردازیم :

AT+CMGR=2

+CMGR: 1,"",24
06918919015000240C9189190291975500008121320242714105E8329BFD06

OK
دریافت sms در مد pdu
دریافت sms در مد pdu

 

1 . طول شماره مرکز پیام را در مبنای هگز نشان می دهد .

2 . نوع شماره مرکز پیام می باشد اگر شماره با + شروع شده باشد از نوع بین الملل است و به جای آن عدد 91 قرار می گیرد در غیر اینصورت عدد 81 قرار می گیرد .

3 . شماره مرکز پیام از نوع semi-octet می باشد ، شماره ها باید دو رقم به دو رقم جدا و برعکس شود .

91 89 19 01 50 00
+9891100500

4 . مربوط به گزارش دریافت یا delivery  می باشد ، اگر شخص ارسال کننده sms درخواست delivery نداده باشد مقدار 04 و اگر درخواست delivery داده باشد مقدار 24 می باشد .

5 . طول شماره مقصد از نوع semi-octet می باشد .

6 . نوع شماره مقصد را مشخص می کند . اگر با + آغاز شود از نوع بین الملل است و به جای آن عدد 91 است در غیر اینصورت عدد 81 می باشد .

7 . شماره فرستنده پیام است ، این شماره باید دو رقم دو رقم جدا و برعکس شود .

91 89 19 02 91 97 55
+989120197955

8 . این بخش مربوط به ارسال sms یا mms است که برای sms مقدار 00 خواهد بود .

9 . این بخش تعیین کننده کاراکترهاي تک بایتی یا دو بایتی است. براي کاراکترهاي تک بایتی 00 و براي کاراکترهاي دو بایتی 08 خواهد بود . که کاراکترهاي دو بایتی براي ارسال کلمات فارسی به کار می رود.

10 . این بخش مربوط به تاریخ و زمان ارسال شدن پیام است که به صورت Semi-Octet می باشد . باید دو رقم دو رقم جدا و برعکس شود . دو رقم اول مربوط به سال است که باید عدد 20 به ابتدای آن اضافه شود . به ترتیب ماه ، روز ، ساعت ، دقیقه ، ثانیه و time zoon است که نماینده موقعیت جغرافیایی بر اساس GMT است و قانون آن تقسیم بر 4 است . که 14/4=3.5 ساعت اختلاف زمانی ایران با گرینویچ می باشد .

81 21 32 02 52 95 41
18 12 23 20 25 59 14
2018/12/23 20:25:59 +14″

11 . این بخش تعداد septet های متن فشرده شده به فرمت pdu می باشد .

12 . این بخش متن اصلی پیام است که به فرمت pdu فشرده شده است و معادل کلمه hello می باشد . در حالت عادی غیر قابل فهم است و نیاز به رمز گشایی دارد .

ارسال sms در مد pdu
ارسال sms در مد pdu

 

رمز گشایی sms در مد pdu :

براي تبدیل شدن به Septet ، اولین  Octet با ارزش ترین بیت خود را به Octet دوم می دهد . Octet دوم با تحویل دو بیت با ارزش خود به Octet سوم و دریافت با ارزش ترین بیت از Octet اول به Septet تبدیل می شود . و به همین ترتیب آخرین Octet پنج بیت با ارزش خود را از دست می دهد و چهار بیت دریافتی از octet چهارم در جلوي آن قرار می گیرد .

برای تشخیص اینکه sms دریافتی انگلیسی هست یا فارسی باید فیلد نهم بررسی شود اگر 00 باشد متن انگلیسی و نیاز به رمزگشایی دارد و اگر مقدار 08 باشد متن پیام فارسی می باشد که نیاز به رمزگشایی ندارد و از جدول مقادیر یونیکد پیام را استخراج می کنیم . مثال زیر نمونه پیام فارسی با متن “سلام” می باشد .

AT+CMGR=3

+CMGR: 1,"",27
06918919015000240C91891902919755000881213202529541080633064406270645

OK

نکته آخر طول قالب یک پیام است ، که به صورت یک عدد دسیمال مقابل فرمان AT+CMGS ارسال می شود . تعداد کاراکترهای بعد از شماره مرکز پیام تقسیم بر دو ، زیرا جفت کاراکتر شمارش می شود .

AT+CMGS=19
> 079189290000900231000B819021107959F50000FF05E8329BFD06 
+CMGS: 6
OK

نویسنده : حسین غیاثوند
تاریخ انتشار : 1397/10/2

نوشته های مشابه

مشترک شدن
اطلاع رسانی کن
guest
19 دیدگاه
قدیمی ترین
جدیدترین محبوب ترین
بازخورد داخلی
مشاهده همه نظرات