کتابخانه SMS به زبان پایتون برای شیلد GSM رزبری پای
رسپبری پای یک رایانه تک بردی با امکانات بی نظیر میباشد.ویژگیهای متعددی وجود دارند که باعث شده است این برد به محبوبیت زیادی در بین دیگر بردهای لینوکسی برسد.از جمله این ویژگیها میتوان به امکانات سخت افزاری و نرم افزاری مناسب موجود برای آن اشاره کرد همچنین وجود انجمن های تخصصی برای رفع ایرادات کاربران و پشتیبانی از آنها از دیگر مزیت های آن میباشد. از جمله ویژگی های سخت افزاری میتوان به امکان اتصال افزونه یا شیلدهای متنوع موجود برای این برد، اشاره کرد. افزونه ها بردهای سخت افزاری می باشند که معمولاً از طریق پورت GPIO یا USB به رسپبری پای متصل میشوند و معمولا ابعادی نظیر آن را دارند و امکانات بیشتری را برای رسپبری پای فراهم میکنند. افزونه GSM توسط شرکت Itead ارایه شده است و از طریق پورت GPIO به رسپبریپای متصل میشود. تغذیه افزونه و ارتباط آن با برد اصلی نیز توسط این درگاه فراهم میشود. ماژول استفاده شده در این افزونه SIM800 میباشد.SIM800 از چهار باند 850/900/1800/1900MHz پشتیبانی میکند و امکان تبادل صدا، پیام کوتاه(SMS)، داده و اطلاعات را دارد. این ماژول توسط شرکت Simcom ارایه میشود. ماژولهای ارایه شده توسط این شرکت از یک میان افزار داخلی یا نهفته بهره میگیرند که دستورات AT نام دارند و استفاده از ماژول ها را امکان پذیر میکنند.
در این مقاله قصد داریم با استفاده از افزونه GSM برای رسپبری پای که در آن از ماژول SIM800 استفاده شده است به معرفی یک کتابخانه پرکاربرد به زبان پایتون برای کار با این افزونه، بپردازیم.
همان طور که اشاره شد افزونه GSM از طریق پورت GPIO با رسپبری پای ارتباط برقرار میکند. در این ارتباط از پورت سریال برای ارسال دستورات به ماژول و دریافت پاسخ استفاده میشود. در این میان یک مساله قابل توجه وجود دارد و آن هم این که پورت سریال رسپبری پای به صورت پیش فرض در هنگام بالا آمدن سیستم عامل در حال استفاده است و نیاز است که آزاد سازی آن انجام گیرد تا در هنگام اجرای برنامه های مورد نظرمان با مشکل مواجه نشویم. برای آزاد کردن پورت سریال در رسپبری پای نیاز است که برخی تغییرات در فایل های سیستمی آن انجام دهیم.
ابتدا نیاز است که در فایل Config.txt تغییراتی انجام دهیم. این فایل به صورت مستقیم از کارت حافظه در دسترس میباشد و با قرار دادن آن در رایانه شخصی میتوان محتویات فایل مورد نظر را تغییر داد. روش دیگر دسترسی به این فایل از داخل خود رسپبری پای می باشد. با وارد کردن دستور زیر محتویات فایل config.txt توسط ویرایشگر nano در محیط ترمینال بازگشایی می شود.
sudo nano /boot/config.txt
پس از بازگشایی فایل، نیاز است که خط های زیر به فایل اضافه شود. توجه داشته باشید که این فایل از جمله فایلهای سیستمی میباشد و تغییر در دیگر اجزای آن ممکن است باعث آسیب رساندن به سیستم عامل شود.
dtoverlay=pi3-miniuart-bt enable_uart=1 force_turbo=1
پس از انجام تغییرات با فشردن کلیدهای crtl + o فایل را بازنویسی کرده و با استفاده از کلیدهای ctrl+x از محیط nano خارج میشویم. اکنون نیاز است که فایل boot را تغییر دهیم. این فایل نیز همانند قبلی از دو مسیر ذکر شده قابل دسترس میباشد. در این فایل تمامی ارجاع ها به عبارت console= را حذف میکنیم. این کار باعث میشود که در هنگام بالا آمدن سیستم عامل، استفاده ای از پورت سریال نشود و پورت آزاد باشد. برای باز کردن این فایل از دستور زر استفاده میکنیم.
sudo nano /boot/cmdline.txt
سپس نیاز داریم که فایل hciuart.sevice را تغییر دهیم.برای این کار با استفاده از دستور زیر فایل را در مسیر /lib/systemd/system
بازگشایی میکنیم.
sudo nano /lib/systemd/system/hciuart.service
در فایل باز شده، خطی که عبارت After در آن قرار دارد را با افزودن # به ابتدای آن به صورت کامنت در میآوریم و در یک خط جدید زیر آن After = dev-ttyS0.device را اضافه میکنیم. همچنین این کار را برای عبارت ExecStart نیز انجام میدهیم به این صورت که خطی را که این عبارت در آن قرار دارد به صورت کامنت در آورده و خط زیر را در ادامه آن قرار می دهیم.
su
اکنون تغییرات مورد نیاز را در فایل ها برای آزاد سازی پورت سریال انجام دادیم. در ادامه با استفاده از دستورات زیر، به روزرسانی و ارتقاء رسپبری پای را انجام میدهیم و در نهایت با دستور reboot برد را راه اندازی مجدد میکنیم.
sudo apt-get update sudo apt-get upgrade sudo rpi-update sudo reboot
پس از بالا آمدن مجدد سیستم عامل، میتوانیم کار را شروع کنیم؛ اما حتماً در نظر داشته باشید که در هنگام استفاده از برد رسپبریپای و افزونه GSM از تغذیه مناسب برای آنها استفاده کنید. ماژول موجود روی این افزونه درصورتی که جریان مورد نیازش تامین نشود اقدام به خاموش شدن میکند.
برای اجرای کتابخانه ضمیمه شده نیاز است که ابتدا برخی کتابخانهها نصب شوند. در ابتدا با استفاده از دستور زیر کتابخانه GPIO برای پایتون 3 را نصب میکنیم:
sudo apt-get install python3-rpi.gpio
در ادامه نیاز است که کتابخانه pyserial را نصب کنیم.برای این کار از دستور زیر استفاده میکنیم:
sudo pip3 install pyserial
برای شروع کار نیاز است که کتابخانه مورد نظرمان را در داخل حافظه رسپبری پای قرار دهیم. فایل مورد نظر ما sms.py می باشد. برای باز کردن و تغییر آن میتوانیم از محیطهای گوناگونی استفاده کنیم مانند محیط برنامه نویسی پایتون 3 در رسپبری پای و یا ویرایشگر nano در محیط ترمینال. این فایل یک کتابخانه تقریباً مناسب برای کار با بخش sms افزونه SIM800 برای رسپبری پای میباشد.
در این فایل متدهای مختلفی برای کار با افزونه وجود دارد و به طور ویژه متدهایی برای بخش پیام کوتاه همانند دریافت، ارسال، حذف و … وجود دارد.همچنین یک مثال به عنوان نمونه در این کد قرار گرفته است که با اجرای آن یک پیامکوتاه با متن دلخواه به شماره تعریف شده ارسال میکند.
در ابتدای برنامه پورت سریال مورد استفاده تعریف شده است. توجه داشته باشید که پورت حتماً قبل از اجرا به صورتی که در ابتدای مقاله نیز اشاره شد آزاد شده باشد و توسط پروسه دیگری نیز در حال استفاده نباشد.
باودریت تنظیم شده برای استفاده از افزونه و ماژول SIM800 به طور پیش فرض روی 9600 قرار گرفته است.پس از آن دو پایه از پورت GPIO برای روشن کردن و ریست افزونه تعریف شده است. در ادامه به توضیح ساختار کلی کتابخانه و برخی متدهای مورد نیاز میپردازیم. این کتابخانه از چند کلاس تشکیل شده است که کلاس اصلی، SMS نام دارد. در داخل این کلاس چندین متد وجود دارد که امکان برقراری ارتباط به صورت ساده را برای ما فراهم میآورد.
در ابتدا در داخل متد Setup کلاس SMS پس از ایجاد شی از کلاس SMS با فراخوانی این کد پورت GPIO و نیز پورت سریال مورد استفاده به همراه باودریت تنظیم میگردد.
از دیگر متدهای کاربردی این کتابخانه متد sendATCmdWaitReturnResp و sendATCmdWaitResp میباشد. این دو متد وظیفه ارسال دستور AT به ماژول را دارند و تا پاسخ دادن ماژول منتظر میمانند. در این متد میتوان زمان برای انتظار پاسخ و تعداد دفعات تکرار ارسال دستور در صورت عدم دریافت پاسخ در مدت زمان تعیین شده را، تنظیم کرد. تفاوت اصلی این دو متد در ارسال پاسخ منتظره میباشد. در متد sendATCmdWaitResp، با ارسال دستور AT داده شده، با دریافت پاسخ منتظره داده شده، متد مقدار تعریف شده OK در صورت موفق بودن دریافت و پاسخ در غیر اینصورت، وضعیت از پیش تعریف شده ErrorNoResponse را برمیگرداند. اما در متد sendATCmdWaitReturnResp در صورت دریافت پاسخ منتظره، عبارت دریافت شده مورد نظر را در خروجی بازگشت می دهد.
از این دو متد میتوان علاوه بر استفاده برای کتابخانه SMS برای استفاده از دیگر امکانات ماژول SIM800 نیز استفاده کرد.
متد getNetworkStatus وضعیت اتصال ماژول به شبکه موبایلی را برمیگرداند. با استفاده از این متد میتوانیم از رجیستر شدن ماژول در شبکه اپراتور مد نظرمان اطلاع حاصل کنیم.
متد readSMS با دریافت یک عدد به عنوان آرگومان پیامکوتاه نظیر با شماره وارد شده را نمایش میدهد. این متد برای نمایش یک پیام استفاده میشود و از متد readAllSMS میتوانیم برای مشاهده تمامی پیامهای کوتاه دریافتی استفاده کنیم.
با استفاده از متد deleteSMS میتوانیم SMS مورد نظرمان را با وارد کردن شماره آن حذف کنیم.
متد sendSMS برای ارسال پیام کوتاه استفاده میشود. این متد دو ورودی دارد. پارامتر اول محتوای پیام و دیگری شماره مورد نظر میباشد که قصد داریم پیام کوتاه را به آن ارسال کنیم.
در ادامه یک نمونه برنامه برای مشاهده عملکرد این کتابخانه قرار گرفته است. در ابتدا یک شی از کلاس SMS تعریف میشود. پس از آن متد Setup برای مقدار دهی اولیه به پارامترهای موجود فراخوانی میشود. در ادامه با استفاده از متد turnON ماژول را روشن میکنیم. این متد با اعمال پالس در پین تعریف شده به عنوان پایه Power، منتظر دریافت پاسخ از سوی ماژول میشود و در صورتی که پاسخ در یافت نشود برنامه اتمام می یابد. دستور بعدی حالت Echo ماژول را غیر فعال میکند و پس از آن یک عبارت در خروجی چاپ میگردد که نشان دهنده آماده بودن ماژول برای استفاده میباشد.
برای ارسال پیامکوتاه ابتدا نیاز است که تنظیماتی بر روی ماژول انجام دهیم. ابتدا نیاز است که نوع پیام را در حالت متن قرار دهیم همچنین تنظیماتی دیگری نیز نیاز است که با استفاده از خط زیر آنها را اعمال میکنیم.
s.sendATCmdWaitReturnResp("AT+CSMP=17,167,0,0\r","OK",0.5,1)
پس از انجام تنظیمات، میتوانیم با استفاده از متد sendSMS به صورت زیر به ارسال پیام کوتاه اقدام کنیم.
s.sendSMS("09xxxxxxxxx","Hello I Am RPi")
در ورودی اول شماره مقصد و در ورودی بعدی متن پیام را به صورت رشته قرار میدهیم. اکنون برنامه آماده اجرا میباشد.
برای اجرای کد میتوانیم از برنامه Python 3 که در منو و بخش Programming قابل دسترس است استفاده کنیم.پس از باز کردن برنامه و بازگشایی فایل sms.py و با استفاده از منوی Run گزینه Run Module میتوانیم برنامه را اجرا کنیم و یا اگر از محیط ترمینال استفاده میکنید با استفاده از دستور زیر میتوانید برنامه را اجرا کنید.
Sudo python3 sms.py
از این کتابخانه میتوانید در برنامه های دیگر نیز استفاده کنید.
در این مقاله سعی کردیم تا با ساده ترین روش ها بتوانیم با شیلد SIM800 ارتباط برقرار کنیم، در صورتی که روش های بهتر و یا پیشنهادی در مورد مقاله داشتید، لطفا نظرات خود را برای ما ارسال کنید.