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

blog
۱۴۰۱-۰۴-۲۰
4 دقیقه

یکی از قابلیت‌های خوب ماژول‌های 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
0
لینک و اشتراک
profile

Mahdi.h  

متخصص الکترونیک

علاقه مند به سیستم های امبدد | http://mahdi2001h.ir

مقالات بیشتر
slide

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند. فروش در پالت
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد. جستجو در آیسی
family

فروشگاه سیسوگ

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند. پرسش در سیسوگ فرم
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
خانواده سیسوگ

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند.
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد.
family

فروشگاه سیسوگ

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند.
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند.
family

دیدگاه ها

profile
امیرحسین گفت :
۱۴۰۳-۰۳-۱۶ ۱۳:۵۵

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

profile
Zeus ‌ گفت :
۱۴۰۳-۱۰-۰۲ ۱۰:۲۸

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

profile
Behnam گفت :
۱۴۰۳-۰۱-۲۰ ۱۵:۲۹

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

profile
Zeus ‌ گفت :
۱۴۰۳-۰۱-۲۱ ۱۱:۱۵

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

profile
داود گفت :
۱۴۰۱-۰۸-۲۳ ۱۲:۳۶

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

profile
Zeus ‌ گفت :
۱۴۰۱-۱۱-۰۴ ۰۹:۰۲

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

profile
Mehdi گفت :
۱۴۰۱-۰۵-۱۶ ۰۰:۲۶

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

profile
Mahdi.h   گفت :
۱۴۰۱-۰۵-۱۶ ۱۱:۳۱

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

profile
فاضل گفت :
۱۴۰۱-۱۰-۰۶ ۲۳:۲۶

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

profile
جمیل احمدی گفت :
۱۴۰۱-۰۴-۲۲ ۰۰:۴۵

سپاست ده که م

profile
Mahdi.h   گفت :
۱۴۰۱-۰۴-۲۲ ۰۹:۲۷

خواهش میکنم?

profile
امیر مطهری گفت :
۱۴۰۱-۰۴-۲۱ ۲۳:۲۵

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

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

profile
Mahdi.h   گفت :
۱۴۰۱-۰۴-۲۱ ۲۳:۳۳

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

become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله