کویکتل, توصیه شده, مقاله های سیسوگ

ارسال پیامک فارسی با ماژول های 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

 

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

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

  1. Avatar for امیرحسین امیرحسین گفت:

    سلام چرا باید بین دستورات AT باید از delay استفاده کنیم، چه راه حل یا راهکاری برای این مورد وجود داره؟, سپاس

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

      بله راه منطقی و اصولی اون پردازش جواب های مودم هست 🙂

  2. Avatar for Behnam Behnam گفت:

    سلام و وقت بخیر
    لطف میکنین بگین چطوری توی OpenCpu پیام فارسی ارسال و یا دریافت کنیم؟
    البته موضوع من بیشتر ارسال پیام فارسی است.

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

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

  3. Avatar for داود داود گفت:

    سلام وقت بخیر
    بنده با ماژول Quectel M08R کار می کنم.
    مشکلی که دارم اینه که بعد از هر بار راه اندازی ماژول می تونم فقط 4 پیامک ارسال کنم و اگر پیامک 5 م رو ارسال کنم ارور CMS ERROR: 3780 رو دریافت می کنم، هر چی سرچ کردم اصلا همچین اروری وجود نداشت.
    هر بار که دستگاه رو خاموش روشن می کنم میتونم دوباره 4 پیام ارسال کنم و برای ارسال پیامک بیشتر دوباره باید ماژول خاموش روشن کنم.
    بین ارسال پیامک ها تاخیر یک ثانیه ای هم گذاشتم ولی مشکل حل نشد.

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

      سلام دوست عزیز
      این مورد شما خیلی جالبه تا الان که انواع ماژول ها کار کردم این مشکل رو ندیدم ،‌شما پیامک رو فارسی یا انگلیسی دارید ارسال میکنید و برای ارسال پیامک از چه روشی استفاده میکنید
      در ضمن اگر میخواید زودتر به جواب برسید میتونید سوالتون رو در انجمن سیسوگ مطرح کنید
      https://ask.sisoog.com
      🙂

  4. Avatar for Mehdi Mehdi گفت:

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

    1. Avatar for Mahdi.h   Mahdi.h   گفت:

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

      1. Avatar for فاضل فاضل گفت:

        سلام.
        برای UFS در مثال ها فقط از سیستم فایل مثال زده. میشود مستقیم از آن استفاده کرد ؟. بدون استفاده از سیستم فایل
        تشکر

  5. Avatar for جمیل احمدی جمیل احمدی گفت:

    سپاست ده که م

    1. Avatar for Mahdi.h   Mahdi.h   گفت:

      خواهش میکنم?

  6. Avatar for امیر مطهری امیر مطهری گفت:

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

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

    1. Avatar for Mahdi.h   Mahdi.h   گفت:

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

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *