ماژول SIM800
معرفی ماژول SIM800
ماژول SIM800 یک ماژول ارتباطی GSM/GPRS کممصرف است که برای انتقال دادهها، ارسال و دریافت پیامک، و برقراری تماس صوتی طراحی شده است. این ماژول از پروتکلهای استاندارد 2G پشتیبانی میکند و ابعاد کوچکی دارد که آن را برای پروژههای اینترنت اشیا (IoT) و سیستمهای تعبیهشده مناسب میسازد.
مشخصات فنی و ولتاژی ماژول SIM800:
- ولتاژ کاری: 3.4 ولت تا 4.4 ولت (ولتاژ بهینه 4.0 ولت)
- مصرف توان:
- حالت آماده به کار: حدود 1 میلیآمپر
- حالت ارسال داده: حداکثر 2 آمپر (لحظهای)
- باندهای فرکانسی:
- GSM 850/900/1800/1900 MHz
- پروتکلها:
- GPRS کلاس 12
- TCP/IP، HTTP، FTP
- رابطها:
- UART (پورت سریال)
- GPIO
- ADC
- PWM
کاربردهای ماژول SIM800
- سیستمهای امنیتی: ارسال پیامک هشدار و تماس صوتی در مواقع اضطراری.
- پروژههای IoT: اتصال دستگاهها به اینترنت برای انتقال داده.
- ردیابهای GPS: ارسال مختصات جغرافیایی از طریق پیامک یا اینترنت.
- اتوماسیون صنعتی: کنترل و نظارت بر دستگاهها از راه دور.
- سیستمهای پرداخت: اتصال به شبکههای بانکی برای انجام تراکنش.
- کنترل پیامکی: استفاده در سیستمهای کنترل از راه دور برای مدیریت تجهیزات، روشن و خاموش کردن دستگاهها، و دریافت وضعیت از طریق پیامک.
لیست دستورات پرکاربرد AT
- بررسی ارتباط با ماژول:
- AT
- پاسخ:
OK
- بررسی وضعیت شبکه:
- AT+CREG?
- پاسخ:
+CREG: 0,1
(متصل به شبکه)
- تنظیم حالت پیامک:
- AT+CMGF=1 (حالت متنی)
- ارسال پیامک:
- AT+CMGS="شماره موبایل" متن پیامک Ctrl+Z
- خواندن پیامکها:
- AT+CMGR=1
- برقراری تماس:
- ATDشماره موبایل;
- قطع تماس:
- ATH
مثال ارسال و دریافت پیامک برای AVR
ارسال پیامک:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include <avr/io.h> #include <util/delay.h> #include "usart.h" void SIM800_SendSMS(const char *phoneNumber, const char *message) { USART_SendString("AT+CMGF=1\r"); _delay_ms(1000); USART_SendString("AT+CMGS=\""); USART_SendString(phoneNumber); USART_SendString("\"\r"); _delay_ms(1000); USART_SendString(message); USART_Transmit(0x1A); // ارسال Ctrl+Z _delay_ms(3000); } int main() { USART_Init(9600); _delay_ms(1000); SIM800_SendSMS("09121234567", "سلام! این یک پیامک تستی است."); while (1); } |
دریافت پیامک:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | ISR(USART_RX_vect) { static char buffer[160]; static uint8_t index = 0; char receivedChar = UDR0; // خواندن داده از UART if (receivedChar == '\n') { buffer[index] = '\0'; // پایان رشته index = 0; ProcessSMS(buffer); // فراخوانی تابع پردازش پیامک } else { if (index < sizeof(buffer) - 1) { buffer[index++] = receivedChar; } } } void ProcessSMS(const char *message) { // پردازش پیامک دریافتی } |
مثال ارسال و دریافت پیامک برای STM32F103C8T6
ارسال پیامک:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include "stm32f1xx_hal.h" #include <string.h> extern UART_HandleTypeDef huart1; // استفاده از UART1 void SIM800_SendSMS(const char *phoneNumber, const char *message) { char cmd[50]; // تنظیم حالت متنی HAL_UART_Transmit(&huart1, (uint8_t *)"AT+CMGF=1\r", strlen("AT+CMGF=1\r"), HAL_MAX_DELAY); HAL_Delay(1000); // ارسال دستور ارسال پیامک snprintf(cmd, sizeof(cmd), "AT+CMGS=\"%s\"\r", phoneNumber); HAL_UART_Transmit(&huart1, (uint8_t *)cmd, strlen(cmd), HAL_MAX_DELAY); HAL_Delay(1000); // ارسال متن پیامک HAL_UART_Transmit(&huart1, (uint8_t *)message, strlen(message), HAL_MAX_DELAY); // ارسال Ctrl+Z uint8_t ctrl_z = 0x1A; HAL_UART_Transmit(&huart1, &ctrl_z, 1, HAL_MAX_DELAY); HAL_Delay(3000); } int main(void) { HAL_Init(); SystemClock_Config(); MX_USART1_UART_Init(); SIM800_SendSMS("09121234567", "سلام! این یک پیامک تستی است."); while (1); } |
دریافت پیامک
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { static char buffer[160]; static uint8_t index = 0; char receivedChar; if (huart->Instance == USART1) { receivedChar = buffer[index]; if (receivedChar == '\n') { buffer[index] = '\0'; // پایان رشته index = 0; ProcessSMS(buffer); // فراخوانی تابع پردازش پیامک } else { if (index < sizeof(buffer) - 1) { buffer[index++] = receivedChar; } } HAL_UART_Receive_IT(&huart1, (uint8_t *)&buffer[index], 1); } } void ProcessSMS(const char *message) { // پردازش پیامک دریافتی } |
ارسال پیامک در حالت Text و UCS2
ارسال پیامک در حالت Text:
حالت Text سادهترین روش ارسال پیامک است که به تنظیمات خاصی نیاز ندارد. در این حالت متن پیامک بهصورت مستقیم ارسال میشود.
- تنظیم ماژول برای حالت Text:
- AT+CMGF=1
- پاسخ:
OK
- ارسال پیامک:
- AT+CMGS="شماره موبایل" متن پیامک Ctrl+Z
ارسال پیامک در حالت UCS2:
حالت UCS2 برای ارسال پیامهای حاوی کاراکترهای یونیکد (مانند فارسی) استفاده میشود. در این حالت متن پیامک باید به فرمت UCS2 (هگزادسیمال) تبدیل شود.
- تنظیم ماژول برای حالت UCS2:
- AT+CMGF=1 AT+CSCS="UCS2"
- پاسخ:
OK
- تبدیل متن پیامک به UCS2: متن “سلام” در فرمت UCS2 برابر است با
- 06330644062A0627
- ارسال پیامک در حالت UCS2:
- AT+CMGS="شماره موبایل به فرمت UCS2" 06330644062A0627 Ctrl+Z
تبدیل به یونیکد
برای تبدیل متن به یونیکد میتوانید از این سایت استفاده کنید:
مثال کدنویسی برای ارسال پیامک در حالت UCS2 (STM32):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | void SIM800_SendUCS2SMS(const char *phoneNumberUCS2, const char *messageUCS2) { char cmd[100]; // تنظیم حالت UCS2 HAL_UART_Transmit(&huart1, (uint8_t *)"AT+CMGF=1\r", strlen("AT+CMGF=1\r"), HAL_MAX_DELAY); HAL_Delay(1000); HAL_UART_Transmit(&huart1, (uint8_t *)"AT+CSCS=\"UCS2\"\r", strlen("AT+CSCS=\"UCS2\"\r"), HAL_MAX_DELAY); HAL_Delay(1000); // ارسال دستور ارسال پیامک snprintf(cmd, sizeof(cmd), "AT+CMGS=\"%s\"\r", phoneNumberUCS2); HAL_UART_Transmit(&huart1, (uint8_t *)cmd, strlen(cmd), HAL_MAX_DELAY); HAL_Delay(1000); // ارسال متن پیامک UCS2 HAL_UART_Transmit(&huart1, (uint8_t *)messageUCS2, strlen(messageUCS2), HAL_MAX_DELAY); // ارسال Ctrl+Z uint8_t ctrl_z = 0x1A; HAL_UART_Transmit(&huart1, &ctrl_z, 1, HAL_MAX_DELAY); HAL_Delay(3000); } |
رگولاتور مناسب ماژول GSM
قطعا یک تغذیه پایدار و بدون نویز برای عملکرد درست هر مدار الکترونیکی حیاتی هست. از این رو انتخاب یک رگولاتور مناسب که توانایی تامین ولتاژ و جریان برای ماژول های GSM مثل SIM800 یا ماژول های کوییک تل را داشته باشد بسیار مهم است. برای ماژول SIM800، که نیاز به ولتاژ 3.4 تا 4.4 ولت دارد و معمولاً در ولتاژ 4 ولت کار میکند با حداکثر جریان لحظهای حدود 2 آمپر، چند رگولاتور مناسب پیشنهاد میشود:
رگولاتورهای سوئیچینگ (Step-Down) مناسب:
رگولاتورهای سوئیچینگ به دلیل بازده بالا و توانایی تامین جریان مورد نیاز، برای SIM800 ایدهآل هستند.
- LM2596
- ولتاژ ورودی: 4.5 تا 40 ولت
- جریان خروجی: تا 3 آمپر
- مزایا: در دسترس بودن بالا و قیمت مناسب.
- نکته: به دلیل فرکانس کاری پایین (150 کیلوهرتز)، ممکن است نیاز به فیلتر خروجی برای کاهش نویز باشد.
- MP1584
- ولتاژ ورودی: 4.5 تا 28 ولت
- جریان خروجی: تا 3 آمپر
- مزایا: کوچک و کممصرف.
- نکته: مناسب برای طراحیهای با فضای محدود.
- XL4015
- ولتاژ ورودی: 4 تا 38 ولت
- جریان خروجی: تا 5 آمپر
- مزایا: بازده بالا و توانایی تامین جریان بیشتر.
- نکته: مناسب برای ماژولهایی با نیاز به جریان بالاتر.
- TPS54331
- ولتاژ ورودی: 4.5 تا 28 ولت
- جریان خروجی: تا 3 آمپر
- مزایا: بازده بالا، عملکرد پایدار.
- نکته: کیفیت بالاتر نسبت به مدلهای معمولی.
اگر ورودی شما 12 یا 24 ولت است و نیاز به کارکرد پایدار و جریان بالا دارید:
- XL4015 یا LM2596 گزینههای مناسبی هستند.
اگر ورودی شما 5 ولت یا کمتر است و طراحی کوچک نیاز دارید:
- MP1584 مناسب است.