ARDUINOAVRSIM800STM32بسکامکدویژن

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

آموزش ارسال پیامک با ماژول sim800

4.9/5 - (203 امتیاز)

ارسال SMS فارسی با SIM800 در مد Text

ارسال SMS فارسی با SIM800 موضوعی است که کاربران زیادی درخواست آموزش آن را برای ما ارسال کرده اند . بنابراین در این آموزش بصورت مفصل به آن خواهیم پرداخت . ماژول های GSM تولید شده توسط شرکت SIMCOM که از جمله پرکاربردترین آنها می توان به ماژول های سری SIM900 و SIM800 اشاره کرد ، دارای قابلیت ارسال و دریافت SMS ، قابلیت تماس گرفتن و دریافت تماس و اتصال به اینترنت از طریق GPRS را دارند .

لازم به ذکر است که ماژول های سری SIM900 دیگر تولید نمی شوند و ماژول های سری SIM800 که نسخه بهبود یافته تر است جایگزین ماژول SIM900 شده است .

در این پست می خواهیم به بررسی ارسال SMS فارسی با SIM800 بپردازیم . به طور کلی sms یا پیامک ها به دو روش قابل ارسال می باشند . روش اول ارسال پیامک در mode text  می باشد ، در روش mode text که روش بسیار ساده ای می باشد ، متن پیامک شامل کاراکترهای استاندارد اسکی که شامل تمامی حروف انگلیسی و اعداد و علامتها می باشد و بر روی همه دستگاه ها قابل شناسایی و نمایش هستند .

ارسال SMS در MODE TEXT

قبل از ارسال پیامک ابتدا باید بررسی نمایید که ماژول gsm شما از mode text برای ارسال پیامک پشتیبانی می کند یا نه ، برای بررسی توسط دستور at+command  زیر عمل می کنیم . با اجرای این فرمان زیر اگر در جواب OK برگردانده شود یعنی ماژول GSM شما توسط mode text پشتیبانی می شود .

AT+CMGF=1
OK

در حالت mode text برخی پارامترها برای ارسال پیام وجود دارد که ابتدا باید تنظیم شوند. با استفاده از دستور زیر ما می توانیم مقادیر فعلی را بخوانیم:

AT+CSMP? <ENTER>
+CSMP: 1,169,0,0
OK

برای ارسال یک پیام با مدت اعتبار ۱ روز، پارامترها باید به این صورت تنظیم شوند :

AT+CSMP=17,167,0,16 <ENTER>
OK

ارسال SMS با ماژول sim800

بعد از تنظیمات اولیه ، برای ارسال  SMS، دستور زیر را تایپ کنید :

AT+CMGS="09120197955"

شماره تلفن بالا را با شماره تلفن همراه خودتان جایگزین کنید. مودم با < پاسخ می دهد و منتظر متن پیام می ماند . اکنون می توانید متن پیام را تایپ کنید و پیام را با استفاده از کلید ترکیبی <CTRL> + <Z> ارسال کنید:

Hello World !

بعد از چند ثانیه، مودم با شناسه پیام پاسخ می دهد که نشان می دهد پیام به درستی ارسال شده است:

+CMGS: 62

این پیام کوتاه به تلفن همراه خواهد رسید.

ارسال SMS در MODE PDU

روش دوم برای ارسال پیامک روشی به نام PDU  می باشد . این روش دیگر از کاراکترهای استاندارد اسکی جهت نوشتن متن پیام استفاده نمی کند ، در این روش تمامی اطلاعات یک SMS به صورت کد HEX می باشد . این  روش متن SMS طی عملیاتی فشرده سازی و کدگذاری شده و ارسال می شود . سمت گیرنده SMS نیز بعد از دریافت SMS  باید متن پیام را رمز گشایی کند تا قابل نمایش باشد .

برای ارسال متن هایی غیر از کاراکترهای استاندارد اسکی ، مثلا ارسال متن به زبان فارسی یا هر زبانی غیر از انگلیسی از روش PDU می توان استفاده کرد . هر حرف فارسی طبق استانداردی به نام UNICODE شامل دو بایت در مبنای HEX می باشد که برای ارسال مقادیر UNICODE حروف فارسی باید معادل HEX به روش PDU  ارسال شود .

روش ارسال SMS در MODE PDU  و طریقه کدگذاری و کدگشایی SMS در MODE PDU  را در پستی جداگانه مفصلا توضیح خواهیم داد .

طبق قولی که داده بودم یک پست جداگانه درباره ارسال و دریافت sms در مد pdu  در سایت قرار دادم . در صورتی که وقت کنم حتما یه سورس کد هم قرار می دهم .

ارسال sms فارسی  در MODE TEXT

در مدل های جدید ماژول های شرکت SIMCOM مثل ماژول های سری SIM800 قابلیتی وجود دارد که  قادر به ارسال پیام های یونیکد بدون نیاز استفاده از PDU هستند . شما می توانید پیام های فارسی را تنها با تبدیل به معادل UNICODE ارسال کنید . برای بررسی اینکه آیا ماژول شما از این حالت پشتیبانی می کند، دستور زیر را تایپ کنید:

AT+CSCS=?

+CSCS: ("IRA","GSM","UCS2","HEX","PCCP","PCDN","8859-1")

OK

این دستورات کد های پشتیبانی شده توسط ماژول GSM را نمایش می دهد.

"IRA"    : Set Character set to IRA - International reference alphabet
"GSM"    : Character set to GSM - GSM 7 bit default alphabet
"UCS2"   : Character set to UCS2 - 16-bit universal multiple-octet coded character set
"HEX"     : Character set to HEX - 1
"PCDN"   : Character set to PCCP - PC character set code
"PCDN"   : Character set to PCDN - PC Danish/Norwegian set
"8859-1" : Character set to 8859-1 = ISO 8859 Latin 1 character set

اگر پاسخ دریافتی از ماژول حاوی “HEX” باشد، یونیکد پشتیبانی می شود.بنابراین براحتی می توانیم پروژه ارسال SMS فارسی با SIM800 را پیاده سازی کنیم . در این مثال ابتدا SIM800 را بر روی حالت “HEX” تنظیم می کنیم:

AT+CSCS="HEX" <ENTER>

در مرحله بعد ما باید  برای پیام های Unicode ، پارامتر چهارم دستور AT + CSMP را با مقدار8 تنظیم کنیم:

AT+CSMP=49,167,0,8

بعد از تنظیمات اولیه ، برای ارسال  SMS، دستور زیر را تایپ کنید :

AT+CMGS="09120197955"

شماره تلفن همراه خودتان را با شماره تلفن بالا جایگزین کنید . با ارسال فرمان بالا ، مودم با علامت < پاسخ می دهد و منتظر متن پیام می ماند . اکنون به بخش مهم کار رسیده ایم . در این قسمت باید معادل unicode حروف فارسی پیامک را استخراج کرده و بعد از کاراکتر < قرار بدهیم و در انتها با قرار دادن control+z پیامک ارسال می شود .

نکته مهم در ارسال پیامک فارسی توجه به طول تعداد کاراکترهای مجاز در قالب یک پیامک می باشد . در unicode چون هر کاراکتر شامل دو بایت در مبنای HEX می باشد ، بنابراین تعداد کاراکترهای مجاز در قالب یک پیامک در حالت استاندارد unicode ، نصف تعداد کاراکترهای مجاز در حالت استاندارد ascii است . بنابراین تعداد کاراکترهایی که می توانیم در یک پیامک فارسی ارسال کنیم برابر 70 کاراکتر است .

نکته دیگر این است که اگر داخل متن پیامک فارسی از حروف انگلیسی و یا کاراکترهای دیگر استفاده کنیم ، در این حالت نیز باید از معادل unicode آنها استفاده شود که در استاندارد unicode هر حرف انگلیسی نیز معادل دوبایت می باشد .

معادل unicode تمامی حروف و کاراکترها را می توانید با جستجو در اینترنت به دست آورید . در ادامه جهت سهولت کاربران سایت ، بخشی از پرکاربردترین حروف ، علایم و کاراکترها را قرار خواهیم داد .

جدول زیر معادل کد HEX تمامی حروف فارسی و عربی می باشد :

معادل unicode حروف فارسی
معادل unicode حروف فارسی

 

به دلیل شلوغی جدول بالا و صرفه جویی در وقت ، حروف فارسی را به ترتیب حروف الفبا مرتب کردم .  اعداد فارسی و تنوینها به همراه حروف فارسی در جدول زیر قرار دادم .

یونیکد حروف الفبا فارسی
یونیکد حروف الفبا فارسی

 

در ادامه چند تا از پرکاربردترین حروف و علایم در استاندارد unicode را قرار می دهم . امیدوارم مفید واقع شود .

 

جدول زیر مربوط به unicode علایم و حروف یونانی که در فیزیک و ریاضی کاربرد دارد و می توانیم از آنها در ارسال SMS فارسی با SIM800 استفاده کنیم :

یونیکد علامتهای فیزیک
یونیکد علامتهای فیزیک

 

جدول زیر unicode علامتهای ریاضی می باشد و می توانیم از آنها در ارسال پیامک فارسی با ماژول sim800 استفاده کنیم :

یونیکد علایم ریاضی
یونیکد علایم ریاضی

 

جدول زیر unicode اعداد یونانی و اعداد به شکل خاص می باشد و می توانیم از آنها در ارسال پیامک فارسی با ماژول sim800 استفاده کنیم :

یونیکد اعداد یونانی
یونیکد اعداد یونانی

 

جدول زیر unicode اشکال و علامتهای خاص می باشد و می توانیم از آنها در ارسال پیامک فارسی با ماژول sim800 استفاده کنیم :

یونیکد اشکال و علامتها
یونیکد اشکال و علامتها

 

جدول زیر unicode فلش و جهت ها می باشد و می توانیم از آنها در ارسال پیامک فارسی با ماژول sim800 استفاده کنیم :

یونیکد جهت ها
یونیکد جهت ها

 

در ادامه می خواهیم توسط مثال عملی ، کلمه سلام به همراه چند تا از اشکال که در جدول اشکال معادل unicode آن وجود دارد را توسط روش ارسال پیامک فارسی با ماژول sim800 ارسال کنیم . بنابراین نیاز است معادل unicode کلمه سلام را از جدول unicode حروف الفبا فارسی که در  بالا قرار دادیم استخراج کنیم . معادل unicode کلمه سلام و سه تا شکل گرافیکی برابر با “0633064406270645262B2615261E” می باشد . هر حرف در unicode معادل دو بایت و در مبنای HEX می باشد .

در تصویر زیر نحوه تنظیمات و ارسال پیامک فارسی با ماژول sim800 را مشاهده می کنید :

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

نکته : یکی از مواردی که بعضی از کاربران موقع ارسال sms در محیط ترمینال سریال با آن مواجه هستند . قرار دادن مقدار control+z انتهای متن پیام است . در برخی از ترمینال سریال ها کلید ترکیبی control+z به صورت مستقیم عمل می کند .

اما در برخی از ترمینال سریالها control+z عمل نمی کند و باید معادل کد دستوری آن ارسال شود . معادل کلید control+z برابر 26 دسیمال یا 1A هگز می باشد . در مثال بالا بخشی برای ارسال مقادیر به صورت هگز وجود دارد ، ابتدا تیک مربوط به SendHEX را می زنیم ، سپس معادل هگز 1A را نوشته و ارسال می کنیم .

 

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

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

ارسال sms فارسی با sim800 توسط آردوینو

نرم افزار آردوینو به دلیل پشتیبانی از استاندارد UTF-8  این قابلیت را به ما می دهد که علاوه بر حروف فارسی بتوانیم تمامی کاراکترها و علامت ها و همچنین بقیه زبانها را در محیط آردوینو تایپ کرده و به نمایش در آوریم .

سورس کدی که ما برای ارسال SMS فارسی با SIM800 توسط آردوینو نوشتیم ، می تواند علاوه بر حروف و اعداد فارسی ، برخی از کاراکترها و علامتهای خاص را نیز به صورت مستقیم تایپ کرده و در پیامک فارسی خود ارسال کنیم .

ارسال پیام فارسی توسط آردوینو
ارسال پیام فارسی توسط آردوینو

ارسال sms فارسی با sim800 توسط کدویژن

نرم افزار کدویژن بر خلاف نرم افزار آردوینو از استاندارد UTF-8  پشتیبانی نمی کند و فقط از حروف و کاراکترهای اسکی پشتیبانی می کند . بنابراین موقع تایپ حروف فارسی و قرار دادن کاراکترهای خاص در محیط کدویژن ،این حروف به صورت علایم ناخوانا به نمایش در می آیند .

در استاندارد اسکی ، از کاراکترهای در محدوده 128 الی 255 برای دیگر زبانها نیز استفاده می شود . بنابراین از قسمت مربوط به Language for non-Unicode programs در تنظیمات ویندوز و قرار دادن آن بر روی Persian – iran می توانیم حروف فارسی را در محیط کدویژن نمایش دهیم . اما در قرار دادن کاراکترهای دیگری که در محدوده اعداد اسکی از 0 الی 255 نیستند دارای محدودیت هستیم .

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

ارسال پیام فارسی توسط کدویژن
ارسال پیام فارسی توسط کدویژن

 

ارسال sms فارسی با sim800 توسط بسکام

نرم افزار بسکام نیز از استاندارد UTF-8  پشتیبانی نمی کند و فقط از کاراکترهای در محدوده اسکی پشتیبانی می کند . بنابراین موقع تایپ حروف فارسی و برخی کاراکترها در بسکام ، این حروف به صورت علامتهای ناخوانا به نمایش در می آیند .

در استاندارد اسکی ، از کاراکترهای در محدوده 128 الی 255 برای دیگر زبانها نیز استفاده می شود . بنابراین از قسمت مربوط به Language for non-Unicode programs در تنظیمات ویندوز و قرار دادن آن بر روی موقعیت Persian – iran می توانیم حروف فارسی را در محیط بسکام نمایش دهیم . اما در قرار دادن کاراکترهای دیگری که در محدوده اعداد اسکی از 0 تا 255 نیستند دارای محدودیت هستیم .

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

ارسال پیام فارسی توسط بسکام
ارسال پیام فارسی توسط بسکام

ارسال sms فارسی با sim800 توسط stm32

نرم افزار stm32cubeide به دلیل پشتیبانی از Encoding UTF-8  این قابلیت را دارد ، که علاوه بر حروف فارسی بتوانیم تمامی کاراکترها و علامت ها و همچنین بقیه زبانها را در محیط stm32cubeide تایپ کرده و به نمایش در آوریم .

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

پروژه توسط میکروکنترلر stm32f103c8t6 و با stm32cubemx ایجاد شده و فرکانس کاری stm32 توسط کریستال خارجی روی فرکانس 8 مگا هرتز تنظیم شده است . پورت سریال نیز بر روی uart1 و بر روی نرخ انتقال 9600 بیت بر ثانیه تنظیم شده است . البته می توان فایل cubemx را اجرا کنید و تنظیمات دلخواه خود را پیکربندی کنید .

ارسال پیام توسط یک تابع به شکل زیر انجام می شود . این تابع دارای سه آرگومان می باشد . آرگومان اول شماره موبایلی که قصد ارسال پیام به آن را داریم . آرگومان دوم متن یا رشته sms است . آرگومان سوم مربوط به مد ارسال sms است ، برای ارسال پیام با حروف انگلیسی مقدار E_SMS و برای ارسال پیام به زبان فارسی و کاراکترهای خاص مقدار P_SMS قرار داده می شود .

void send_unicode_sms(char *num ,char *sms , SMS_Mode m);

ارسال sms با stm32
ارسال sms با stm32

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

 

توجه : احتمالا این سوال پیش بیاید که چگونه علامت ها و یا کاراکترهای خاص که بر روی کیبورد وجود ندارد را در محیط نرم افزار قرار دهیم . برای اینکار می توانید وارد سایت w3schools شوید . از قسمت HTML Symbols کاراکتر مورد نظر را copy کنید و داخل نرم افزار paste کنید . این روش فقط برای نرم افزارهایی مثل Arduino , Keil , Stm32CubeIDE که Encoding UTF8 دارند قابل استفاده می باشد .

ارسال علامت ها با sim800
ارسال علامت ها با sim800

 

توجه : این آموزش و سورس کدها برای تمامی ماژول های سری sim800 مانند sim800l , sim800c , sim808 قابل استفاده می باشد .

  نویسنده : حسین غیاثوند
 خرید و دانلود در لحظه :

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

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