سلام خدمت همه شما مایکروالکامی ها. در مطالب قبلی از سری آموزش های ماژول SIM800 به بررسی کامل نحوه ارسال و دریافت پیامک (SMS) با ماژول GSM سری SIM800 پرداخته شد. در این مطلب به بررسی و نحوه ارسال پیامک فارسی از طریق SIM800 پرداخته خواهد شد. پس با من تا انتهای مطلب همراه باشید. همچنین شما میتونید سایر مطالب من رو از این لینک مطالعه و بررسی کنید.
راه اندازی بخش پیامک ماژول SIM800L
پیش تر در سری آموزش های کامل ماژول SIM800 در قسمت 2 این مطالب به بررسی پیامک و آماده سازی ماژول برای کار با SMS پرداخته شد. لذا از توضیحات مجدد آن پرهیز شده و در ادامه بحث اصلی یعنی ارسال پیامک (SMS) فارسی را پیش خواهیم گرفت.
قطعات مورد نیاز
- برد راه انداز ماژول SIM800L
- LM2596 Buck DC-DC Convertor
- آداپتور 12V
- آنتن GSM با سوکت IPEX
- مبدل سریال
ارسال پیامک (SMS) با ماژول SIM800
یکی از روش های ارسال دیتا به کاربر استفاده از پیامک میباشد. اما پیامک (SMS) ای که در ماژول های GSM مانند SIM800 پشتیبانی میشود باید حاوی کاراکتر های اسکی مجاز باشد. بدین شکل پیامک در هر وسیله دیگر مانند موبایل به راحتی و درستی نمایش پیدا خواهد کرد.
اما اگر به زبانی غیر از انگلیسی مثلا فارسی بخواهیم پیامک ارسال کنیم تکلیف چیست؟ چگونه این امر امکان پذیر خواهد بود؟ به این سوال در ادامه پاسخ خواهیم داد و نحوه انجام آن بیان خواهد شد.
مد های پیامک (SMS) در SIM800
همانطور که در مطالب قبلی بیان شد، 2 حالت کاری برای ارسال پیامک با ماژول SIM800 وجود دارد. حالت های Text و PDU. در استفاده از حالت Text باید چک کنیم آیا ماژول ما از این حالت پشتیبانی میکند یا خیر. به همین منظور باید از دستورات AT یا AT Command استفاده نمود.
1- پیامک (SMS) در حالت Text Mode
آموزش کامل استفاده از این روش در مطالب قبلی کامل بیان شده. برای دسترسی به آن از این لینک اقدام نمایید.
2- پیامک (SMS) در حالت PDU Mode
در روش Text Mode از کاراکتر های استاندارد استفاده میشود. اگر بخواهیم پیامی غیر از زبان انگلیسی مثلا فارسی و… ارسال کنیم باید از روش PDU استفاده نمود. البته باید گفت با روش Text هم میتوان این کار را انجام داد که در این مطلب به آن پرداخته شده است. در حقیقت در این مد از کاراکتر های استاندارد اسکی برای نوشتن پیامک (SMS) استفاده نمیشود.
فرایند کاری حالت PDU به این گونه است که محتوای یک پیامک بصورت کد HEX بوده و در اقدامی این محتوا علاوه بر فشرده سازی نیز کد هم شده و نهایتا ارسال خواهد شد. حال در سمت گیرنده پیامک، پس از دریافت آن بایستی عملیات رمزگشایی برروی آن انجام و محتوای اصلی را دیکد نماید.
استاندارد UNICODE
شاید جالب باشد بدانید اعداد و علائمو حروف که در اپلیکیشن ها و یا وبسایت ها مشاهده میکنید در حقیقت آنچه که میبینید نیستند. کامپیتور و ماشین فقط با اعداد سر و کار داشته و طبعا این محتوا نیز بصورت این اعداد قابل فهم ماشین خواهد بود. لذا باید استانداری به همین منظور وجود داشته باشد که به UNICODE معروف میباشد.
در استاندارد یونیکد برای هر کاراکتر از 2 بایت که معادل 16 بیت است استفاده میگردد. لذا در یونیکد میتوان 2 به توان 16 یا 65536 کاراکتر استفاده کرد. کد اسکی و یونیکد کارارکتر های زبان انگلیسی عینا مشابه هم میباشد. برای دسترسی به معادل Unicode زبان های مختلف نیز میتوانید از طریق این لینک اقدام نمایید.
نکته مهم: چنانچه در فرایند نوشتن متن پیامک (SMS) فارسی از حروف انگلیسی یا سایر کاراکتر های دیگر در آن استفاده کنیم، باید معادل یونکید آن را استفاده کرد.
ارسال پیامک (SMS) فارسی با ماژول SIM800 در حالت Text Mode
معادل یونیکد حروف و اعداد فارسی یا عربی یا هر زبان دیگر را میتوان بسادگی در اینترنت سرچ و بدست آورد. برای آسودگی ابزار های انلاین نیز به همین منظور وجود دارد تا تبدیل جمله و متن را به کد هگز انجام دهد. در ادامه به نحوه ارسال پیامک فارسی در حالت Text Mode بیان شده است.
نکته مهم: در ارسال پیامک فارسی با SIM800 باید به طول محتوای SMS دقت داشت. در حالت عادی با کاراکتر های استاندارد اسکی طول مجاز 140 کاراکتر است. اما در حالت استفاده از کد HEX و یونیکد، چون هر کاراکتر معادل 2 بایت است پس در هر پیامک، مجاز به ارسال 70 کاراکتر هستیم.
اطمینان از برقرای ارتباط سریال
طبق روال ابتدا AT را ارسال و در صورت دریافت OK اطمینان حاصل میکنیم که ارتباط سریال و سیم کشی درست هست.
AT OK
اطمینان از متصل شدن به شبکه
با توجه به پاسخ ماژول خواهیم دانست که قدرت سینگال دریافتی خیلی خوب هست و با موفقیت به شبکه کانکت شده است.
AT+CSQ +CSQ: 31,0
تنظیم ماژول در مد کاری Text
AT+CMGF=1 OK
در سری های جدید ماژول GSM شرکت سیمکام میتوانیم بدون استفاده از حالت کاری PDU نیز در حالت Text برای ارسال پیامک فارسی اقدام نماییم. برای اطمینان از پشتیبانی این قابلیت در ماژول خود از دستور زیر استفاده نمایید. طبق پاسخ زیر HEX نیز وجود دارد که بیانگر این است میتوان از یونیکد استفاده نمود. سایر قسمت ها در تصویر زیر بیان شده است.
AT+CSCS=? +CSCS: ("IRA","GSM","UCS2","HEX","PCCP","PCDN","8859-1") OK
تنظیم کدینگ ماژول در حالت HEX
AT+CSCS="HEX" OK
تنظیم پارامتر های حالت کاری Text
دستور AT+CSMP دارای 4 پارامتر به شرح زیر میباشد.
AT+CSMP=[<fo>[,<vp>,<pid>,<dcs>]]
- پارامتر fo مخفف First Octet بوده و دارای دو مقدار 17 (پیشفرض) و 49 است. طبق توضیحات قبل اگر گزارش تحویل پیامک را نیاز داشته باشیم مقدار این پارامتر برابر 49 و در غیر اینصورت مقدار 17 را به آن اختصاص خواهیم داد.
- پارامتر vp مخفف Validity Period و مشخص خواهیم کرد مدت زمان شناور بودن یا وجود داشتن پیامک در سرور های اپراتور چقدر خواهد بود. این کار وقتی که به هر نحوی پیامک به گیرنده نرسد مناسب خواهد بود. با این کار در بازه های مشخص مجددا پیامک به گیرنده ارسال خواهد شد. مقدار vp را میتوان طبق توضیحات جدول زیر انتخاب نمود.
عدد vp | مدت زمان وجود پیامک در سرور اپراتور | توضیحات |
0 – 143 | (vp + 1) x 5 minutes | 5 دقیقه تا 12 ساعت |
144 – 167 | 12 Hours + ((vp-143) x 30 minutes) | 12.5 ساعت تا 24 ساعت |
168 – 196 | (vp-166) x 1 day | 2 روز تا 30 روز |
197 – 255 | (vp-192) x 1 week | 5 هفته تا 63 هفته |
- پارامتر pid مخفف Protocol Identifier بوده و فقط مقدار 0 را دارد.
- پارامتر dcs مخفف Data Coding Scheme بوده و برای مشخص کردن نوع پیامک یا کاراکتر ست استفاده میشود. هنگامی که این مقدار 0 باشد در حالت استاندارد 7 بیتی متن ها ارسال میگردد. درصورتی که مقدار آن 16 باشد پیامک ها بصورت یک پیام flash ارسال میشود. در این مطلب برای ارسال پامک فارسی بصورت HEX باید این مقدار برابر 8 باشد.
پس از دریافت OK در مرحله قبل با استفاده از دستور زیر پارامتر های حالت Text Mode را طبق توضیحات تنظیم مینماییم. دقت شود برای استفاده از یونیکد و هگز باید در پارامتر 4 این دستور عدد 8 قرار گیرد. طبق دستور زیر گزارش تحویل پیامک غیر فعال، مدت زمان شناور ماندن پیامک در سرور 1 رو و کدینگ آن 8 میباشد.
AT+CSMP=17,167,0,8 OK
وارد کردن شماره و ارسال پیامک
پس از وارد کردن دستور AT+CMGS ماژول در پاسخ به ما “<” را خواهد داد و منتظر خواهد ماند تا متن SMS را وارد کنیم. در اینجا کد هگز که حاصل از تبدیل فارسی به یونیکد است را وارد نمایید. در انتها کد CONTROL+Z را وارد کرده و نهایتا ارسال نمایید.
AT+CMGS="شماره گیرنده" > در اینجا کد یونیکد خود را باید وارد کنید
متن مورد نظر و معادل یونیکد آن
برای ساخت کد یونیکد مشابه زیر نیز میتوانید بدلیل اینکه فرمت UTF-16 هم 2 بایتی هست از آن نیز استفاده نمایید.
این یک پیام تست فارسی است. سلطانی – مایکروالکام
پس از وارد کردن کد بدست آمده بعد از “<” در پاسخ ماژول و ارسال control+z یا 1A بصورت هگز در انتهای آن، بشرط صحت همه شرایط مورد نیاز، پیامک به دست گیرنده خواهد رسید. در تصویر زیر پیامک دریافتی قابل مشاهده است.
در تصویر زیر خلاصه دستورات و مراحل ارسال پیامک فارسی با ماژول SIM800 قابل مشاهده میباشد.
نتیجه گیری
در این مطلب به بیان و معرفی روش ارسال پیامک (SMS) فارسی با ماژول GSM مدل SIM800 پرداخته شد. همچنین روش استفاده از کد های استاندارد یونیکد برای حروف فارسی / عربی بیان گردید. سایر علائم و نشانه های رایج (مثلا حروف یونانی، علامت درجه و…) را میتوان بسادگی استفاده و ارسال کرد.
امیدوارم از این آموزش کمال بهره را برده باشید. در صورتی که هرگونه نظر یا سوال داشتید درباره این آموزش لطفا اون رو در انتهای همین صفحه در قسمت دیدگاه ها قرار بدید. در کوتاه ترین زمان ممکن به اون ها پاسخ خواهم داد. اگر این مطلب براتون مفید بود، اون رو حتما به اشتراک بگذارید. همینطور میتونید این آموزش را پس از اجرای عملی توی اینستاگرام با هشتگ microelecom# به اشتراک بگذارید و پیج مایکروالکام (microelecom@) رو هم منشن کنید.
سلام ، ممنون از آموزش هاتون . من در مدارم از ماژول سیم ۸۰۰ استفاده کرده ام ، در ارسال پیامک چه فارسی و چه انگلیسی گاهی پیامک که از سمت شبکه دریافت میکنم برای ازسال ، حاوی مثلا ۱۶۰ کاراکتر است یا بیشتر یا کمتر ، گاهی فقط ۱۵۹ کاراکتر میفرستد گاهی کامل میفرستدگاهی ۱۴۰ کاراکتر میفرستد و از قانون خاصی پیروی نمیکند و حتی میزان تاخیر بعد از دستورات را هم تغییر دادم ولی باز هم متن پیام را کات میکند
حداکثر تا چه تعداد کاراکتری را میتونید ارسال کنید بدون منقطع شدن؟
با سلام. من برای پروژه ام نیاز دارم که دما رو به صورت زنده گزارش کنه. بنابراین میبایست در کد مقدار عددی یا رشته ای دما رو به UTF-16 تبدیل کنه. میشه بگید چجوری تو همون کد تبدیل انجام بدیم؟ (از C++ استفاده میکنم)
باید از تکه کد مربوط به این تبدیل یا کتابخونه استفاده کنید.
سلام من میخوام کنار ارسال sms فارسی کنارش متغییر دما هم بفرستم چطور این دستور بنویسم ؟؟
سلام،
باید مقدار اون هم به متن پیام فارسی که تبدل کردید به فرمت گفته شده، اضافه کنید. نهایتا همه را بعدا برای ماژول بصورت یکجا ارسال کنید.
سلام مهندس
دمت گرم
دنبال بحث فلش sms بودم که توضیح دادین. سپاس
سلام، خواهش میکنم. از اینکه مطلب مفید بوده براتون خوشحالیم.
سلام
برنامه ایی برای تبدیل متن به یونیکد هست؟
سلام، اگر منظورتون سورس کد هست که باید نوشته بشه داخل کد هاتون.
اگر منظور اپلیکیشن یا مشابه آن هست، سایت های آنلاینی برای اینکار وجود داره که میتونید براحتی استفاده کنید.
بسیار عالی بود، خسته نباشید ❤️❤️❤️
خواهش میکنم. از اینکه مفید بوده مطلب براتون خوشحالم.
اگر مطالب یا عناوین دیگه ای مد نظرتون هست بفرمایید تا کار بشه روی آن.
دنبال پیدا کردن روشی برای دریافت و نمایش پیامک فارسی روی lcd 2×۱۶ یا lcd گرافیکی با میکرو avr و ماژول sim800l هستم.همچین مطلبی رو هیچ سایتی نداره، اگر ممکن باشه اینو انجام بدید عالی میشه.😍❤
در نگاه اول کار بخصوصی نداره این مورد. فقط باید بیاید پیامک دریافتی را بریزید روی یک متغیر و اون رو با دستورات و توابع LCD نمایش بدید.
اگر پیامک دریافتی فارسی باشه یکم روند کار شاخ و برگ دار میشه فقط.
چشم درصورت امکان و داشتن وقت حتما انجام میشه.
خیلی متشکرم☺
بله نمایش پیامک فارسی روی lcd سخته یکم برای همین میخوام انجامش بدید لطفا و خیلی جالب میشه بنظرم.
بسیار خب