ماژول GSM با SIM800L
کار با ماژول GSM سیمکام SIM800L؛ تغذیهٔ درست با جریان پیک، پینها و سطح ولتاژ منطقی، دستورهای AT برای ثبتشدهشدن در شبکه و ارسال پیامک با SoftwareSerial و عیبیابی رایجترین خطاها.
آنچه در این درس میآموزید
- تغذیهٔ درست SIM800L را با جریان پیک آن توضیح دهید و بدانید چرا تغذیه از آردوینو ممنوع است
- پینهای ماژول و رفتار LED وضعیت NETLIGHT را بشناسید
- با دستورهای AT وضعیت شبکه را بخوانید و پیامک بفرستید
- مشکلات بیپاسخی، ریستشدن هنگام ارسال و خطای سیمکارت را عیبیابی کنید
فهرست مطالب
تا اینجا ارتباط پروژههای شما با کابل USB یا برد کوتاه بلوتوث بود. ماژول SIM800L از شرکت SIMCom این مرز را برمیدارد: با یک سیمکارت معمولی از شبکهٔ موبایل GSM پیامک میفرستد، تماس میگیرد و با GPRS داده جابهجا میکند؛ بدون وایفای و بدون اینترنت خانگی. دزدگیر پیامکفرست و گزارش وضعیت از محل دور، کاربردهای کلاسیک آناند.
GSM و سیمکارت
GSM استاندارد نسل دوم موبایل (2G) است؛ همان شبکهای که تماس و پیامک کلاسیک روی آن کار میکند. SIM800L به یک سیمکارت فعال نیاز دارد؛ روی اکثر بردهای رایج سوکت micro-SIM است و سیمکارت را با فنر فلزی جا میزنید. آنتن هم اجباری است: بدون آنتنِ لحیمشده یا سوکتدار، ماژول در شبکه ثبت نمیشود. در ایران هر اپراتوری با پوشش 2G کار میکند؛ اگر سیمکارت پینکد دارد، اول پینکد را از داخل گوشی بردارید.
جدول پینها
| پین | نام | کارکرد |
|---|---|---|
| ۱–۲ | VCC | تغذیهٔ ۳٫۴ تا ۴٫۴ ولت؛ از باتری یا مبدل کاهنده |
| ۳–۴ | GND | زمین؛ مشترک با آردوینو |
| ۵ | TXD | خروجی سریال ماژول؛ به پین ورودی آردوینو میرود |
| ۶ | RXD | ورودی سریال ماژول؛ از پین خروجی آردوینو میآید |
| ۷ | RST | ریست ماژول؛ در کار مقدماتی رها میشود |
| ۸ | NETLIGHT | LED وضعیت شبکه |
رفتار NETLIGHT را حفظ کنید، چون ابزار عیبیابی بدون رایانهٔ شماست: چشمک تندِ منظم (روشنشدن کوتاه هر حدود ۰٫۸ ثانیه) یعنی جستوجوی شبکه؛ چشمک کند (هر حدود ۳ ثانیه) یعنی ماژول در شبکه ثبت شده و آمادهٔ کار است.
سطح ولتاژ منطقی
مدار داخلی SIM800L با حدود ۲٫۸ ولت کار میکند، در حالی که خروجی پینهای آردوینو ۵ ولت است؛ ورودی RXD ماژول برای تحمل ۵ ولت طراحی نشده است. راهحل پرکاربرد: روی مسیر TX آردوینو به RXD ماژول یک مقاومت سری بگذارید (رایج: ۱۰ کیلواهم) تا جریان ورودی محدود شود. جهت مقابل، یعنی TXD ماژول به RX آردوینو، مستقیم وصل میشود چون خروجی ماژول ولتاژ کمتری دارد و برای آردوینو قابلخواندن است.
گفتوگو با دستورهای AT
ماژول با دستورهای متنی AT کنترل میشود؛ همان سبکی که در درس Serial دیدید. برای گفتوگو با ماژول از SoftwareSerial روی دو پین دیجیتال استفاده میکنیم تا پینهای ۰ و ۱ برای آپلود آزاد بمانند. جدول دستورهای اصلی این درس:
| دستور | کار | پاسخ مورد انتظار |
|---|---|---|
AT |
تست خط | OK |
AT+CSQ |
کیفیت سیگنال | +CSQ: 20,0 و سپس OK؛ عدد اول بین ۰ تا ۳۱ است و ۹۹ یعنی ناشناخته |
AT+CREG? |
ثبت در شبکه | +CREG: 0,1 و سپس OK؛ عدد ۱ یعنی ثبتشده در شبکهٔ خانه |
AT+CMGF=1 |
حالت متنی پیامک | OK |
AT+CMGS="+989120000000" |
شروع پیامک؛ ماژول علامت > میدهد، متن را مینویسید و با Ctrl+Z (بایت 0x1A) میفرستید |
بعد از ارسال: +CMGS: 12 و سپس OK؛ عدد شمارهٔ پیامک است و فرق میکند |
ATD+989120000000; |
تماس صوتی | OK؛ قطع تماس با ATH |
نکتهٔ باودریت: ماژول بهصورت پیشفرض باودریت را خودکار تشخیص میدهد؛ اگر پاسخ نگرفتید، چند بار AT بفرستید. ۹۶۰۰ عدد رایج در اکثر بردهاست.
اسکچ ارسال پیامک
#include <SoftwareSerial.h>
const byte RX_PIN = 10; // Arduino receives on 10 (module TXD)
const byte TX_PIN = 11; // Arduino transmits on 11 (module RXI)
SoftwareSerial sim800l(RX_PIN, TX_PIN);
void setup() {
Serial.begin(9600);
sim800l.begin(9600);
delay(10000); // let the module register on the network
sim800l.println("AT+CMGF=1"); // SMS text mode
delay(1000);
sim800l.println("AT+CMGS=\"+989120000000\""); // recipient number
delay(1000);
sim800l.print("Hello from Arduino!"); // message body
sim800l.write(26); // Ctrl+Z (0x1A) sends the message
delay(5000);
while (sim800l.available()) { // show module responses
Serial.write(sim800l.read());
}
}
void loop() {}توضیح خطبهخط:
SoftwareSerial sim800l(10, 11)— پین ۱۰ ورودی (به TXD ماژول) و پین ۱۱ خروجی (به RXD ماژول با مقاومت سری) است.delay(10000)— ماژول بعد از روشنشدن چند ثانیهای در شبکه ثبت میشود؛ فرستادن پیامک قبل از آن بینتیجه است.AT+CMGF=1— پیامک را به حالت متنی میبرد تا بهجای بایتهای PDU متن ساده بنویسید.AT+CMGS="..."— شمارهٔ گیرنده در گیومه؛ ماژول در پاسخ علامت>چاپ میکند.sim800l.write(26)— کد ۲۶ همان Ctrl+Z است؛ پایان متن و فرمان ارسال.- حلقهٔ پایانی پاسخ ماژول را به Serial Monitor میبرد؛ ارسال موفق دو سطر
+CMGS: <شماره>وOKمیدهد.
رفتار قابل مشاهده: پس از حدود ده ثانیه روی گوشی گیرنده پیام Hello from Arduino! میرسد و در Serial Monitor هم پاسخهای ماژول دیده میشود.
خطاهای رایج و عیبیابی
| نشانه | علت رایج | راهحل |
|---|---|---|
ماژول به AT جواب نمیدهد |
تغذیهٔ ناکافی؛ رایجترین علت | حدود ۴ ولت با منبعِ ۲ آمپر بدهید؛ خازن کنار VCC؛ زمین مشترک را چک کنید |
| ریستشدن هنگام ارسال پیامک | افت ولتاژ در جریان پیک | منبع قویتر و سیمهای تغذیهٔ کوتاهتر |
| NETLIGHT تند میزند و کند نمیشود | ثبتنشدن در شبکه | آنتن، سیمکارت فعال بدون پینکد و پوشش 2G را ببینید |
پاسخ +CME ERROR: SIM not inserted |
سیمکارت جا نیفتاده یا جهتش غلط است | خاموش کنید و سیمکارت را کامل جا بزنید |
| حروف خراب در Serial Monitor | باود ناهمسان یا ناپایداری SoftwareSerial | باود ۹۶۰۰ را ثابت نگه دارید؛ در صورت لزوم AltSoftSerial |
| پیامک میرود ولی نمیرسد | قالب شماره اشتباه است | شماره را با کد کشور و فرم +98... بدهید |
تمرینها
تمرین
تمرین ۱ — خواندن کیفیت سیگنال
اسکچی بنویسید که ده ثانیه پس از روشنشدن، دستور AT+CSQ را بفرستد و پاسخ ماژول را در Serial Monitor چاپ کند. چه پاسخی انتظار دارید و عدد اول چه معنایی دارد؟
نمایش راهحل
ساختار اسکچ ارسال پیامک را سادهتر میکنیم:
#include <SoftwareSerial.h>
SoftwareSerial sim800l(10, 11); // RX, TX
void setup() {
Serial.begin(9600);
sim800l.begin(9600);
delay(10000); // wait for network registration
sim800l.println("AT+CSQ"); // signal quality
delay(1000);
while (sim800l.available()) {
Serial.write(sim800l.read());
}
}
void loop() {}در Serial Monitor سطرهای AT+CSQ، سپس +CSQ: 20,0 و بعد OK دیده میشوند. عدد اول (اینجا ۲۰) کیفیت سیگنال است: بین ۰ تا ۳۱، و مقادیر حدود ۱۰ تا ۲۵ برای کار معمول کافیاند؛ عدد ۹۹ یعنی سیگنال شناخته نشده و معمولاً یعنی مشکل آنتن یا ثبت در شبکه.
:::
خلاصه
- SIM800L ماژول GSM نسل دوم است؛ با سیمکارت فعال و آنتن، پیامک و تماس و GPRS میدهد.
- تغذیه باید ۳٫۴ تا ۴٫۴ ولت با تحمل پیک حدود ۲ آمپر باشد؛ پینهای آردوینو هرگز کافی نیستند.
- روی مسیر آردوینو به ماژول مقاومت سری بگذارید؛ منطق ماژول حدود ۲٫۸ ولت است.
- چشمک تند NETLIGHT یعنی جستوجوی شبکه و چشمک کند یعنی ثبتشده.
- پیامک با
AT+CMGF=1وAT+CMGSو پایاندادن با Ctrl+Z فرستاده میشود؛ پاسخ موفق+CMGS: nوOKاست.
با SIM800L پروژههای شما حرف میزنند؛ در درس بعدی با ESP32 به دنیای برد همهکارهٔ بیسیم میرویم.