آموزش رزبری پای سیم کارت GSM - GPRS

کنترل وسایل برقی با پیامک توسط شیلد سیم کارت Sim800C رزبری پای

sms-control-with-sim800c-and-raspberry-pi-digispark
نوشته شده توسط معین صابری

از اولین ارسال پیام متنی به صورت بی سیم و در قالب پیام کوتاه در بستر تلفن همراه، دهه ها می گذرد. امروزه روز، ارسال و دریافت پیامک، به امری عادی تبدیل شده ، به طوریکه گستره کاربری پیام کوتاه به حدی فراگیر شده که بسیاری از لوازم برقی را می توان با پیامک کنترل نمود و داده های بسیاری نیز دما، رطوبت و… را در قالب پیامک، دریافت نمود. در این آموزش، به طراحی سامانه ای خواهیم پرداخت که از آن در بازار با نام اس ام اس کنترلر یاد می شود. در اینجا، برای قسمت پردازش، از برد رزبری پای ۳ مدل b+ بهره برده شده است شما نیز می توانید از نوع جدید این برد که همان برد رزبری پای ۴ است، در پروژه خود استفاده نمایید. همچنین، شیلد sim800c وظیفه تامین واحد مخابراتی و ارسال و دریافت پیامک را بر عهده دارد. در آموزش پیشین ، به طراحی و پیاده سازی یک سامانه ارسال دما با پیامک، به کمک رزبری پای و شیلد sim800c پرداختیم، در این آموزش، با ارسال یک پیامک به رزبری پای، وضعیت یک رله را کنترل خواهیم نمود. در ادامه این آموزش با مرجع تخصصی رزبری پای و مرجع تخصصی ماژول سیم کارت به زبان فارسی، دیجی اسپارک همراه باشید.

 

 


پیش نیاز ها و آماده سازی های اولیه


در این آموزش، چانکه پیشتر بیان گردید، از برد رزبری پای ۳ مدل b+ به همراه شیلد ماژول sim800c استفاده نموده ایم. شیلد ماژول sim800c به سادگی بر روی رزبری پای سوار شده و تغذیه خود را از رزبری پای، تامین می نماید. بنابراین، دیگر پیچیدگی های تامین تغذیه و دیگر سیم کشی های مربوط به ارسال و دریافت داده را در روال پروژه نخواهیم داشت و روند کار، بسیار تسریع خواهد یافت. در ادامه، با توجه به آموزش پیشین در همین زمینه ، ابتدا می بایست نرم افزار gammu که رابط بین فرامین پیامکی و کاربر است را نصب و مطابق آموزش تنظیم نمایید و سپس، روال کار برنامه نویسی را آغاز نمایید.

 


کنترل ورودی/خروجی(GPIO) در رزبری پای


همانطور که در آموزش پیشین بیان گردید، برد رزبری پای را می توان به عنوان یک لپ تاپ(با توان پردازشی کمتر نسبت به لپ تاپ های امروزی) در نظر گرفت که علاوه بر کارهای عادی نظیر وب گردی، پخش فیلم و موزیک و یا حتی اجرای بازی، به کاربر این امکان را می دهد تا به طور مستقیم، به پایه های پردازنده دسترسی داشته باشد. در آموزش پیشین، در رابطه با محیط shell script و برنامه نویسی آن، بحث نمودیم. در اینجا، به کمک ترمینال رزبری پای، پایه های ورودی /خروجی آن که موسوم به GPIO است را کنترل خواهیم نمود و در نهایت با برنامه ای که در محیط shell script خواهیم نوشت، با توجه به پیامک دریافتی، وضعیت پایه را کنترل خواهیم نمود. در ابتدا، به وضعیت پایه های GPIO برد رزبری پای ۳ مدل b+، در تصویر زیر، توجه نمایید:

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

پس از اینکه حالت پایه مورد نظر(ورودی یا خروجی) تعریف گردید، می بایست مقدار آن را که صفر و یا یک است، به کمک دستور زیر، تعیین نماییم:
به کمک دستور فوق، در gpio26 مقدار یک را قرار دادیم. در صورتیکه بخواهیم در این پایه، مقدار صفر قرار دهیم، این مقدار را در انتهای دستور، به شکل زیر وارد می نماییم:

 


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


به طور کلی برای هر سیستم، می بایست یک روال کلی و یا الگوریتم تعیین نمود. روال کار بدین صورت است که ابتدا بررسی میکنیم که ایا پیغامی دریافت نموده ایم یا خیر. در صورتیکه پیامی دریافت شده بود، متن آن را بررسی میکنیم. در صورتیکه متن با turnon برابری میکرد، پایه موردنظر را یک منطقی خواهیم کرد. در حالت دیگر، در صورتیکه متن مذکور برابر با turnoff باشد، پایه مورد نظر را صفر خواهیم کرد. در هرکدام از حالت ها، پس از دریافت و اجرای پیام، یک پیغام به کاربر مبنی بر دریافت و اجرای موفقیت آمیز فرمان، ارسال خواهد شد.

 


قطعات مورد نیاز و شماتیک مدار


برای راه اندازی سامانه کنترل پیامکی این پروژه، قطعات زیر نیاز است:

برد رزبری پای

شیلد sim800c

ماژول رله

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

مطابق شکل فوق، پس از آنکه شیلد sim800c را به رزبری متصل نمودید، پایه تغذیه مثبت ماژول رله را به پایه ۵ ولت برد رزبری پای، پایه زمین را به یکی از پایه های زمین رزبری پای و پایه سیگنال و یا IN ماژول رله را به پایه GPIO26 برد رزبری پای، متصل نمایید.

 


برنامه نویسی پروژه کنترل رله پیامکی


همانطور که در آموزش ارسال دما به کمک برد رزبری پای و شیلد sim800c مشاهده نمودیم، برای برنامه نویسی، از محیط shell script  سیستم عامل لینوکس، استفاده می نماییم. همچنین از نرم افزار gammu، به عنوان یک واسط، جهت ارتباط با واحد مخابراتی، بهره خواهیم برد. به منظور ایجاد پروژه، در محیط ترمینال، یک فایل با نام دلخواه، مثلا gpio به کمک ابزار ویرایش متن نانو، به صورت  nano gpio باز نمایید، پس از باز شدن فایل، کد های زیر را در آن قرار دهید. توجه داشته باشید که در متن کد برنامه، به جای *، شماره موبایل خود را بدون صفر، به عنوان مثال ۹۱۲۱۲۳۴۵۶۷ قرار دهید تا در نهایت شماره تماس به شکل ۹۸۹۱۲۱۲۳۴۵۶۷+ تبدیل شود. سپس به کمک کلید ترکیبی ctrl+x و در ادامه آن فشردن دکمه y کیبورد در جهت تایید ذخیره سازی فایل، فایل را ذخیره نمایید. در نهایت، می بایست به کمک دستور زیر، فایل را از حالت متنی، به حالت اجرایی تبدیل نمایید:

در ادامه، کدهای پروژه، به شرح زیر است.

 

جهت دسترسی به این بخش، اشتراک اسپارکر پلاس تهیه کنید.

 


اجرای برنامه تحلیل کدهای پروژه


در ابتدا، جهت اجرای پروژه، می بایست به کمک دستور gpio/. برنامه را اجرا نمایید. در برنامه فوق، ابتدا یک متغیر به نام x تعریف نمودیم و مقدار آن را برابر عددی دلخواه، مثلا ۵ قرار دادیم. دلیل این موضوع آن است که می خواهیم یک حلقه تکرار بی نهایت ایجاد کرده باشیم تا در آن به بررسی پیامک دریافتی و متن آن و تعیین وضعیت رله، پرداخته باشیم؛ چراکه در این حلقه هیچگاه مقدار x تغییر نخواهد کرد و شرط خروج از حلقه، به کمک دستور gt-، چنین تعیین شده است که تا زمانیکه مقدار x از ۱ بزرگتر است، حلقه پابرجا بماند. در قسمت بعدی، به کمک دستور زیر، ابتدا  کلیه پیامک های موجود در حافظه سیم کارت را خوانده و با عملگر <، پیام ها را در فایل out.txt ذخیره می نماییم:

دقت داشته باشید که هم قبل از شروع حلقه و درون حلقه پس از هربار خواندن پیام، پیام ها پاک خواهند شد. از این رو، در هر مرحله، تنها یک پیغام خوانده می شود. در ادامه، پس از اینکه محتویات پیام در فایل out.txt ریخته شد، به کمک دستورات زیر، به دنبال عبارت turnon و turnoff خواهیم بود تا در صورت مشاهده هر کدام از این پیام ها، اقدام لازم صورت گیرد:

در دو عبارت بالا، به کمک دستور grep که ابزار جستجوی متن در فایل است، به دنبال عبارت turnon  و turnoff برای تعیین وضعیت رله بوده و خروجی جستجوی هر پیام  را در متغیر out و out2 ذخیره می نماییم. حال در حلقه تکرار، به بررسی عبارت ذخیره شده، ابتدا در متغیر out میپردازیم. چنانچه عبارت turnon در این متغیر ذخیره شده باشد، ابتدا به کمک دستور زیر، پایه gpio 26 را که در ابتدای برنامه حالت آن به صورت خروجی تنظیم شده است، در وضعیت یک منطقی قرار می دهیم:

در نظر داشته باشید که در خط بالای همین دستور، به کمک دستور echo، پیامی مبنی بر دریافت پیامک، در صفحه ترمینال، به نمایش درخواهد آمد. پس از این مرحله، به کمک دستور  sendsms، پیامی با عنوان turn on command operated به شماره از پیش تعیین شده، ارسال خواهیم نمود. در رابطه با فرمت ارسال پیام، در پروژه ارسال دما، به طور مفصل بحث شده است. در نهایت، کلیه پیام ها پاک خواهد شد تا در دفعات بعدی، خواندن متن پیام ها بدون مشکل انجام شود.

در ادامه، به بررسی شرط بعدی، یعن پیام turnoff که در متغیر out2 ذخیره شده است، می پردازیم. در صورتیکه چنین پیامی در متغیر ذخیره شده باشد، می بایست وضعیت پایه gpio26، صفر گردد. دستور elif، معادل همان else if در زبان های برنامه نویسی است. در صورتیکه عبارت turnoff در متغیر out2 ذخیره شده باشد، دقیقا همان مراحل turnon، اما با تفاوت صفر شدن وضعیت پایه gpio26 و متن ارسالی به کاربر، اجرا خواهد شد. در زیر، تصویری از رد و بدل شدن پیام بین کاربر و دستگاه، دیده می شود:

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

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

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

تبادل نظر و رفع عیب با ثبت دیدگاه