ارسال و دریافت SMS با میکروکنترلر STM32 و Sim800
سلام. ارسال و دریافت SMS با میکروکنترلر STM32 و ماژول Sim800 را آماده کردیم.
محتویات
آموزش دریافت و ارسال پیامک با stm32
ماژول های GSM اغلب در پروژه های IoT مورد استفاده قرار می گیرند زیرا توانایی ارسال و دریافت داده از راه دور را دارند. ماژول های GSM محدودیت های زیادی مانند ماژول های Wi-Fi ندارند. سایر ماژول های بی سیم مانند Wi-Fi دارای هزینه بالا و محدوده کوتاه (در ارتباط محلی) هستند. گرچه ماژول های gsm مثل sim800 نمیتوانند اطلاعات با حجم بالا را ارسال کنند اما برای ارسال و دریافت مقادیر معمول بسیار مناسب هستند.
فیلم زیر به شما در درک نحوه کار این پروژه کمک میکند.
در این پروژه STM32، ما یک ماژول gsm را به میکروکنترلر ARM STM 32 متصل میکنیم تا یک سیستم ارسال و دریافت پیامک را بسازیم. برای نمایش پیام های دریافتی از یک ال سی دی کاراکتری 16*2 استفاده میشود. دو دکمه قرار داده شده است که یکی برای ارسال پیام تنظیم شده و دیگری برای تغییر حالت دریافت / ارسال است.
فیلم عملکرد پروژه در انتهای صفحه قرار داده شده است.
در حال حاضر چندین پروژه GSM در سایت آیرنکس وجود دارد که با انواع مختلف میکروکنترلرها در ارتباط هستند :
- ساخت موبایل ساده با برد آردوینو و ماژول GSM Sim900
- پروژه آردوینو راه اندازی خانه هوشمند با اس ام اس (GSM Sim900 Arduino SMS)
- پروژه امنیت زنان با ارسال پیامک و مکان GPS آردوینو
- پروژه آبیاری اتوماتیک باغ با آردوینو و هشدار SMS
قطعات مورد نیاز
- STM32 – برد توسعه (BluePill) (STM32F103C8T6)
- ماژول GSM SIM800C
- ال سی دی کاراکتری 16*2
- دکمه (2)
- پتانسیومتر 10 کیلو اهم
ماژول GSM SIM800C چیست؟
SIM800C یک ماژول GSM است که به طور گسترده استفاده می شود. SIM800C یک ماژول چهار باند GSM / GPRS است که در برنامه ها در جایی که انتقال داده از راه دور مورد نیاز است استفاده می شود. SIM800C در 850/900/1800 / 1900MHz کار می کند. همچنین می تواند تماس صوتی ، پیام کوتاه را دریافت و انتقال دهد. ماژول با استفاده از دستورات AT کنترل می شود. این ماژول از یک سیم کارت پشتیبانی می کند و دارای پین های UART TX و RX به همراه یک پروتکل سریال RS232 است که می تواند برای برنامه ریزی با میکروکنترلرهای مختلف در برنامه های تعبیه شده استفاده شود.
برای تغذیه ماژول SIM800C GSM از آداپتور برق 12 ولت DC استفاده شده است. یک سیم کارت در پشت ماژول SIM800C GSM قرار میگیرد. توجه داشته باشید که SIM800C از 4G پشتیبانی نمی کند ، بنابراین سیم کارت 4G را وارد نکنید.
به منظور ارتباط SIM800C با میکروکنترلر STM32F103C8 ، از درگاه سریال UART استفاده می شود که یک رابط سریال سخت افزاریاست. تصویر زیر پین های UART را در میکروکنترلر STM32 در پین A9 و A10 نشان می دهد.
STM32F103C8 دارای سه رابط UART برای اتصال سه سریال خارجی است.
ما مهم ترین دستورات AT که در دیتاشیت ماژول سیم 900 موجود است را در لیست زیر برای شما آماده کرده ایم.
دستور AT | پاسخ ماژول |
AT+CPIN? | چک کردن کیفیت سیگنال |
AT+COPS? | اطلاع از نام سرویس دهنده مثلا ایرانسل یا غیره |
ATD98XXXXXXXX; | تماس با یک شماره خاص |
AT+CNUM | پیدا کردن شماره سیم کارت |
ATA | پاسخ دادن به تماس ورودی |
ATH | قطع کردن تماس فعلی |
AT+COLP | نمایش شماره تماس ورودی |
AT+VTS=(number) | DTMF ارسال شماره |
AT+CMGR | AT+CMGR=1 خواندن پیام جایگاه اول |
AT+CMGD=1 | پاک کردن پیام در جایگاه اول |
AT+CMGDA=”DEL ALL” | پاک کردن تمامی پیام های سیم کارت |
AT+CMGL=”ALL” | خواندن تمامی پیام های سیم کارت |
AT+CMGF=1 | تنظیم حالت اس ام اس در حالت متن |
AT+CMGS = “+98 935837XXXX” >متن اس ام اس <Ctrl+z> | ارسال اس ام اس به یک شماره خاص پس از < متن دلخواه را وارد کنید و سپس کلید کنترل + زد را بزنید. |
AT+CGATT? | چک کردن اتصال اینترنت سیم کارت |
AT+CIPSHUT | قطع ارتباط با اینترنت |
AT+CSTT = “APN”,”username”,”Pass” | اتصال به اینترنت با استفاده از ای پی ان و پسورد که میتوانید از سرویس دهنده سیم کارت بگیرید. |
AT+CIICR | چک کردن دیتاپک سیم کارن |
AT+CIFSR | دریافت آی پی سیم کارت |
AT+CIPSTART = “TCP”,”SERVER IP”,”PORT” | TCP IP connection تنظیم |
AT+CIPSEND | ارسال دیتا به سرور |
مدار ارسال و دریافت SMS با میکروکنترلر STM32
تصویر زیر شماتیک مدار پروژه راه اندازی ماژول GSM با میکروکنترلر STM32 را نشان میدهد.
دو دکمه با مقاومت 10 کیلو اهم به پین های PA0 و PA1 میکروکنترلر STM32 وصل شده اند.
اتصالات مدار بین STM32F103C8 و GSM SIM800C
STM32 | GSM SIM800C |
PA9 (TX) | RX |
PA10 (RX) | TX |
GND | GND |
اتصالات مدار بین LCD STM32F103C8 و 16×2
شماره پین LCD | نام پین LCD | نام پین STM32 |
1 | Ground | Ground |
2 | VCC | 5V |
3 | VEE | پتانسیومتر |
4 | Register Select (RS) | PB11 |
5 | Read/Write (RW) | Ground |
6 | Enable (EN) | PB10 |
7 | Data Bit 0 DB0 | بدون اتصال |
8 | Data Bit 1 DB1 | بدون اتصال |
9 | Data Bit 2 DB2 | بدون اتصال |
10 | Data Bit 3 DB3 | بدون اتصال |
11 | Data Bit 4 DB4 | PB0 |
12 | Data Bit 5 DB5 | PB1 |
13 | Data Bit 6 DB6 | PC13 |
14 | Data Bit 7 DB7 | PC14 |
15 | LED مثبت | 5V |
16 | LED منفی | Ground |
میکروکنترلر STM32F103C8 برای برنامه ریزی رابط GSM
در آموزش قبلی ما درباره برنامه نویسی STM32 با استفاده از درگاه USB آموختیم. می توان با استفاده از درگاه USB بدون استفاده از پروگرامر FTDI برد STM32 را برنامه ریزی کرد : آموزش برنامه نویسی STM32 با پورت USB. برنامه ریزی را به راحتی با ARDUINO IDE شروع کنید. برای بارگذاری کد در STM32F103C8 ، کافی است با استفاده از کابل USB ، درگاه microUSB را به STM32 و درگاه USB به رایانه وصل کنید و نوشتن کد را در ARDUINO IDE شروع کنید.
کد کامل پروژه در انتهای صفحه قرار داده شده است در اینجا بعضی از قسمت های کد را بررسی میکنیم.
در ابتدای کد مثل همیشه کتابخانه ال سی دی را فراخوانی میکنیم و سپس پین های اتصال LCD را تعریف میکنیم.
#include <LiquidCrystal.h> const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
سپس با عملکرد lcd.begin (16،2)
اندازه ال سی دی را تعریف میکنیم. و سپس پیام مقدمه را نمایش میدهیم.
lcd.begin(16,2); // تعریف اندازه ال سی دی lcd.print("STM32 WITH GSM"); // نمایش پیام lcd.setCursor(0,1); // ستون اول ردیف دوم lcd.print("SIM800C"); // نمایش پیام
شماره پین و نوع پین دکمه ها را تعریف میکنیم.
pinMode(PA0,INPUT); // تعریف پین به عنوان ورودی pinMode(PA1,INPUT); // تعریف پین به عنوان ورودی
میزان baud مورد استفاده برای ارتباط سریال را انتخاب کنید.
Serial1.begin(9600);
برای ارسال و دریافت پیام دو تابع وجود دارد که در اینجا در مورد آن ها بحث میکنیم.
ارسال اس ام اس با STM32
این عملکرد برای ارسال پیامک به شماره استفاده می شود. دستور AT به ماژول GSM ارسال می شود که نشان دهنده حالت متن پیام و شماره ارسال آن است.
عبارت زیر ماژول GSM را در حالت متن با ارسال دستور AT (AT + CMGF = 1)
تنظیم می کند.
Serial1.println("AT+CMGF=1"); //تنظیم در حالت پیام متنی
پس از آن دستور AT (AT + CMGS)
که نشان دهنده ارسال پیامک به شماره موبایل است از طریق درگاه serial1 به ماژول GSM ارسال می شود.
Serial1.println("AT+CMGS=\"+91XXXXXXXXXX\"\r"); // شماره موبایل خود را وارد کنید
پیام ها با استفاده از دستور AT هر ثانیه ارسال می شوند و سپس CTRL + Z باید ارسال شود تا یک کد ASCII از CTRL + Z از طریق پورت Serial1 به ماژول GSM ارسال شود.
delay(1000); Serial1.println("Salam. Inja Irenx Ast."); // متن پیام مورد نظر شما Serial1.println((char)26);//کد برای کنترل + زد
سپس “SMS SENT” در ال سی دی کاراکتری نمایش داده می شود.
lcd.print("SMS SENT");
دریافت اس ام اس با STM32
در این عملکرد پیام ها در صفحه نمایش LCD دریافت و چاپ می شوند.
Serial1.println("AT+CNMI=2,2,0,0,0");
بنابراین ، برای دریافت پیام ها از دستور AT فوق استفاده می شود.
پس از دریافت پیامک ، رشته ای را در پورت serial1 درج می شود که داده های دیگری نیز در آن وجود دارد مانند زمان ، تاریخ و … بنابراین ، باید فقط قسمت مربوط به پیام را در ال سی دی نمایش دهیم.
while(1) { if(Serial1.available()) { do { while ( !Serial1.available() ); } while ( '"' != Serial1.read() ); do { while ( !Serial1.available() ); } while ( '"' != Serial1.read() ); do { while ( !Serial1.available() ); } while ( '"' != Serial1.read() ); do { while ( !Serial1.available() ); } while ( '"' != Serial1.read() ); do { while ( !Serial1.available() ); } while ( '"' != Serial1.read() ); do { while ( !Serial1.available() ); } while ( '"' != Serial1.read() ); while ( !Serial1.available() ); receive = Serial1.read(); while ( !Serial1.available() ); receive = Serial1.read(); lcd.clear(); while(1) { while ( !Serial1.available() ); receive = Serial1.read(); if ( receive == '\r' ) break; else lcd.write(receive); } } }
پروژه ارسال و دریافت اس ام اس با STM32
1. برای ارسال پیام متنی ، دکمه سمت چپ فشار را فشار دهید. سپس پیامک به شماره وارد شده در کد ارسال میشود.
2. برای دریافت پیام ، کافی است دکمه سمت راست را فشار داده و سپس پیامک دریافت و روی ال سی دی نمایش داده می شود.
موارد موجود در فایل : سورس کامل ، شماتیک
سلام وقت بخیر فایل ارور میزنه باز نمیشه
سلام جناب. فایل صحیح هست با نرم افزار WinRAR باز کنید.
سلام مهندس جان با WinRAR هم نشد نمیدونم چرا همش ایراد میگیره ماژول sim800lرو با آردینو راه اندازی کردم مشکلی نداره ولی وقتی همون کد رو برا stm32کامپایل میکنم کامپایل نمیشه در ضمن برد stm32رو هم اضاف کردم به محیط آردینو لطفا کمکم کنید ممنون
خب کد های STM32 با آردوینو تفاوت دارند. ابتدا مقاله برنامه نویسی STM32 با آردوینو رو مطالعه کنید و سپس این پروژه رو راه اندازی کنید.
! C:\Users\ARAD\Desktop\PRSgpTM32(irenx.ir).rar: The archive is either in unknown format or damaged
این ارور رو میده
فایل پروژه رو دوباره دانلود کنین.
سلام موقع باز کردن فایل با WINRAR ارور فرمت ناشناخته می دهد .
سلام جناب. فایل بررسی شد، سالم هست دوباره دانلود کنید.