آموزش راه اندازی برد کاربردی صنعتی SIM808 توسط Raspberry Pi 3
پس از آشنای اولیه با UART رزبری برای آشنایی بیشتر و بهتر با کاربردهای رزبری در این قسمت به سراغ ماژول SIM800 میرویم. با استفاده از این ماژول میتوانید رزبری خود را تبدیل به گوشی همراه کنید.همچنین از این ماژول برای ساخت سیستم های همچون BMS و اتواسیون صنعتی استفاده کرد. قطعات مورد نیاز عبارت است: مدل B 2- ماژول صنعتی SIM808 3-بردبرد 4-کانکتور های مخابراتی 5-LED 6-مقاومت 330 اهم 7-شارژ موبایل با کانکتور Mini USB .
اگر به رزبری خود LCD وصل نکرده اید میتوانید با استفاده از VNC محیط دسکتاپ رزبری را در کامپیوتر خود نمایش دهید و برنامه نویسی خود را توسط کامپیوتر انجام دهید.
sim808 چیست؟
طراحی یک سیستم بر اساس ارسال پیام،انتقال داده،ایجاد تماس صوتی و موقعیت یابی جغرافیایی و یا مواردی از این دست، ملزم به طراحی و استفاده از مدارهای مخابراتی و یا استفاده از ماژول های از پیش طراحی شده مانند خانواده ی SIM808 است.
ماژول مخابراتی SIM808 توسط شرکت SIMCOM ارائه شده است ،SIM808 یک ماژول GSM/GPRS/BLUETOOTH با قابلیت پشتیبانی از چهار کانال 1900/1800/900/850برای ارسال دیتا،SMS،MMS،برقرای تماس صوتی ودریافت موقعیت جفرافیای است. از این ماژول مخابراتی میتوان به عنوان یک تلفن همراه هوشمند در نظر گرفت کهکاربران به وسیله یآن میتوانند دیتا را به درستی ارسال و دریافت کنند.این ماژول قابلیت پشتیبانی ازتمام اپراتور های مخابراتی را دارا می باشد.برای را ه اندازی وبرقراری ارتباط با این ماژول از دو پروتکل UART و SPI استفاده کنید.
اما برد صنعتی sim808 ،از این برد به منظور کار با این ماژول در محیط های صنعتی توسط شرکت ECA طراحی شده است.از ویژگی های بارزی که این برد که به ماژول SIM808 اضافه کرده عبارت است از.
1-ساده کردن کاربا این ماژول
2-قابلیت کار در محیط های صنعتی
3-استفاده از کانکتورهای مختلف ارتباطی با طول های دور(RS232)،متوسط(USB) ونزدیک (GPIO) برای ارتباط با کنترل کننده ی اصلی(رزبری) این برد.در محیط های صنعتی
4-اتصال میکروفون و اسپیکر بدون نیاز به مدارات اضافه.
در محیط های صنعتی ا ی که فاصله ی کنترل کننده ی این برد تا خود برد طولانی است از کانکتور سریالUART- RS232 استفاده میشود.
اما در فاصله ی های نزدیک و متوسط از کانکتور ها ی GPIO و USB استفاده میشود .در حالتی که از کانکتور USB استفاده شود باید از پروتکل سریال UART استفاده شود زیرا در برد از یک مبدل USB به سریال استفاده شده است که توسط رزبری قابل استفاده است.اما کانکتوری که در این قسمت از ان استفاده شده است GPIO میباشد. در این کانکتور از میتوان از دو پروتکل SPI و UART استفاده کرد. همچنین پینهای دیگری را نیز دارد که در راه اندازی آسان این برد به ما کمک میکنند یکی از پینها پین RI میباشد.
برای کار و راه اندازی با این ماژول به سادگی با استفاده از ATCommand ها کنترل این ماژول را در اختیار بگیرید.برای داشتن اطلاعات بیشتری در مورد این ماژول میتوانید از دیتا شیت ویا فایل راهنمای برد صنعتی ECA استفاده کنید.
برای خرید برد اینجا کلیک کنید.
.ATCOMMAND چیست؟
یک زبان مشترک در اکثر وسایل جانبی است.که معمولا درگوشی های همراه برای ارتباط پردازنده با وسایل جانبی استفاده شده است.در اینجا تعدادی از دستوراتی که در این پروژه استفاد شده است را آورده ایم.در انتهای هر دستور باید کارکتر NEW LINE که همان عدد 13 است را ارسال کنیم.برای آگاهی بیشتر با این دستورات به دفترچه راهنمای ماژول مراجعه کنید.
نحوه ی کار و شماتیک پروژه:
همانطور که در شکل زیر مشاهد میکنید برای راه اندازی برد صنعتی ماژول SIM808 تنها به 6 سیم نیاز است. که دوسیم آن برای تغذیه ی ماژول استفاده میشود.البته باید توجه کنیدکه ولتاژ تغذیه ماژول جدا از رزبری باشد و از پین های رزبری برای تغذیه ماژول استفاده نکنید
چهار سیم دیگری برای ارتباط با SIM808 استفاده شده که دو تای آن برای دریافت و ارسال اطلاعات با پروتکل UART استفاده شده و یک سیم نیز که به پینی بانام RI ماژول وصل شده است. این پین به صورت خروجی در ماژول بوده و در حالت عادی 1منطقی (4.2v) است و در صورتی که یک پیام دریافت شود.
برای مدت کوتاهی به صفر ولت میرسد و در صورتی که تماسی با سیم کارت داخل ماژول گرفته شود این پین تا قطع تماس به صفر ولت تغییر پیدا میکند. بدین صورت میتوان به رزبری از طریق این پایه برای دریافت پیام وتماس اطلاع داد. پایه بعدی مربوط به روشن / خاموش کردن ماژول است که با نام PWR مشخص شده است. برای روشن کردن و خاموش کردن این ماژول باید یک پالس به مدت یک ثانیه به این پین از طرف رزبری اعمال کرد.
نکته ی مهم دیگر این است که برای کاهش سطح ولتاژ هایی که از طریق ماژول به رزبری میرسد میتوانید از تقسیم مقاوتی نیز استفاده کنید(اگر چه این کار برای محافظت پین های رزبری لازم است ولی به دلیل کم بودن ولتاژ پایه های خروجی ماژول میتوانید از این مقاومت ها استفاده نکنید).برای تغذیه ی این ماژول از یک آداپتور 5V با جریان 2A استفاده کنید. زیرا SIM808 در هنگام اتصال به شبکه جریان بالا یی در حدود 1.5A را از تغذیه میکشد. همچنین برای اتصال به شبکه ی موبایل و GPS نیاز به دو آنتن مجزا دارید که در فایل راهنما کاربر برد صنعتی Sim808 در سایت ECA توضیحات کاملی آورده شده است.
کلیات برنامه:
بدنه ی اصلی برنامه ی فوق از تابع gets وتعدادی شرط ساخته شده است بطوری که یک رابط کاربری از طریق خط فرمان ایجاد میکند، در ابتدای اجرا، برنامه از کاربر درخواست نوشتن یک دستور در خط فرمان میکند برای تحقق این امر در داخل تابع main توسط تابع gets یک رشته(دستور) را از کاربر دریافت میکند وبا شرطهای موجود مقایسه میکند و طبق دستور نوشته شده یکی از توابع زیر اجرا میشود. برای مثال اگر کاربر پس از اجرای برنامه دستور call وارد کند برنامه از کاربر درخواست شماره میکند، پس از نوشتن شماره سیستم با شماره ی وارد شده توسط کاربر تماس میگیرد.برای مقایسه ی دستورات وارد شده توسط کاربر از تابع strcmp که درکتابخانه string موجود قرار دارد استفاده شده است.
توابع مورد استفاده در این پروژه:
در توابع که بررسی شده اند بادستوراتی همچون:
serialPutchar(fd,13);
مواجه خواهید شد. این دستور در واقع همان کارکتر NEW LINE را از طریق پورت سریال ارسال میکند. بعد از هر دستور فرستاده میشود.
تابع تماس :
از این تابع برای برقراری تماس استفاده میشود.
ورودی اول مقدار توصیفگر فایل مربوط به UART است، که به منظور استفاده ی توابع سریال داخل این تابع استفاده شده است.
ورودی دوم شماره ای که میخواهید با آن تماس بگیرید را به صورت رشته وارد میکنید.
#define CALL “ATD” //دستور برقرای تماس
#define END_CALL “ATH”//دستور قطع تماس
void Sim808_Call(int fd,char number[]){ char h; serialPuts(fd,CALL); serialPuts(fd,number); serialPutchar(fd,';'); serialPutchar(fd,13); h=getchar(); if((h='e')||(h='E')){ serialPuts(fd,END_CALL); serialPutchar(fd,13);}
این آدرس به همرا توضیحاتی اضافی ما قبل آدرس ارسال میشود و در انتهای توضیحات کارکتر ‘,’ قرار میگیرد وسپس آدرس قرار میگرد. توضیحات اضافه توسط حلقه ی while اول حذف شده و آدرس توسط تابع دریافت سریال در داخل متغییر ad ذخیره می شود. در خط های بعدی این متغییر به همراه دستورات مربوط به خواندن پیام از ماژول ارسال میشود.
تابع خواندن پیام:
از این تابع برای خواندن پیام استفاده میشود ورودی اصلی این تابع نیز آدرس پیام است.
void ReadSMS_Sim808(int fd ,char ad){ char i,sms_text[20]; serialPuts(fd,AD); serialPutchar(fd,ad); serialPutchar(fd,13); while(!(serialGetchar(fd)=='#')); printf("text of sms is:\n"); for(i=0;i<20;i++){ sms_text[i]=serialGetchar(fd); getchar(sms_text[i]); if(sms_text[i]==';'){ sms_text[i]=0; break; }}
به محض ارسال آدرس، ماژول شروع به ارسال اطلاعاتی از پیام(همانند شماره تلفن فرستنده،زمان ارسال و…)بعلاوه متن پیام میکند. برای اینکه مراحل استخراج متن پیام ساده باشد، پیام ها باید در قالب خاصی ارسال شوند.
این قالب باید به صورت زیر است.
#پیام کمتر از بیست کارکتر ;
حلقه ی while دوم برای پیدا کردن ابتدای متن پیام و شرط داخل حلقه ی for برای پیدا کردن انتهای پیام بکار رفته است. در نهایت پیام دریافتی در داخل آرایه ای ذخیره میشود تا در مرحله بعد یعنی مرحله شرط ها دستور توسط برنامه اجرا شود.
توجه :اگر پیام خارج از قالب پیشنهادی باشد سیستم در یک حلقه گیر خواهد کرد و سیستم را دچار مشکل میکند.این هزینه ای است که در قبال سادگی پرداخت میکنیم.
نویسنده: میثم سعیدی msimeysamsaeedi @ gmail.com