آموزش جامع Sim900 با آردوینو (پیامک و تماس)

تصور کنید که بتوانید از هر جایی خانهتان را نظارت کنید، آبیاری باغتان را تنها با یک تماس از دست رفته کنترل کنید یا بلافاصله پیامک دریافت کنید زمانی که کسی وارد خانهتان میشود—همه اینها بدون نیاز به یک سیستم امنیتی گرانقیمت. با شیلد SIM900 GSM/GPRS، میتوانید این ایدهها را به واقعیت تبدیل کنید.
شیلد SIM900 یک مودم GSM است که قابلیت اتصال سلولی را به پروژههای آردوینو اضافه میکند. درست مانند تلفن همراه شما، این شیلد میتواند پیامک ارسال کند، تماسهای تلفنی برقرار کند و حتی با استفاده از GPRS به اینترنت متصل شود. چه در حال ساخت یک سیستم اتوماسیون خانگی، دستگاه هشدار اضطراری یا چیزی باشید که بخواهید از راه دور کنترل کنید، این شیلد یک تحول بزرگ است.
در این آموزش، گام به گام به شما نشان میدهیم که چگونه شیلد SIM900 را به آردوینو متصل کنید. شما خواهید آموخت که چگونه شیلد را به درستی راهاندازی کرده و تغذیه کنید تا به صورت قابل اعتماد عمل کند. همچنین به شما نشان خواهیم داد که چگونه از این شیلد با آردوینو برای ارسال و دریافت پیامکها استفاده کنید و حتی چطور با استفاده از کدها و دستورات ساده تماسهای تلفنی برقرار کرده و پاسخ دهید.
مقالات مشابه:
- اتصال Sim800l به برد ESP32 (آموزش جامع)
- راه اندازی Sim800L با آردوینو (تماس و پیامک SMS)
- ساخت موبایل ساده با برد آردوینو و ماژول GSM Sim900
پس از یادگیری این مهارتها، آماده خواهید بود تا پروژههای متصل به شبکه سلولی خود را ایجاد کرده، اشیاء را از راه دور کنترل کنید و بیشترین بهره را از ارتباطات GSM ببرید. بیایید شروع کنیم!
مروری بر شیلد SIM900 GSM/GPRS
شیلد SIM900 GSM/GPRS بر پایه چیپ قدرتمند SIM900 ساخته شده است. این شیلد تمام چیزی که برای اتصال به برد آردوینو نیاز دارید را دارد، به علاوه ویژگیهای اضافی جالبی که از این چیپ ویژه به بهترین نحو استفاده میکنند.
بیایید نگاهی به آنچه این شیلد میتواند انجام دهد بیندازیم:
شیلد SIM900 با ویژگیهای بسیاری مفید عرضه میشود. در اینجا برخی از ویژگیهای مهم آن آمده است:
- پشتیبانی از باند چهارگانه: GSM850، EGSM900، DCS1800 و PCS1900
- اتصال به هر شبکه GSM جهانی با هر سیم کارت 2G
- امکان برقراری و دریافت تماسهای صوتی با استفاده از گوشی خارجی و میکروفن الکتریت
- ارسال و دریافت پیامکها
- ارسال و دریافت دادههای GPRS (TCP/IP، HTTP و غیره)
- اسکن و دریافت پخشهای رادیویی FM
- توان انتقال: کلاس 4 (2 وات) برای GSM850 و کلاس 1 (1 وات) برای DCS1800
- مجموعه دستورات AT مبتنی بر سریال
- اتصالات U.FL و SMA برای آنتنهای سلولی
- پذیرش کارت SIM کامل اندازه
نشانگر وضعیت LED
شیلد SIM900 دارای سه LED مفید است که به شما نشان میدهند که آیا به شبکه متصل است و تغذیه دریافت میکند یا خیر. این چراغها به شما کمک میکنند تا وضعیت شیلد را فقط با نگاه کردن به آن درک کنید.
LED PWR: نشاندهنده این است که آیا شیلد شما تغذیه دریافت میکند یا خیر.
LED وضعیت (Status): نشاندهنده وضعیت کاری شیلد است. وقتی این چراغ روشن است، به این معنی است که چیپ در حالت کاری قرار دارد و به درستی عمل میکند.
LED Netlight: به صورت الگوهای مختلف چشمک میزند تا وضعیت اتصال شما به شبکه سلولی را نشان دهد:
- خاموش: چیپ SIM900 در حال راهاندازی است (با فرض اینکه تغذیه دریافت کرده باشد).
- 64ms روشن، 800ms خاموش: چیپ SIM900 در حال اجرا است اما هنوز به شبکه سلولی متصل نشده است.
- 64ms روشن، 3 ثانیه خاموش: چیپ SIM900 به شبکه سلولی متصل شده و میتواند پیامکها و تماسهای تلفنی ارسال و دریافت کند.
- 64ms روشن، 300ms خاموش: اتصال GPRS شما فعال و در حال کار است.
تأمین تغذیه
اطمینان از اینکه شیلد SIM900 به اندازه کافی تغذیه دریافت میکند، یکی از مهمترین بخشها برای کارکرد درست آن است.
SIM900 بسته به کاری که انجام میدهد، میتواند مصرف برق زیادی داشته باشد. به طور مثال، زمانی که در حال برقراری تماس تلفنی است، حدود 216 میلیآمپر برق نیاز دارد و هنگام ارتباطات معمولی شبکه حدود 80 میلیآمپر مصرف میکند. اما در برخی لحظات، مانند زمانی که دادهها را در مقاطع کوتاه ارسال میکند، ممکن است ناگهان به 2 آمپر جریان نیاز داشته باشد!
این نمودار از دیتاشیت نشان میدهد که چیپ در شرایط مختلف چقدر برق مصرف میکند.
حالت | فرکانس | مصرف جریان |
---|---|---|
خاموش | 60 میکروآمپر | |
حالت خواب | 1 میلیآمپر | |
آماده به کار | 18 میلیآمپر | |
تماس | GSM850 | 199 میلیآمپر |
EGSM900 | 216 میلیآمپر | |
DCS1800 | 146 میلیآمپر | |
PCS1900 | 131 میلیآمپر | |
GPRS | 453 میلیآمپر | |
انفجار انتقال | 2 آمپر |
چیپ SIM900 در بازه ولتاژ 3.4 ولت تا 4.4 ولت عمل میکند. برای تأمین یک منبع تغذیه ثابت و ایمن، این شیلد شامل یک رگولاتور ولتاژ Micrel MIC29302WU است. این رگولاتور جریان بالا، دقت بالا و افت ولتاژ کم دارد. این رگولاتور ولتاژ را در 4.1 ولت ثابت نگه میدارد و میتواند جریان بار تا 3 آمپر را پشتیبانی کند که برای تأمین تغذیه شیلد کافی است.
انتخاب تأمین تغذیه از طریق جک DC
شیلد یک جک DC با قطر 5.5 میلیمتر دارد که میتوانید هر آداپتور دیواری که تغذیه DC 5V-9V را ارائه میدهد، به آن متصل کنید. کنار این جک یک سوئیچ لغزشی با برچسب “EXTERN” قرار دارد که به شما این امکان را میدهد تا منبع تغذیه خود را انتخاب کنید. اگر میخواهید از تأمین تغذیه خارجی استفاده کنید، کافی است سوئیچ را همانطور که نشان داده شده حرکت دهید.
تأمین تغذیه شما باید قادر به تأمین حداقل 2 آمپر جریان پیک باشد. اگر تأمین تغذیه شما نتواند جریان کافی ارائه دهد، چیپ مدام خود را ریست کرده و به درستی عمل نخواهد کرد.
ارتباط UART
شیلد SIM900 از پروتکل UART برای ارتباط با آردوینو استفاده میکند. این شیلد از نرخهای Baud مختلفی از 1200 bps تا 115200 bps پشتیبانی میکند. اما نیازی نیست نگران تنظیم سرعت دقیق باشید—شیلد SIM900 یک ویژگی جالب به نام “تشخیص خودکار سرعت Baud” دارد، به این معنی که سرعتی که شما اولین دستور “AT” را پس از ریست کردن ارسال میکنید، سرعت تمام ارتباطات آینده را تنظیم خواهد کرد.
پینهای انتخاب UART روی شیلد SIM900
در شیلد، جامپرهای انتخاب UART وجود دارند. این جامپرها به شما این امکان را میدهند که انتخاب کنید شیلد از کدام پینها برای دریافت (RX) و ارسال (TX) دادهها استفاده کند. شما دو گزینه دارید:
- UART نرمافزاری: از پینهای D8 و D7 استفاده میکند
- UART سختافزاری: از پینهای D1 و D0 استفاده میکند
با این انعطافپذیری، میتوانید روش ارتباطی که بهترین تطابق را با پروژه شما دارد، انتخاب کنید.
بلندگو و میکروفون
شیلد SIM900 با دو جک استاندارد 3.5 میلیمتری عرضه میشود. یکی برای گوشیهای هدفون و دیگری برای میکروفون. با اینها میتوانید تماسهای تلفنی برقرار کنید و پاسخ دهید، و حتی به رادیوی FM گوش دهید!
- میکروفون: میتوانید هر میکروفون الکتریت خارجی را مستقیماً به این جک متصل کنید. نیازی به قطعات یا مدار اضافی نیست—فقط آن را وصل کنید و آماده استفاده است.
- گوشی هدفون: هر هدفونی که با آیفون یا گوشیهای اندروید کار میکند، به طور کامل با این جک سازگار است. شما میتوانید از آنها برای برقراری تماسها یا پخش صدا استفاده کنید.
آنتن
برای عملکرد صحیح SIM900، نیاز به یک آنتن خارجی دارید. بدون آنتن، نمیتوانید تماس برقرار کنید، داده ارسال کنید یا حتی برخی از دستورات AT را اجرا کنید.
شیلد دارای دو کانکتور آنتن مختلف است: یک کانکتور U.FL و یک کانکتور SMA. این دو کانکتور از طریق یک کابل رابط به هم متصل شدهاند.
بیشتر شیلدهای SIM900 با یک آنتن GSM 3dBi عرضه میشوند که این امکان را میدهد تا شیلد را داخل یک جعبه فلزی قرار دهید، به شرطی که آنتن خود بیرون از جعبه قرار گیرد.
اسلات سیم کارت
در پشت شیلد، یک اسلات برای قرار دادن سیم کارت شما وجود دارد. هر سیم کارت 2G کامل اندازه به درستی کار خواهد کرد.
استفاده از اسلات سیم کارت ممکن است در ابتدا کمی پیچیده به نظر برسد، اما نحوه انجام آن به این صورت است: برای باز کردن قفل، بخش بالایی مجموعه را به سمت موقعیت “OPEN” فشار دهید و سپس آن را بلند کنید. سیم کارت خود را در قسمت متحرک قرار دهید. سپس بازوی آن را به داخل بدنه اسلات تا کنید و به آرامی به سمت موقعیت “LOCK” فشار دهید.
RTC (ساعت زمان واقعی)
علاوه بر این، شیلد SIM900 دارای یک RTC (ساعت زمان واقعی) داخلی است، بنابراین نیازی به استفاده از ماژول جداگانه برای پیگیری زمان ندارید.
برای استفاده از این ویژگی، باید یک باتری CR1220 را در پشت شیلد نصب کنید. این باتری اطمینان میدهد که ساعت حتی زمانی که شیلد خاموش است، همچنان به کار خود ادامه میدهد.
اتصال شیلد سیم کارت SIM900 به آردوینو
حالا که با شیلد SIM900 آشنا شدید، وقت آن رسیده که آن را به آردوینو متصل کنید! در اینجا مراحل گام به گام برای انجام این کار آمده است.
ابتدا شیلد SIM900 را روی آردوینو UNO نصب کنید.
همانطور که میدانید، شیلد SIM900 از ارتباط UART استفاده میکند. در اینجا یک چالش کوچک وجود دارد: آردوینو UNO فقط یک مجموعه از پینهای سختافزاری UART (پینهای 0 و 1) دارد که این پینها در حال استفاده هستند زمانی که آردوینو را به کامپیوتر خود متصل میکنید (مثل زمانی که کد را بارگذاری میکنید یا پیغامها را در Serial Monitor مشاهده میکنید).
برای حل این مشکل، یک اتصال UART دوم با استفاده از پینهای دیجیتال معمولی ایجاد خواهیم کرد (با کمک کتابخانه SoftwareSerial). در شیلد خود، جامپر انتخاب پورت سریال نرمافزاری را پیدا کرده و آن را روی موقعیت “انتخاب پورت سریال نرمافزاری” قرار دهید. این کار پینهای 7 و 8 را به عنوان پینهای TX و RX برای ارتباط پیکربندی میکند.
این کار اطمینان میدهد که شیلد SIM900 میتواند بدون تداخل با اتصال USB به کامپیوتر، با آردوینو ارتباط برقرار کند.
سیمکشی شیلد SIM900 GSM/GPRS با آردوینو UNO
مهم است که بدانید شیلد SIM900 به درستی عمل نخواهد کرد اگر آردوینو فقط از طریق USB تغذیه شود. SIM900 به طور ناگهانی به جریانهای تا 2 آمپر نیاز دارد که اتصال USB استاندارد قادر به تأمین آن نیست. اگر تأمین برق کافی نباشد، چیپ SIM900 هر بار که نیاز به برق بیشتری داشته باشد، خود را ریست میکند.
برای جلوگیری از این مشکل، از یک منبع تغذیه خارجی 5 ولت استفاده کنید که بتواند 2 آمپر جریان را تأمین کند. همچنین مطمئن شوید که منبع تغذیه خارجی با استفاده از سوئیچ لغزشی کنار جک DC انتخاب شده باشد.
در نهایت، آنتن را به شیلد متصل کرده و یک سیم کارت فعال شده را در اسلات سیم کارت وارد کنید.
روشن و خاموش کردن چیپ SIM900
مهم است که بدانید حتی زمانی که شیلد برق دریافت میکند، چیپ SIM900 کار نخواهد کرد مگر اینکه روشن شود. دو روش برای انجام این کار وجود دارد:
1. دستی با استفاده از دکمه POWER
شیلد شامل یک سوئیچ لمسی است که به ورودی PWRKEY چیپ SIM900 متصل است. این دکمه دقیقاً مانند دکمه پاور در تلفنهای قدیمی عمل میکند.
- اگر چیپ خاموش است، دکمه را برای 1-2 ثانیه فشار دهید و سپس رها کنید تا چیپ روشن شود.
- و اگر چیپ روشن است، دوباره دکمه را برای 1-2 ثانیه فشار داده و نگه دارید تا خاموش شود.
2. برنامهنویسی از طریق نرمافزار
اگر نمیخواهید هر بار دکمه فیزیکی را فشار دهید، میتوانید چیپ SIM900 را از طریق کد آردوینو روشن و خاموش کنید.
اول، باید جامپر SMD با نام “R13” را روی شیلد لحیم کنید. این اتصال پین D9 آردوینو را به دکمه پاور SIM900 متصل میکند.
بعد از آن، میتوانید کد زیر را اضافه کنید که دقیقاً همان کار را که فشار دادن دکمه فیزیکی انجام میدهد، انجام میدهد:
digitalWrite(9, LOW); delay(2000); digitalWrite(9, HIGH); delay(2000);
این کد به چیپ SIM900 دستور میدهد تا روشن و خاموش شود، بدون نیاز به فشردن دکمه فیزیکی.
کد آردوینو ارسال دستورات AT به سیم 900
پس از تکمیل راهاندازی، شیلد SIM900 شما آماده است تا پیامک ارسال کند، تماس برقرار کند یا از طریق شبکه سلولی به اینترنت متصل شود.
ابتدا با تست دستورات AT شروع میکنیم. این دستورات به ما کمک میکنند تا با شیلد ارتباط برقرار کرده و بررسی کنیم که آیا به درستی کار میکند یا خیر. برای انجام این کار، از Serial Monitor در محیط آردوینو استفاده خواهیم کرد.
مراحل:
- ابتدا آردوینو را به کامپیوتر متصل کنید.
- سپس کد ارائه شده را کامپایل و بارگذاری کنید.
- پس از بارگذاری کد، Serial Monitor را باز کنید و مطمئن شوید که گزینه “Both NL and CR” انتخاب شده است.
#include <SoftwareSerial.h> // ایجاد شیء سریال نرمافزاری برای ارتباط با SIM900 SoftwareSerial mySerial(7, 8); // پینهای Tx و Rx سیم900 به آردوینو #7 و #8 متصل هستند void setup() { // شروع ارتباط سریال با آردوینو و IDE آردوینو (Serial Monitor) Serial.begin(9600); // شروع ارتباط سریال با آردوینو و SIM900 mySerial.begin(9600); Serial.println("Initializing..."); delay(1000); mySerial.println("AT"); // دست دادن با SIM900 updateSerial(); mySerial.println("AT+CSQ"); // تست کیفیت سیگنال، دامنه مقدار از 0-31 است که 31 بهترین کیفیت است updateSerial(); mySerial.println("AT+CCID"); // خواندن اطلاعات سیم کارت برای تأیید اینکه سیم کارت وارد شده است updateSerial(); mySerial.println("AT+CREG?"); // بررسی اینکه آیا در شبکه رجیستر کرده است updateSerial(); } void loop() { updateSerial(); } void updateSerial() { delay(500); while (Serial.available()) { mySerial.write(Serial.read()); // آنچه را که از سریال دریافت میشود به پورت سریال نرمافزاری ارسال میکند } while (mySerial.available()) { Serial.write(mySerial.read()); // آنچه را که از سریال نرمافزاری دریافت میشود به پورت سریال ارسال میکند } }
توضیحات:
SoftwareSerial mySerial(7, 8);
: این خط برای ایجاد یک شیء SoftwareSerial است که پینهای 7 و 8 را برای ارتباط با SIM900 تنظیم میکند.
Serial.begin(9600);
و mySerial.begin(9600);
: این خطوط ارتباط سریال را با آردوینو و SIM900 راهاندازی میکنند.
دستورات AT:
- “AT”: دست دادن با SIM900.
- “AT+CSQ”: تست کیفیت سیگنال.
- “AT+CCID”: خواندن اطلاعات سیم کارت.
- “AT+CREG?”: بررسی وضعیت رجیستر در شبکه.
OK
: نشاندهنده پاسخ صحیح از SIM900.+CSQ
: کیفیت سیگنال که مقداری بین 0 تا 31 است (31 بهترین کیفیت است).+CCID
: شناسه سیم کارت شما.+CREG
: وضعیت رجیستر در شبکه (0,1 یعنی رجیستر موفقیتآمیز).
این کد و خروجی به شما کمک میکند تا مطمئن شوید که شیلد SIM900 به درستی راهاندازی شده است و ارتباط با شبکه برقرار است.
تست ارسال دستورات AT مختلف
پس از اینکه شیلد SIM900 به درستی پاسخ داد، میتوانید به صورت دستی دستورات AT مختلف را از طریق Serial Monitor ارسال کرده و اطلاعات بیشتری دریافت کنید. در اینجا برخی از دستورات مفید آمده است که میتوانید امتحان کنید:
- ATI – این دستور نام شیلد و نسخه فریمور آن را برمیگرداند.
- AT+COPS? – این دستور نشان میدهد که به کدام شبکه موبایل متصل هستید.
- AT+COPS=? – این دستور تمام شبکههای موجود در منطقه شما را نمایش میدهد.
- AT+CBC – این دستور وضعیت باتری شیلد SIM900 را بررسی میکند. اطلاعاتی مانند درصد باتری و سطح ولتاژ نمایش داده خواهد شد.
استفاده از دستورات AT این امکان را به شما میدهد که کنترل دقیقتری بر روی شیلد SIM900 داشته باشید و مشکلات ممکن را شناسایی کنید.
کد آردوینو ارسال پیامک با سیم 900
پس از آزمایش دستورات AT اولیه، اکنون به موضوع هیجانانگیزتری میپردازیم—ارسال پیامک به هر شماره تلفنی با استفاده از شیلد SIM900.
قبل از بارگذاری کد، باید شماره تلفنی را که میخواهید پیامک به آن ارسال شود وارد کنید. در قسمت مربوطه در کد که شامل ZZxxxxxxxxxx
است، باید آن را با جزئیات صحیح جایگزین کنید:
- ZZ باید کد کشور شما باشد (مثلاً 1 برای آمریکا، 98 برای ایران).
- xxxxxxxxxx باید شماره تلفن 10 رقمی باشد که میخواهید پیامک به آن ارسال شود.
پس از وارد کردن شماره تلفن صحیح، میتوانید کد را کامپایل کرده و آن را به آردوینو بارگذاری کنید.
#include <SoftwareSerial.h> // ایجاد شیء سریال نرمافزاری برای ارتباط با SIM900 SoftwareSerial mySerial(7, 8); // Tx و Rx شیلد SIM900 به پینهای 7 و 8 آردوینو متصل هستند void setup() { // شروع ارتباط سریال با آردوینو و IDE آردوینو (برای مشاهده در Serial Monitor) Serial.begin(9600); // شروع ارتباط سریال با آردوینو و SIM900 mySerial.begin(9600); Serial.println("Initializing..."); delay(1000); mySerial.println("AT"); // دست دادن با SIM900 updateSerial(); mySerial.println("AT+CMGF=1"); // تنظیم حالت TEXT برای ارسال پیامک updateSerial(); mySerial.println("AT+CMGS=\"+ZZxxxxxxxxxx\""); // تغییر ZZ به کد کشور و xxxxxxxxxx به شماره تلفن مورد نظر updateSerial(); mySerial.print("Last Minute Engineers | lastminuteengineers.com"); // محتوای پیام updateSerial(); mySerial.write(26); // ارسال Ctrl+Z برای ارسال پیام } void loop() { } void updateSerial() { delay(500); while (Serial.available()) { mySerial.write(Serial.read()); // ارسال دادههایی که از سریال دریافت میشود به پورت سریال نرمافزاری } while (mySerial.available()) { Serial.write(mySerial.read()); // ارسال دادههایی که از پورت سریال نرمافزاری دریافت میشود به سریال } }
توضیح کد:
کد بهطور کلی مشابه کد قبلی است، اما شامل دستورات AT اضافی برای ارسال پیامک به یک شماره تلفن خاص است:
AT+CMGF=1
: این دستور شیلد SIM900 را به حالت TEXT Mode برای ارسال پیامک تنظیم میکند. بهطور پیشفرض، مودم GSM از حالت PDU (Protocol Data Unit) استفاده میکند که پیچیدهتر است، بنابراین آن را به حالت متنی تغییر میدهیم تا ارسال پیامک آسانتر شود.AT+CMGS="ZZxxxxxxxxxx"
: این دستور، که شماره تلفن را بهصورت" +ZZxxxxxxxxxx "
میگیرد، به شیلد SIM900 اطلاع میدهد که میخواهیم پیامک را به شماره تلفن مورد نظر ارسال کنیم. پس از ارسال این دستور AT، هر پیام متنی که وارد کنید، با فشار دادن دکمه Ctrl+Z (کد ASCII 26)، به عنوان پیامک ارسال میشود.mySerial.write(26);
: این دستور برای ارسال علامت Ctrl+Z است که به شیلد SIM900 میگوید پیام تکمیل شده و باید ارسال شود.
پس از بارگذاری کد، Serial Monitor را در IDE آردوینو باز کنید و منتظر ارسال پیامک توسط شیلد SIM900 باشید. اگر همه چیز به درستی تنظیم شده باشد، باید پیامک را به شماره تلفن مشخصشده دریافت کنید.
این روش برای ارسال پیامک از آردوینو به شماره تلفنهای مختلف با استفاده از شیلد SIM900 بسیار مفید است و میتوانید از آن در پروژههای مختلف خود استفاده کنید.
کد آردوینو دریافت اس ام اس با Sim900
در این بخش، هدف ما این است که آردوینو را به گونهای برنامهریزی کنیم که پیامهای متنی ورودی را بخواند. این قابلیت میتواند در مواقعی که میخواهید یک عمل خاص (مانند روشن کردن لامپ، راهاندازی فن یا فعالسازی سیستم آبیاری) را تنها با ارسال یک پیامک از تلفن خود انجام دهید، بسیار مفید باشد.
#include <SoftwareSerial.h> // ایجاد شیء سریال نرمافزاری برای ارتباط با SIM900 SoftwareSerial mySerial(7, 8); // Tx و Rx شیلد SIM900 به پینهای 7 و 8 آردوینو متصل هستند void setup() { // شروع ارتباط سریال با آردوینو و IDE آردوینو (برای مشاهده در Serial Monitor) Serial.begin(9600); // شروع ارتباط سریال با آردوینو و SIM900 mySerial.begin(9600); Serial.println("Initializing..."); delay(1000); mySerial.println("AT"); // دست دادن با SIM900 updateSerial(); mySerial.println("AT+CMGF=1"); // تنظیم حالت TEXT برای پیامک updateSerial(); mySerial.println("AT+CNMI=1,2,0,0,0"); // نحوه مدیریت پیامهای دریافتی جدید را مشخص میکند updateSerial(); } void loop() { updateSerial(); // فراخوانی تابع برای بروزرسانی دادهها } void updateSerial() { delay(500); while (Serial.available()) { mySerial.write(Serial.read()); // ارسال دادههایی که از سریال دریافت میشود به پورت سریال نرمافزاری } while (mySerial.available()) { Serial.write(mySerial.read()); // ارسال دادههایی که از پورت سریال نرمافزاری دریافت میشود به سریال } }
توضیح کد:
این کد شبیه به کد قبلی است، با این تفاوت که از دستورات AT برای خواندن پیامکهای دریافتی استفاده میکند:
AT+CMGF=1
: این دستور شیلد SIM900 را به حالت TEXT Mode برای دریافت پیامهای متنی تنظیم میکند. بهطور پیشفرض، شیلد از حالت PDU (Protocol Data Unit) استفاده میکند که پیچیدهتر است، بنابراین ما آن را به حالت متنی تغییر میدهیم تا راحتتر پیامها را پردازش کنیم.AT+CNMI=1,2,0,0,0
: این دستور نحوه پردازش پیامهای ورودی جدید را مشخص میکند. این دستور تعیین میکند که آیا پیامها مستقیماً به Serial Monitor ارسال شوند یا در حافظه شیلد ذخیره شوند. اگر پیامها ذخیره شوند، شیلد به رایانه اطلاع میدهد که پیامها در کجا ذخیره شدهاند.- تابع
updateSerial()
: این تابع بهطور مداوم دادههایی که در Serial Monitor وارد میشود را به پورت سریال نرمافزاری ارسال میکند و همچنین پاسخهایی که از شیلد SIM900 دریافت میشود را به Serial Monitor ارسال میکند تا شما بتوانید آنها را مشاهده کنید.
پس از بارگذاری کد، هنگامی که Serial Monitor را در Arduino IDE باز کنید و یک پیامک به شیلد SIM900 از تلفن خود ارسال کنید، پیام دریافتی باید بر روی صفحه نمایش داده شود.
خواندن پیامک از شیلد SIM900
پیام دریافتی از شیلد SIM900 به صورت زیر خواهد بود:
+CMT: "+ZZxxxxxxxxxx",,"21/07/22,15:45:10+32" Last Minute Engineers | lastminuteengineers.com
+CMT:
نشاندهنده شروع پیام است."+ZZxxxxxxxxxx"
شماره تلفن فرستنده است."21/07/22,15:45:10+32"
زمان دریافت پیام است."Last Minute Engineers | lastminuteengineers.com"
محتوای پیام است.
افزایش بافر SoftwareSerial برای دریافت پیامبلند
اگر متوجه شدید که پیامهای بلند قطع میشوند یا برخی از کاراکترها ناپدید میشوند، نگران نباشید. این یک مشکل در کد شما نیست. این مشکل به این دلیل است که بافر دریافت سریال نرمافزاری به اندازه کافی بزرگ نیست. بهطور پیشفرض، اندازه بافر برابر با 64 بایت است که به این معنی است که میتواند فقط مقدار محدودی از دادهها را ذخیره کند و باقی را رد میکند.
راهحل:
میتوانید اندازه بافر SoftwareSerial را به 256 بایت افزایش دهید. اگر از سیستم ویندوز استفاده میکنید، مراحل زیر را دنبال کنید:
- به مسیر C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SoftwareSerial\src بروید.
- فایل SoftwareSerial.h را در ویرایشگر متن باز کنید.
- خطی را که اندازه بافر را تعریف کرده پیدا کنید:
// RX buffer size
#define _SS_MAX_RX_BUFF 64
- مقدار
64
را به256
تغییر دهید:
// RX buffer size
#define _SS_MAX_RX_BUFF 256
- فایل را ذخیره کنید و کد را دوباره به آردوینو بارگذاری کنید.
حالا آردوینو شما باید قادر به دریافت و نمایش پیامهای طولانیتر بدون از دست دادن هیچیک از کاراکترها باشد.
با این تغییرات، شما اکنون میتوانید پیامهای متنی ورودی را بخوانید و در صورت نیاز به هر عملی که از طریق پیامک دریافت میکنید، واکنش نشان دهید.
کد آردوینو برقراری تماس تلفنی با Sim900
در این قسمت، هدف ما این است که آردوینو را برای برقراری تماس تلفنی برنامهریزی کنیم. این قابلیت در شرایط اضطراری که آردوینو نیاز به تماس خودکار با یک شماره برای کمک دارد، میتواند بسیار مفید باشد. به عنوان مثال، در سناریوهایی مانند تشخیص دمای بالا توسط آلارم آتشسوزی یا تشخیص ورود غیرمجاز توسط سیستم امنیتی، آردوینو میتواند تماس بگیرد تا فوراً کسی را مطلع کند.
قبل از اجرای کد، باید شماره تلفنی که آردوینو باید با آن تماس بگیرد را وارد کنید. در قسمت کد که شامل ZZxxxxxxxxxx
است، آن را با جزئیات صحیح جایگزین کنید:
- ZZ کد کشور (مثلاً 1 برای آمریکا، 98 برای ایران).
- xxxxxxxxxx شماره تلفن 10 رقمی است که میخواهید تماس بگیرید.
پس از بهروزرسانی شماره تلفن، کد را به آردوینو بارگذاری کنید.
#include <SoftwareSerial.h> // ایجاد شیء سریال نرمافزاری برای ارتباط با SIM900 SoftwareSerial mySerial(7, 8); // Tx و Rx شیلد SIM900 به پینهای 7 و 8 آردوینو متصل هستند void setup() { // شروع ارتباط سریال با آردوینو و IDE آردوینو (برای مشاهده در Serial Monitor) Serial.begin(9600); // شروع ارتباط سریال با آردوینو و SIM900 mySerial.begin(9600); Serial.println("Initializing..."); delay(1000); mySerial.println("AT"); // دست دادن با SIM900 updateSerial(); mySerial.println("ATD+ZZxxxxxxxxxx;"); // تغییر ZZ به کد کشور و xxxxxxxxxx به شماره تلفن برای تماس updateSerial(); delay(20000); // صبر کنید برای 20 ثانیه... mySerial.println("ATH"); // قطع تماس updateSerial(); } void loop() { } void updateSerial() { delay(500); while (Serial.available()) { mySerial.write(Serial.read()); // ارسال دادههایی که از سریال دریافت میشود به پورت سریال نرمافزاری } while (mySerial.available()) { Serial.write(mySerial.read()); // ارسال دادههایی که از پورت سریال نرمافزاری دریافت میشود به سریال } }
توضیح کد:
این کد بسیار شبیه به کدهای قبلی است، با این تفاوت که از دستورات AT برای برقراری تماس تلفنی استفاده میکند:
ATD+ZZxxxxxxxxxx;
: این دستور برای شمارهگیری یک شماره تلفن استفاده میشود. بسیار مهم است که در انتهای این دستور علامت;
را اضافه کنید، زیرا به شیلد SIM900 میگوید که تماس صوتی برقرار کند نه تماس دادهای. پس از ارسال این دستور، شیلد SIM900 شروع به شمارهگیری شماره مشخصشده میکند.ATH
: این دستور به شیلد SIM900 اطلاع میدهد که تماس را قطع کند و آن را پایان دهد.- تابع
updateSerial()
: این تابع بهطور مداوم دادههایی که از Serial Monitor وارد میشود را به پورت سریال نرمافزاری ارسال میکند و همچنین پاسخهایی که از شیلد SIM900 دریافت میشود را به Serial Monitor ارسال میکند تا شما بتوانید آنها را مشاهده کنید.
پس از بارگذاری کد، شیلد SIM900 بهطور خودکار با شماره مشخصشده تماس خواهد گرفت. اگر همه چیز به درستی تنظیم شده باشد، تلفن دریافتکننده باید شروع به زنگ زدن کند.
کد بعد از 20 ثانیه تماس را قطع خواهد کرد. اگر میخواهید تماس زودتر قطع شود، میتوانید مقدار تأخیر (delay) را کاهش دهید. اگر میخواهید تماس طولانیتر باشد، میتوانید زمان تأخیر را افزایش دهید.
از آنجا که تماس تنها یکبار هنگام راهاندازی آردوینو برقرار میشود، تابع loop()
خالی است. اگر بخواهید تماس دیگری برقرار کنید، کافی است دکمه RESET آردوینو را فشار دهید که برنامه دوباره اجرا شده و تماس جدید برقرار میشود.
این کد به شما این امکان را میدهد که از آردوینو برای برقراری تماس تلفنی خودکار استفاده کنید. این میتواند در شرایط اضطراری مفید باشد که آردوینو باید بهطور خودکار با یک شماره خاص تماس بگیرد و فردی را مطلع کند.
دریافت تماس با sim900 و آردوینو
برخلاف شمارهگیری یا ارسال پیامک، برای دریافت تماس ورودی با شیلد SIM900 نیازی به نوشتن کد خاصی نیست. آردوینو به سادگی به سیگنالهای ورودی گوش میدهد و زمانی که تماس دریافت شود، آن را در Serial Monitor نمایش میدهد.
این قابلیت در مواقعی مفید است که میخواهید آردوینو تماسها از شمارههای مشخص را شناسایی کند و بر اساس آن عملی مانند باز کردن در، روشن کردن چراغ یا فعالسازی هشدار امنیتی انجام دهد.
#include <SoftwareSerial.h> // ایجاد شیء سریال نرمافزاری برای ارتباط با SIM900 SoftwareSerial mySerial(7, 8); // Tx و Rx شیلد SIM900 به پینهای 7 و 8 آردوینو متصل هستند void setup() { // شروع ارتباط سریال با آردوینو و IDE آردوینو (برای مشاهده در Serial Monitor) Serial.begin(9600); // شروع ارتباط سریال با آردوینو و SIM900 mySerial.begin(9600); Serial.println("Initializing..."); } void loop() { updateSerial(); // بروزرسانی دادههای دریافتی } void updateSerial() { delay(500); while (Serial.available()) { mySerial.write(Serial.read()); // ارسال دادههای دریافتی از سریال به پورت سریال نرمافزاری } while (mySerial.available()) { Serial.write(mySerial.read()); // ارسال دادههای دریافتی از پورت سریال نرمافزاری به سریال } }
پس از بارگذاری کد و باز کردن Serial Monitor، هر زمان کسی با شماره سیمکارت شیلد تماس بگیرد، کلمه “RING” در Serial Monitor نمایش داده میشود، به همراه شماره تماس گیرنده و شناسه آن.
- دریافت تماس نیازی به ارسال دستور AT به شیلد ندارد، بنابراین کد بسیار ساده است.
- تابع loop() بهطور مداوم تابع
updateSerial()
را فراخوانی میکند، که دادههای دریافتی از شیلد SIM900 را بررسی میکند. زمانی که تماس ورودی میآید، شیلد بهصورت خودکار “RING” و شماره تماس گیرنده را چاپ میکند تا بتوانید به صورت لحظهای متوجه شوید چه کسی تماس میگیرد. - ATA – برای پاسخ دادن به تماس ورودی استفاده میشود.
- ATH – برای قطع فوری تماس استفاده میشود. پس از پایان تماس، پیام ‘NO CARRIER’ در Serial Monitor ظاهر میشود که نشاندهنده قطع تماس است.
با این روش، میتوانید تماسهای ورودی را شناسایی و در صورت نیاز به آنها واکنش نشان دهید.