منو

ماژول SIM800

معرفی ماژول SIM800

ماژول SIM800 یک ماژول ارتباطی GSM/GPRS کم‌مصرف است که برای انتقال داده‌ها، ارسال و دریافت پیامک، و برقراری تماس صوتی طراحی شده است. این ماژول از پروتکل‌های استاندارد 2G پشتیبانی می‌کند و ابعاد کوچکی دارد که آن را برای پروژه‌های اینترنت اشیا (IoT) و سیستم‌های تعبیه‌شده مناسب می‌سازد.

SIM800

مشخصات فنی و ولتاژی ماژول 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

  1. سیستم‌های امنیتی: ارسال پیامک هشدار و تماس صوتی در مواقع اضطراری.
  2. پروژه‌های IoT: اتصال دستگاه‌ها به اینترنت برای انتقال داده.
  3. ردیاب‌های GPS: ارسال مختصات جغرافیایی از طریق پیامک یا اینترنت.
  4. اتوماسیون صنعتی: کنترل و نظارت بر دستگاه‌ها از راه دور.
  5. سیستم‌های پرداخت: اتصال به شبکه‌های بانکی برای انجام تراکنش.
  6. کنترل پیامکی: استفاده در سیستم‌های کنترل از راه دور برای مدیریت تجهیزات، روشن و خاموش کردن دستگاه‌ها، و دریافت وضعیت از طریق پیامک.

لیست دستورات پرکاربرد AT

  • بررسی ارتباط با ماژول:
    • AT
    • پاسخ: OK
  • بررسی وضعیت شبکه:
    • AT+CREG?
    • پاسخ: +CREG: 0,1 (متصل به شبکه)
  • تنظیم حالت پیامک:
    • AT+CMGF=1 (حالت متنی)
  • ارسال پیامک:
    • AT+CMGS=”شماره موبایل” متن پیامک Ctrl+Z
  • خواندن پیامک‌ها:
    • AT+CMGR=1
  • برقراری تماس:
    • ATDشماره موبایل;
  • قطع تماس:
    • ATH

مثال ارسال و دریافت پیامک برای AVR

ارسال پیامک:

#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);
}

دریافت پیامک:

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

ارسال پیامک:

#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);
}

دریافت پیامک

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 ساده‌ترین روش ارسال پیامک است که به تنظیمات خاصی نیاز ندارد. در این حالت متن پیامک به‌صورت مستقیم ارسال می‌شود.

  1. تنظیم ماژول برای حالت Text:
  2. AT+CMGF=1
  3. پاسخ: OK
  4. ارسال پیامک:
  5. AT+CMGS=”شماره موبایل” متن پیامک Ctrl+Z

ارسال پیامک در حالت UCS2:

حالت UCS2 برای ارسال پیام‌های حاوی کاراکترهای یونیکد (مانند فارسی) استفاده می‌شود. در این حالت متن پیامک باید به فرمت UCS2 (هگزادسیمال) تبدیل شود.

  1. تنظیم ماژول برای حالت UCS2:
  2. AT+CMGF=1 AT+CSCS=”UCS2″
  3. پاسخ: OK
  4. تبدیل متن پیامک به UCS2: متن “سلام” در فرمت UCS2 برابر است با
  5. 06330644062A0627
  6. ارسال پیامک در حالت UCS2:
  7. AT+CMGS=”شماره موبایل به فرمت UCS2″ 06330644062A0627 Ctrl+Z

تبدیل به یونیکد

برای تبدیل متن به یونیکد میتوانید از این سایت استفاده کنید:

مثال کدنویسی برای ارسال پیامک در حالت UCS2 (STM32):

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 ایده‌آل هستند.

  1. LM2596
    • ولتاژ ورودی: 4.5 تا 40 ولت
    • جریان خروجی: تا 3 آمپر
    • مزایا: در دسترس بودن بالا و قیمت مناسب.
    • نکته: به دلیل فرکانس کاری پایین (150 کیلوهرتز)، ممکن است نیاز به فیلتر خروجی برای کاهش نویز باشد.
  2. MP1584
    • ولتاژ ورودی: 4.5 تا 28 ولت
    • جریان خروجی: تا 3 آمپر
    • مزایا: کوچک و کم‌مصرف.
    • نکته: مناسب برای طراحی‌های با فضای محدود.
  3. XL4015
    • ولتاژ ورودی: 4 تا 38 ولت
    • جریان خروجی: تا 5 آمپر
    • مزایا: بازده بالا و توانایی تامین جریان بیشتر.
    • نکته: مناسب برای ماژول‌هایی با نیاز به جریان بالاتر.
  4. TPS54331
    • ولتاژ ورودی: 4.5 تا 28 ولت
    • جریان خروجی: تا 3 آمپر
    • مزایا: بازده بالا، عملکرد پایدار.
    • نکته: کیفیت بالاتر نسبت به مدل‌های معمولی.

اگر ورودی شما 12 یا 24 ولت است و نیاز به کارکرد پایدار و جریان بالا دارید:

  • XL4015 یا LM2596 گزینه‌های مناسبی هستند.

اگر ورودی شما 5 ولت یا کمتر است و طراحی کوچک نیاز دارید:

  • MP1584 مناسب است.
lm2596

دیدگاهتان را بنویسید