Руководство по SIM900 GSM GPRS Shield с Arduino

Эта статья представляет собой полное руководство по SIM900 GSM GPRS Shield с Arduino. Узнайте, как отправлять и получать SMS, а также совершать и принимать телефонные звонки с помощью Arduino.

SIM900 GSM GPRS Shield с Arduino — руководство

В этом руководстве мы рассмотрим:

Знакомство с SIM900 GSM GPRS Shield

SIM900 GSM GPRS Shield показан на рисунке ниже.

SIM900 GSM GPRS Shield

GSM расшифровывается как Global System for Mobile Communications (Глобальная система мобильной связи) и является мировым стандартом мобильной связи.

GPRS расшифровывается как General Packet Radio Service (Служба пакетной радиопередачи данных). GPRS — это мобильная служба в сетях сотовой связи 2G и 3G.

Применения

GSM GPRS shield особенно полезен, так как позволяет:

  • Подключаться к Интернету через сеть GPRS

  • Отправлять и получать SMS

  • Совершать и принимать телефонные звонки

Его возможности делают его идеальным для проектов с Arduino, таких как:

  • Дистанционное управление электронными устройствами — отправка SMS для включения чего-либо;

  • Получение уведомлений — отправка SMS на ваш мобильный телефон при обнаружении движения в доме;

  • Получение данных с датчиков — периодическая отправка SMS на ваш мобильный телефон с данными о погоде за день.

Характеристики

Вот некоторые из наиболее важных характеристик модуля:

  • Совместим с Arduino и клонами

  • Основан на модуле SIM900 от SIMCOM

  • Позволяет отправлять SMS, MMS, GPRS и аудио через UART с помощью AT-команд

  • Имеет 12 GPIO, 2 ШИМ и встроенный АЦП модуля SIM900

  • Четырёхдиапазонный: 850; 900; 1800 и 1900 МГц, поэтому он должен работать во всех странах с сетями GSM (2G)

  • Управление через AT-команды

  • Поддержка RTC (часов реального времени) — на задней стороне есть держатель для батареи 3V CR1220

Держатель батареи RTC на SIM900 GSM Shield
  • Имеет разъёмы для микрофона и наушников для телефонных звонков

Разъёмы для микрофона и наушников на SIM900 GSM Shield

Где купить?

SIM900 GSM GPRS Shield — внешний вид

Вы можете посмотреть SIM900 GSM GPRS shield на Maker Advisor и найти лучшую цену.

Вы можете перейти по ссылкам выше или напрямую на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!

Предварительные шаги

Прежде чем начать работу с модулем SIM900 GSM GPRS, необходимо учесть некоторые аспекты, касающиеся SIM-карты и источника питания модуля.

Покрытие GSM

Убедитесь, что у вас есть покрытие сети GSM 850 МГц, GSM 900 МГц, DCS 1800 МГц или PCS 1900 МГц. Под GSM мы подразумеваем 2G.

Предоплаченная SIM-карта

Мы рекомендуем использовать предоплаченный тариф или тариф с безлимитными SMS для целей тестирования. В противном случае, если что-то пойдёт не так, вам, возможно, придётся оплатить огромный счёт за сотни SMS-сообщений, отправленных по ошибке. В этом руководстве мы используем предоплаченный тариф с безлимитными SMS.

SIM-карта для SIM900 GSM Shield

Модуль использует стандартный размер SIM-карты, не micro и не nano. Если у вас micro или nano, вы можете приобрести адаптер размера SIM-карты.

Отключение блокировки PIN-кодом

Для использования SIM-карты с модулем необходимо отключить блокировку PIN-кодом. Самый простой способ сделать это — вставить SIM-карту в ваш смартфон и отключить блокировку PIN-кодом в настройках безопасности телефона.

В моём случае нужно было пройти: Настройки > Дополнительные настройки > Безопасность > Блокировка SIM и отключить блокировку SIM-карты PIN-кодом.

Отключение блокировки PIN-кодом SIM-карты в настройках телефона

Выбор правильного источника питания

На модуле есть разъём питания DC, как показано на рисунке ниже.

Разъём питания DC на SIM900 GSM Shield

Рядом с разъёмом питания находится переключатель для выбора источника питания. Рядом с переключателем на плате есть стрелка, указывающая положение переключателя для использования внешнего источника питания — переведите переключатель в положение для использования внешнего источника питания, как показано выше.

Для питания модуля рекомендуется использовать блок питания 5V, способный обеспечить ток 2A, как показано ниже. Модуль также можно питать от 9V 1A или 12V 1A.

Блок питания 5V 2A для SIM900 GSM Shield

Вы можете найти подходящий блок питания для этого модуля здесь. Убедитесь, что вы выбрали модель с 5V и 2A.

Аппаратная часть SIM900 GSM GPRS Shield

На рисунке ниже показана задняя сторона модуля. На ней расположен держатель для SIM-карты и для батареи 3V CR1220 для RTC (часов реального времени).

Задняя сторона SIM900 GSM GPRS Shield — SIM-карта и батарея RTC

На рисунке ниже показаны наиболее важные компоненты модуля на плате, на которые следует обратить внимание.

Компоненты SIM900 GSM GPRS Shield с подписями

Начало работы

1) Вставьте SIM-карту в держатель SIM-карты — убедитесь, что вы прочитали предварительные шаги в предыдущем разделе.

Установка SIM-карты в SIM900 GSM Shield

2) Убедитесь, что антенна хорошо подключена.

3) На переключателе последовательного порта убедитесь, что перемычка установлена, как показано на рисунке ниже, для использования программного последовательного порта (Software Serial).

Установка перемычки для Software Serial на SIM900 GSM Shield

4) Подайте питание на модуль с помощью внешнего блока питания 5V. Убедитесь, что вы выбрали внешний источник питания переключателем рядом с разъёмом DC.

Выбор внешнего источника питания на SIM900 GSM Shield

5) Для включения/выключения модуля нажмите кнопку питания примерно на 2 секунды.

Кнопка питания SIM900 GSM Shield

6) Затем загорится светодиод Status, а светодиод NetLight будет мигать каждые 800 мс, пока не найдёт сеть. Когда сеть будет найдена, светодиод NetLight начнёт мигать каждые три секунды.

Примечание: вы можете автоматически включить модуль программно. Как это сделать, описано в разделе Автоматическое включение модуля после примеров кода.

7) Вы можете проверить, правильно ли работает модуль, отправляя AT-команды из Arduino IDE с помощью программатора FTDI — как мы покажем далее в этом руководстве.

AT-команды SIM900

  • Установить SIM900 в текстовый режим: AT+CMGF=1\r

  • Отправить SMS на номер: AT+CMGS=НОМЕР_ТЕЛЕФОНА (в международном формате)

  • Прочитать первое SMS из входящих: AT+CMGR=1\r

  • Прочитать второе SMS из входящих: AT+CMGR=2\r

  • Прочитать все SMS из входящих: AT+CMGR=ALL\r

  • Позвонить на номер: ATDP+ НОМЕР_ТЕЛЕФОНА (в международном формате)

  • Повесить трубку: ATH

  • Принять входящий звонок: ATA

Для получения дополнительной информации вы можете ознакомиться с руководством по AT-командам SIM900 здесь.

Тестирование модуля с помощью программатора FTDI

Чтобы проверить, всё ли работает правильно, вы можете протестировать модуль, отправляя AT-команды из монитора последовательного порта Arduino IDE. Для этого вам понадобится программатор FTDI, как показано на рисунке ниже. Вы можете приобрести такой программатор FTDI здесь.

Программатор FTDI

1) Подключите программатор FTDI к GSM-модулю, как показано на схеме ниже.

Схема подключения FTDI к SIM900 GSM Shield

2) Откройте Arduino IDE и выберите правильный COM-порт.

3) Откройте монитор последовательного порта.

Кнопка открытия монитора последовательного порта в Arduino IDE

4) Выберите скорость 19200 бод — настройка модуля по умолчанию — 19200 — и Carriage return. Введите AT в поле, выделенное красным, и нажмите Enter. См. рисунок ниже.

Настройка скорости бод и отправка AT-команды в мониторе Arduino IDE

5) Модуль ответит OK, если всё работает правильно.

Ответ OK от SIM900 в мониторе Arduino IDE

Подключение модуля к Arduino

Подключите модуль к Arduino, как показано на схеме ниже.

Схема подключения SIM900 GSM Shield к Arduino

Отправка SMS

Для отправки SMS загрузите приведённый ниже код в плату Arduino.

/*********
  Полная информация о проекте на https://randomnerdtutorials.com
*********/

#include <SoftwareSerial.h>

// Настройка программного последовательного порта
SoftwareSerial SIM900(7, 8);

void setup() {
  // Arduino обменивается данными с SIM900 GSM Shield на скорости 19200 бод
  // Убедитесь, что это соответствует скорости бод вашего модуля
  SIM900.begin(19200);
  // Дайте время вашему GSM-модулю подключиться к сети
  delay(20000);

  // Отправить SMS
  sendSMS();
}

void loop() {

}

void sendSMS() {
  // AT-команда для установки SIM900 в режим SMS
  SIM900.print("AT+CMGF=1\r");
  delay(100);

  // ЗАМЕНИТЕ X НА НОМЕР МОБИЛЬНОГО ТЕЛЕФОНА ПОЛУЧАТЕЛЯ
  // ИСПОЛЬЗУЙТЕ МЕЖДУНАРОДНЫЙ ФОРМАТ НОМЕРА
  SIM900.println("AT+CMGS=\"+XXXXXXXXXXXX\"");
  delay(100);

  // ЗАМЕНИТЕ ТЕКСТ НА СВОЁ СОДЕРЖАНИЕ SMS
  SIM900.println("Message example from Arduino Uno.");
  delay(100);

  // Завершить AT-команду символом ^Z, ASCII-код 26
  SIM900.println((char)26);
  delay(100);
  SIM900.println();
  // Дайте модулю время на отправку SMS
  delay(5000);
}

Просмотр исходного кода

В этом коде вы начинаете с подключения библиотеки SoftwareSerial.h и создания программного последовательного порта на пинах 7 и 8. (Пин 7 устанавливается как RX, а 8 как TX)

#include <SoftwareSerial.h>
SoftwareSerial SIM900(7, 8);

Созданная функция sendSMS() — это то, что фактически отправляет SMS. Эта функция использует AT-команды: AT+CMGF=1\r и AT+CMGS.

Вам нужно изменить номер мобильного телефона получателя в строке: (замените X на номер телефона получателя)

SIM900.println("AT + CMGS = \"++++++++++++++"");

Номер мобильного телефона получателя должен быть в международном формате.

Затем в следующей строке вы можете отредактировать текст, который хотите отправить.

// ЗАМЕНИТЕ ТЕКСТ НА СВОЁ СОДЕРЖАНИЕ SMS
SIM900.println("Message example from Arduino Uno.")

Чтение полученных SMS

Для чтения входящих SMS загрузите приведённый ниже код в Arduino. После загрузки подождите 20 секунд, чтобы модуль установил связь. Затем протестируйте скрипт, отправив SMS на номер SIM-карты модуля. SMS отобразится в мониторе последовательного порта Arduino — скорость: 19200 бод.

/*********
  Полная информация о проекте на https://randomnerdtutorials.com
*********/

#include <SoftwareSerial.h>

// Настройка программного последовательного порта
SoftwareSerial SIM900(7, 8);
// Переменная для сохранения входящих символов SMS
char incoming_char=0;

void setup() {
  // Arduino обменивается данными с SIM900 GSM Shield на скорости 19200 бод
  // Убедитесь, что это соответствует скорости бод вашего модуля
  SIM900.begin(19200);
  // Для монитора последовательного порта
  Serial.begin(19200);
  // Дайте время вашему GSM-модулю подключиться к сети
  delay(20000);

  // AT-команда для установки SIM900 в режим SMS
  SIM900.print("AT+CMGF=1\r");
  delay(100);
  // Настроить модуль на отправку данных SMS на последовательный выход при получении
  SIM900.print("AT+CNMI=2,2,0,0,0\r");
  delay(100);
}

void loop() {
  // Отображать любой текст, который GSM-модуль отправляет на монитор последовательного порта
  if(SIM900.available() >0) {
    // Получить символ из последовательного порта сотового модуля
    incoming_char=SIM900.read();
    // Напечатать входящий символ в терминал
    Serial.print(incoming_char);
  }
}

Просмотр исходного кода

В этом коде вы настраиваете модуль на отправку данных SMS на последовательный выход:

SIM900.print("AT+CNMI=2,2,0,0,0\r");

Вы сохраняете входящие символы из SMS-сообщения в переменную incoming_char. Чтение символов выполняется с помощью функции SIM900.read().

Совершение телефонного звонка

Для совершения телефонного звонка загрузите следующий код в Arduino.

Не забудьте заменить в коде номер телефона, на который вы хотите позвонить.

/*********
  Полная информация о проекте на https://randomnerdtutorials.com
*********/

#include <SoftwareSerial.h>

// Настройка программного последовательного порта
SoftwareSerial SIM900(7, 8);

void setup() {
  // Arduino обменивается данными с SIM900 GSM Shield на скорости 19200 бод
  // Убедитесь, что это соответствует скорости бод вашего модуля
  SIM900.begin(19200);
  // Дайте время вашему GSM-модулю подключиться к сети
  delay(20000);

  // Совершить звонок
  callSomeone();
}

void loop() {

}

void callSomeone() {
  // ЗАМЕНИТЕ X НА НОМЕР, КОТОРЫЙ ВЫ ХОТИТЕ НАБРАТЬ
  // ИСПОЛЬЗУЙТЕ МЕЖДУНАРОДНЫЙ ФОРМАТ ДЛЯ МОБИЛЬНЫХ НОМЕРОВ
  SIM900.println("ATD + +XXXXXXXXX;");
  delay(100);
  SIM900.println();

 // В этом примере звонок длится всего 30 секунд
 // Вы можете изменить длительность звонка, изменив время задержки
  delay(30000);
  // AT-команда для завершения звонка
  SIM900.println("ATH"); // повесить трубку
}

Просмотр исходного кода

Для совершения звонка используется функция callSomeone(), которая использует команду ATD.

SIM900.println("ATD + +XXXXXXXXX;");

Вам нужно заменить X (выделенные красным) на номер телефона, на который вы хотите позвонить.

Не забудьте подключить микрофон и наушники для совершения звонка.

В этом примере кода звонок завершается через 30 секунд с помощью команды ATH:

SIM900.println("ATH");

Завершение звонка через 30 секунд не очень практично, но хорошо работает для примера. Идея заключается в том, чтобы использовать команду ATH при срабатывании какого-либо события. Например, подключите кнопку к Arduino, которая при нажатии отправляет команду ATH для завершения звонка.

Приём входящих телефонных звонков

Следующий код отвечает на входящие звонки.

/*********
  Полная информация о проекте на https://randomnerdtutorials.com
*********/

#include <SoftwareSerial.h>

// Настройка программного последовательного порта
SoftwareSerial SIM900(7, 8);
char incoming_char=0;

void setup() {
  // Arduino обменивается данными с SIM900 GSM Shield на скорости 19200 бод
  // Убедитесь, что это соответствует скорости бод вашего модуля
  SIM900.begin(19200); // для GSM-модуля
  // Для монитора последовательного порта
  Serial.begin(19200);
  // Дайте время для подключения к сети.
  delay(20000);

  SIM900.print("AT+CLIP=1\r"); // включить уведомление о номере вызывающего абонента
  delay(100);
}

void loop() {
  // Отображать любой текст, который GSM-модуль отправляет на монитор последовательного порта
  if(SIM900.available() >0) {
    // Получить символ из последовательного порта сотового модуля
    // При входящем звонке отправляется сообщение "RING"
    incoming_char=SIM900.read();
    // Проверить, отправляет ли модуль сообщение "RING"
    if (incoming_char=='R') {
      delay(10);
      Serial.print(incoming_char);
      incoming_char=SIM900.read();
      if (incoming_char =='I') {
        delay(10);
        Serial.print(incoming_char);
        incoming_char=SIM900.read();
        if (incoming_char=='N') {
          delay(10);
          Serial.print(incoming_char);
          incoming_char=SIM900.read();
          if (incoming_char=='G') {
            delay(10);
            Serial.print(incoming_char);
            // Если получено сообщение RING от модуля
            // Отправить команду ATA для ответа на звонок
            SIM900.print("ATA\r");
          }
        }
      }
    }
  }
}

Просмотр исходного кода

Когда кто-то звонит на номер SIM900, модуль отправляет сообщение «RING». Чтобы узнать, звонит ли кто-то, вы можете ждать входящие символы от SIM900 и затем проверить, было ли это сообщение RING. Именно это и делает данный код. Когда он получает сообщение RING, отправляется команда ATA для ответа на звонок.

Автоматическое включение модуля

Вместо ручного нажатия кнопки «power» для включения модуля, вы можете автоматически включить модуль программно.

1) Сначала вам нужно припаять соединение R13 на модуле, как показано на рисунке ниже — выделено красным.

Пайка соединения R13 на SIM900 GSM Shield для автоматического включения

2) Подключите D9 на модуле к пину D9 Arduino, как показано на схеме ниже.

Схема подключения SIM900 GSM Shield к Arduino с автоматическим включением

3) Добавьте следующий фрагмент кода в функцию setup(). Это эквивалент нажатия кнопки «power» на модуле.

digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(5000);

Устранение неполадок

Модуль не отвечает OK

Проверьте соединения TX и RX с Arduino. Попробуйте повторить процесс, поменяв пины TX и RX местами.

Также проверьте, выбрали ли вы программный последовательный порт (Software Serial), установив перемычку в соответствующее положение на переключателе последовательного порта.

Установка перемычки для Software Serial на SIM900 GSM Shield

Не видно сообщений в мониторе последовательного порта

Чтобы видеть сообщения в мониторе последовательного порта, скорость бод модуля и последовательного порта Arduino должна быть одинаковой. Скорость бод по умолчанию для SIM900 GSM GPRS Shield — 19200. Поэтому установите скорость бод Arduino на 19200.

Однако, если вам нужно изменить скорость бод модуля, вы можете отправить следующую AT-команду для изменения на 19200 или другую подходящую скорость бод.

AT+IPR=19200

Заключение

В этом руководстве показано, как отправлять и получать SMS, а также совершать и принимать телефонные звонки с помощью Arduino. Вы можете применить изученные в этом руководстве концепции для создания собственных проектов для связи через сотовую сеть. У нас есть другие проекты, использующие GSM, ознакомьтесь с ними ниже:

Если вам нравятся проекты на Arduino, обязательно ознакомьтесь с нашим последним курсом: Arduino Step-by-step Projects — Build 25 Projects

Мы надеемся, что это руководство было для вас полезным.

Спасибо за чтение.