ارسال پیامک فارسی با ماژول های GSM شرکت Quectel

ارسال پیامک فارسی با ماژول های GSM شرکت Quectel

ارسال پیامک فارسی با ماژول های GSM شرکت Quectel
ارسال پیامک فارسی با ماژول های GSM شرکت Quectel

یکی از قابلیت‌های خوب ماژول‌های gsm ارسال و دریافت پیامک هست که به کمک اون میتونیم از راه دور دستگاه خودمون رو کنترل کنیم، ارسال و دریافت پیامک به‌صورت انگلیسی به‌راحتی قابل انجام هست اما به‌صورت فارسی دردسرهای خودش رو داره، توی این آموزش میخوایم علت این دردسر و همچنین نحوه ارسال پیامک فارسی با ماژول MC60 رو بررسی کنیم، پس با سیسوگ همراه باشید…

 

چرا زبان فارسی همیشه مشکل ساز هست؟!!

خب فقط ما این‌طور نیستیم! هر زبانی غیر از انگلیسی همین مشکلات رو داره درواقع این مربوط به بحث encoding هست. بزارید این‌طور بررسی کنیم: شما یه کامپیوتر دارید که غیر از اعداد و ارقام هیچی سرش نمیشه (هرچند که اونم سرش نمیشه و فقط 0 و 1 میفهمه🤦‍♂️ اما نمیخوایم از این پیچیده‌ترش کنیم!) حالا ما میخوایم یکسری حروف رو بهش بشناسونیم، کاری که میتونیم بکنیم و همین‌طور هم هست اینه که بیایم و به هر حرف یک عدد اختصاص بدیم و به‌صورت قراردادی همیشه از اون استفاده کنیم، نمونش استاندارد UTF-8 هست. هر کاراکتر توی این استاندارد میتونه از 1 تا 4 بایت رو اشغال کنه. به‌طور مثال اگر حرف ما “a” باشه 1 بایت اشغال میکنه و اگر “ش” باشه، 2 بایت اشغال میکنه (توی این لینک میتونید لیست کاراکترها رو ببینید به همراه کد اونها). حالا توی اکثر پروتکل‌های ارتباطی سطح پایین که معمولاً الکترونیکی‌ها باهاش سروکار دارند پکت های دیتا 8 بیتی (1 بایتی) هست و به همین خاطر کاراکترهایی که میتونیم ارسال کنیم محدود هست. در اصل همون جدول ASCII خودمون رو فقط میتونیم ارسال کنیم با چندتا کاراکتر بیشتر (که کاربرد چندانی ندارند) (خود ASCII هفت بیتی هست).

 

ascii table

 

برای اینکه حجت بر شما تمام بشه میتونید یه تست جالب انجام بدید، اگر که بخواید با گوشی خودتون یه پیامک تمام انگلیسی بفرستید پیامک اول 160 کاراکتری هست و اگر از 160 تا بیشتر بشه دوتا پیامک حساب میشه، اما اگر که بخواید پیامک فارسی بفرستید بعد از 70 تا کاراکتر پیامک دوم حساب میشه و دلیلش هم همینه که کاراکترهای فارسی دو برابر فضا اشغال می‌کنند توی پشت‌صحنه (اون 10 تای دیگه رو نمیدونم کجا می‌ره😅)

 

ارسال پیامک فارسی با ماژول MC60

حالا بریم سراغ ماژول mc60، اگر که داکیومنت های ماژول mc60 رو بررسی کنیم (داکیومنت Quectel_GSM_SMS_Application_Note_V1.1) برای ارسال پیامک از این character set ها پشتیبانی میکنه:
GSM, HEX, IRA, PCCP437, UCS2, 8859-1

mc60 character set

به‌صورت پیش‌فرض ما از همون GSM استفاده می‌کنیم که 7 بیتی هست و فقط میتونیم کاراکترهایی که توی جدول ASCII هستند رو داخلش وارد کنیم. با بقیه character set ها کاری نداریم، میریم سراغ UCS2، این نوع 16 بیتی یا 2 بایتی هست و مناسب ارسال کاراکترهای فارسی هست (اینجا میتونید کاراکتر هاش رو بررسی کنید).

 

برای ارسال پیامک لازمه که اول دستور AT+CMFG رو بزنیم و پیامکمون رو در text mode ارسال کنیم

at cmfg mc60 sms

توسط دستور AT+CSMP پارامترهای پیامک رو مشخص میکنیم که این یکم جای توضیح داره پارامترهاش ولی میتونید صرفا دستور زیر رو بزنید:

quectel mc60 sms at csmp

    • پارامتر اول که fo هست (first octet) دو تا مقدار 17 و 49 رو میتونه داشته باشه، درصورتی‌که گزارش تحویل برای پیامک رو بخوایم 49 و اگر نخوایم 17 می‌گذاریم.
    • پارامتر دوم vp هست (validity period) درصورتی‌که پیامک ما به هر دلیلی نتونه توسط گیرنده دریافت به شه، توی سرورهای اپراتور میمونه و توی بازه زمانی مشخصی دوباره تلاش برای ارسالش میشه.mc60 sms
  • پارامتر سوم هم فقط در حالت 0 کاربرد داره.
  • پارامتر چهارم dcs هست (data coding scheme)، این پارامتر برای کاربرد الان ما باید مقدارش 8 باشه، اما مقدار 24 رو هم تست کنید و با اون پیامک ارسال کنید ، نتیجه جالبی داره!

mc60 sms data coding scheme

 

با دستور AT+CSCS کدینگنمون رو هم مشخص می‌کنیم:

با دستور AT+CMGS باید شماره‌ای که میخوایم به اون پیامک ارسال کنیم رو مشخص کنیم، اما باید با فرمت UCS2 مقدار اون رو مشخص کنیم.

برای تولید خروجی مشابه بالا میتونید از این سایت کمک بگیرید (کاراکتر های utf16 هم میتونه اینجا برای ما استفاده بشه چون اونها هم 2 بایتی هستند): UTF16 Encode Decode

ucs2 utf16 convertor

دقت کنید که اون تیک “Remove notation” رو حتما بزنید!

بعد از ارسال دستور بالا هر متنی که بنویسید داخل sms قرار میگیره، ما این متن رو می‌نویسیم (باید به همون فرمت UCS2 باشه):

بعد از اتمام متن باید کاراکتر ctrl+z رو ارسال کنیم معادل هگز اون برابر “1A” هست.

به طور خلاصه مراحلی که طی کردیم این شد:

 

این هم از نتیجه :

quectel mc60 sms farsi

 

حمایت از Mahdi.h  

خوشحال میشیم برای تداوم و کیفیت ما رو حمایت کنید.

4 نفر

پــــســنــدیـده انـد

توجه

Mahdi.h  
Mahdi.h  

علاقه مند به سیستم های امبدد

دیدگاه ها

6 دیدگاه

  • Mehdi
    ۱۶ مرداد ۱۴۰۱

    سلام،این ماژول mc60 ایپرام هم داره؟برای ذخیره اطلاعات کم چه راهکاری رو پیشنهاد میکنید،با تشکر

    • Mahdi.h  
      Mahdi.h  
      ۱۶ مرداد ۱۴۰۱

      سلام
      بله این ماژول دارای یک حافظه داخلی برای ذخیره اطلاعات هست که به اون UFS گفته میشه.
      توی example_file.c باهاش کار کرده میتونید این example رو بررسی کنید

  • جمیل احمدی
    ۲۲ تیر ۱۴۰۱

    سپاست ده که م

  • امیر مطهری
    ۲۱ تیر ۱۴۰۱

    با این متد زیر میتونید توی پایتون این تبدیل رو انجام بدید 🙂
    def ucs2_encode(self, text: str) -> str:
    encoded = text.encode(‘utf-16-be’)
    hexlify = binascii.hexlify(encoded)
    return hexlify.decode().upper()

    اگر دوست داشتید میتونم آموزش اتصال و مدیریت GSM با پایتون رو رکورد کنم و در اختیار بچه های سیسوگی قرار بدم

    • Mahdi.h  
      Mahdi.h  
      ۲۱ تیر ۱۴۰۱

      ممنون از شما🙂
      چرا که نه !
      اگر می تونید یه مطلب بنویسید براش تا به اسم خودتون منتشر بشه😊

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه اول سیسوگ (مسابقه اول: درک سخت افزار) انتقادهای زیادی رو در پی داشت تا جایی که حتی خودمم به نتیجه مسابقه...

Zeus ‌ Zeus ‌
  • 2 سال پیش

راه اندازی LCD گرافیکی Nokia 1661 و دانلود کتابخانه آن

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموت‌های درب بازکن تا ریموت‌های دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی می‌کنند و آن‌هم ارسال اطلاعات به‌صورت بی‌سیم است....

Zeus ‌ Zeus ‌
  • 5 سال پیش

همه چیز درباره ریموت کنترل‌های هاپینگ

امنیت همیشه و در همه‌ی اعصار، مقوله‌ی مهم و قابل‌توجه‌ ای بوده و همیشه نوع بشر به دنبال امنیت بیشتر، دست به ابداعات و اختراعات گوناگونی زده است. ریموت کنترل یکی از این اختراعات است. در این مقاله، به بررسی امنیت انواع ریموت‌های کنترل خواهیم پرداخت....

Zeus ‌ Zeus ‌
  • 5 سال پیش

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 11 ماه پیش

آموزش قدم به قدم راه اندازی +NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش

ساخت ماینر با FPGA و ARM

چند ماهی هست که تب بیت کوین و ارزهای دیجیتال خیلی بالا رفته! چه شد که این پست را نوشتم همانطور که...

Zeus ‌ Zeus ‌
  • 3 سال پیش

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 3 سال پیش

مسابقه چهارم: کدام حلقه سریع‌تر است؟

حدود ۷ ماه پیش، مسابقه سوم سیسوگ رو برگزار کردیم و کلی نکته در مورد خواندن رشته‌های ورودی را بررسی کردیم. فکر...

Zeus ‌ Zeus ‌
  • 1 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک