Плата GSM модуля на стороне компонентов содержит соединители для подключения антенны, наушников и микрофона. На обратной стороне платы размещены держатель батареи CR1220 (3V), поддерживающий работу часов модуля, и отсек для установки SIM-карты. Кроме функции связи, GSM/GPRS модуль имеет 12 GPIOs, 2 ШИМ и АЦП.
Нет связи с Arduino по последовательному порту?
- Проверьте питание платы
- Проверьте правильность установки перемычек
Не отправляются SMS-сообщения?
- Проверьте наличие внешнего питания шилда
- Проверьте баланс SIM-карты
Требуется зарегистрировать устройство?
- Обратитесь для консультации в колл-центр Вашего оператора
Обзор аппаратного обеспечения
Плата расширения SIM900 GSM/GPRS Shield – это GSM-модем, который может быть интегрирован в большое количество проектов интернета вещей (IoT). Вы можете использовать эту плату расширения, чтобы выполнять почти все, что может обычный сотовый телефон; текстовые SMS сообщения, совершать или принимать телефонные звонки, выполнять подключение к интернету через GPRS, TCP/IP, и многое другое! В довершение всего, плата расширения поддерживает четырехдиапазонную сеть GSM/GPRS, что означает, что она работает практически в любой точке мира.
Плата расширения SIM900 GSM/GPRS Shield разработана для того, чтобы снабдить чип SIM900 всем необходимым для взаимодействия с Arduino, а также несколькими дополнительными вкусностями, чтобы воспользоваться уникальными функциями чипа.
Светодиодные индикаторы состояния
На плате расширения SIM900 GSM/GPRS Shield есть три светодиода, которые указывают на состояние подключения или питания. Наблюдая за этими светодиодами, вы можете получить визуальную информацию о том, что происходит с платой расширения.
PWR: этот светодиод подключен к линии питания платы расширения. Если этот светодиод включен, плата расширения получает питание.
Status: этот индикатор показывает рабочее состояние SIM900. Если этот светодиод включен, микросхема находится в рабочем режиме.
Netlight: этот индикатор показывает состояние подключения к сотовой сети. Он будет мигать с разной скоростью, чтобы показать, в каком оно состоянии.
- выкл.: чип SIM900 не работает;
- вкл. 64 мс, выкл. 800 мс: чип SIM900 работает, но еще не зарегистрирован в сотовой сети;
- вкл. 64 мс, выкл. 3 с: чип SIM900 зарегистрирован в сотовой сети и может отправлять/получать SMS сообщения и звонки;
- вкл. 64 мс, выкл. 300 мс: соединение для передачи данных через GPRS, которое вы запросили, активно.
Питание
Одной из наиболее важных частей работы платы расширения SIM900 GSM/GPRS Shield является обеспечение её достаточным питанием. В зависимости от того, в каком состоянии он находится, SIM900 может быть относительно энергоемким устройством. Максимальный ток потребления чипа составляет около 2 А во время передачи.
Вы можете подключить к плате расширения внешний источник питания с помощью разъема 5,5 мм, к которому можно подключить любой адаптер постоянного напряжения 5–9 В. Рядом с разъемом питания находится ползунковый переключатель для выбора источника питания с надписью EXTERN. Чтобы использовать внешний источник питания, переместите ползунок, как показано ниже. Источник питания должен обеспечивать минимальный пиковый ток 2 А.
Связь через UART
Плата расширения SIM900 GSM/GPRS Shield для связи с Arduino использует интерфейс UART. Чип поддерживает скорость передачи от 1200 бит/с до 115200 бит/с с автоматическим определением скорости.
С помощью перемычек вы можете подключить (RX, TX) платы расширения к программному последовательному порту (D8, D7) или аппаратному последовательному порту (D1, D0) Arduino.
Динамик и микрофон
Плата расширения поставляется с двумя стандартными разъемами 3,5 мм. Один для стереонаушников, и другой для монофонического микрофона. Плата позволяет использовать аудиоинтерфейс SIM900 для совершения и приема голосовых вызовов и прослушивания FM радио.
Mic: к этому разъему можно подключить внешний электретный микрофон.
Earphone: к этому разъему можно подключить наушники. Все наушники, совместимые с “iPhone” или “Android” телефонами, должны работать.
Антенна
Антенна необходима для использования SIM900 для любого типа передачи голоса или данных, а также для некоторых команд SIM.
Плата расширения имеет два интерфейса для подключения антенны, а именно, разъем U.FL и разъем SMA. Они соединены через патч-корд.
Плата расширения обычно поставляется с GSM-антенной 3 дБи, что позволяет установить плату расширения внутри металлического корпуса (если антенна находится снаружи).
Разъем для SIM карты
На нижней стороне платы находится гнездо для SIM карты. Любая активированная полноразмерная 2G SIM карта будет работать отлично.
Работа с держателем для SIM карты может потребовать некоторого привыкания. Чтобы разблокировать защелку, нажмите на верхнюю часть сборки, а затем поднимите её. Поместите SIM-карту в нижнюю часть держателя. Затем положите руку обратно в корпус держателя и осторожно протолкните его вперед в положение блокировки.
RTC (часы реального времени)
Плата расширения SIM900 GSM/GPRS Shield может быть настроена на сохранение времени. Таким образом, нет необходимости в отдельном RTC. Она сохранит время даже при выключенном питании.
Если вы хотите использовать внутренний RTC, вам необходимо установить батарею CR1220 на задней стороне платы.
Ваш оператор сети может не поддерживать установку времени автоматически. В этом случае вы можете сделать это вручную, используя AT команду AT+CCLK.
Подключение к Arduino
Для начала подключите контакты D7 (Tx) и D8 (Rx) на плате расширения к цифровым выводам 7 и 8 на Arduino. Поскольку для связи с платой расширения мы будем использовать программный последовательный порт, убедитесь, что перемычки установлены на выбор программного последовательного порта.
Подключите плату расширения к внешнему источнику питания 5V 2A. Не поддавайтесь искушению подключить ее к источнику питания 5V на Arduino, так как плата расширения может не работать из-за недостатка тока источника питания. Также убедитесь, что вы выбрали внешний источник питания с помощью ползункового переключателя рядом с разъемом питания.
Теперь подключите все земли в схеме.
Наконец, подключите антенну, вставьте полностью активированную SIM карту в держатель.
Включение/выключение чипа SIM900
Даже если вы включите плату расширения, вам нужно еще включить чип SIM900, чтобы он заработал.
В соответствии с техническим описанием, установив на выводе PWRKEY чипа низкий логический уровень (лог. 0) в течение как минимум 1 секунды, можно включить/выключить чип. У нашей платы расширения есть два способа сделать это.
Аппаратный запуск
Плата расширения снабжена тактильной кнопкой, расположенной под прямым углом рядом со светодиодным индикатором PWR. Вам нужно нажать и удерживать эту кнопку в течение примерно 2 секунд, чтобы включить или выключить плату расширения.
Программный запуск
Вместо того, чтобы каждый раз вручную нажимать PWRKEY, вы можете программно включать/выключать SIM900.
Во-первых, вам нужно запаять SMD перемычку, обозначенную как R13 на плате расширения, как показано на рисунке ниже.
Затем вам нужно подключить вывод D9 на плате расширения к выводу D9 на Arduino.
Наконец, вам нужно добавить следующую функцию в вашу программу.
1 2 3 4 5 6 7 8 9 10 |
void SIM900power() { pinMode(9, OUTPUT); digitalWrite(9,LOW); delay(1000); digitalWrite(9,HIGH); delay(2000); digitalWrite(9,LOW); delay(3000); } |
Пример 1. AT-команды
Для отправки AT команд и взаимодействия с платой расширения SIM900 мы будем использовать монитор последовательного порта. Приведенный ниже скетч позволит Arduino связываться с платой расширения SIM900 в мониторе последовательного порта. Прежде чем приступить к подробному разбору кода, подключите Arduino к компьютеру, скомпилируйте приведенный ниже код и загрузите его в Arduino.
Открыв монитор последовательного порта, убедитесь, что выбрана опция “NL & CR”!
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
#include <SoftwareSerial.h> // Создать объект программного последовательного порта для связи с SIM900 // Tx и Rx SIM900 подключены к выводам 7 и 8 Arduino SoftwareSerial mySerial(7, 8); void setup() { // Начать последовательную связь Arduino и Arduino IDE (монитор последовательного порта) Serial.begin(9600); // Начать последовательную связь Arduino и SIM900 mySerial.begin(9600); Serial.println("Initializing..."); delay(1000); // Рукопожатие с SIM900 mySerial.println("AT"); updateSerial(); // Тест качества сигнала, диапазон значений 0-31, 31 - лучший mySerial.println("AT+CSQ"); updateSerial(); // Прочитать информацию о SIM карте, чтобы убедиться, что SIM карта подключена 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()); } } |
Пример 2. Выполнение звонка
Теперь давайте запрограммируем нашу Arduino на выполнение вызова. Этот скетч очень полезен, если вы хотите, чтобы ваша Arduino совершила аварийный вызов (SOS) в случае чрезвычайной ситуации, например, при превышении температуры или при проникновении кого-либо в ваш дом.
Прежде чем попробовать скетч, вам нужно ввести номер телефона. Найдите строку ZZxxxxxxxxxx и замените ZZ кодом страны, а xxxxxxxxxx – 10-значным номером телефона.
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
#include <SoftwareSerial.h> // Создать объект программного последовательного порта для связи с SIM900 // Tx и Rx SIM900 подключены к выводам 7 и 8 Arduino SoftwareSerial mySerial(7, 8); void setup() { // Начать последовательную связь Arduino и Arduino IDE (монитор последовательного порта) Serial.begin(9600); // Начать последовательную связь Arduino и SIM900 mySerial.begin(9600); Serial.println("Initializing..."); delay(1000); // Рукопожатие с SIM900 mySerial.println("AT"); updateSerial(); // замените ZZ кодом страны, а xxxxxxxxxxx номером телефона для звонка mySerial.println("ATD+ +ZZxxxxxxxxxx;"); 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()); } } |
Пример 3. Прием звонка
Прием звонка не требует специального кода; вы просто должны продолжать слушать плату расширения SIM900. Тем не менее, вы можете найти этот скетч очень полезным, когда вам нужно инициировать действие при получении звонка с определенного номера телефона.
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 36 37 38 |
#include <SoftwareSerial.h> // Создать объект программного последовательного порта для связи с SIM900 // Tx и Rx SIM900 подключены к выводам 7 и 8 Arduino SoftwareSerial mySerial(7, 8); void setup() { // Начать последовательную связь Arduino и Arduino IDE (монитор последовательного порта) Serial.begin(9600); // Начать последовательную связь Arduino и 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()); } } |
Входящий вызов обычно обозначается как “RING” в мониторе последовательного порта, за которым следуют номер телефона и идентификатор звонящего. Чтобы принять или сбросить вызов, используются следующие AT команды:
ATA – принимает входящий звонок.
ATH – сбрасывает звонок. При прекращении вызова в монитор последовательного порта отправляется сообщение NO CARRIER, указывающее, что вызов не может соединиться.
Пример 4. Отправка SMS
Давайте перейдем к более интересным вещам. Запрограммируем нашу Arduino для отправки SMS на любой телефонный номер, который вы пожелаете. Прежде чем попробовать скетч, вам нужно ввести номер телефона. Найдите строку ZZxxxxxxxxxx и замените ZZ кодом страны, а xxxxxxxxxx – 10-значным номером телефона.
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
#include <SoftwareSerial.h> // Создать объект программного последовательного порта для связи с SIM900 // Tx и Rx SIM900 подключены к выводам 7 и 8 Arduino SoftwareSerial mySerial(7, 8); void setup() { // Начать последовательную связь Arduino и Arduino IDE (монитор последовательного порта) Serial.begin(9600); // Начать последовательную связь Arduino и SIM900 mySerial.begin(9600); Serial.println("Initializing..."); delay(1000); // Рукопожатие с SIM900 mySerial.println("AT"); updateSerial(); // Настройка текствого режима mySerial.println("AT+CMGF=1"); updateSerial(); // замените ZZ кодом страны, а xxxxxxxxxxx номером телефона для отправки sms mySerial.println("AT+CMGS=\"+ZZxxxxxxxxxx\""); updateSerial(); // текстовый контент mySerial.print("HELLO WORLD!"); updateSerial(); mySerial.write(26); } void loop() { } void updateSerial() { delay(500); while (Serial.available()) { // Пересылка того, что было получено с аппаратного последовательного порта, // на программный последовательный порт mySerial.write(Serial.read()); } while(mySerial.available()) { // Пересылка того, что было получено с программного последовательного порта, // на аппаратный последовательный порт Serial.write(mySerial.read()); } } |
Основной цикл программы остается пустым, так как мы хотим отправить SMS только один раз. Если вы хотите отправить SMS еще раз, просто нажмите клавишу RESET на вашей Arduino.
Пример 5. Чтение SMS
Теперь давайте запрограммируем нашу Arduino для чтения входящих сообщений. Этот скетч очень полезен, когда вам нужно инициировать действие при получении определенного SMS сообщения. Например, когда Arduino получает SMS, вы можете дать ей команду включить или выключить реле.
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
#include <SoftwareSerial.h> // Создать объект программного последовательного порта для связи с SIM900 // Tx и Rx SIM900 подключены к выводам 7 и 8 Arduino SoftwareSerial mySerial(7, 8); void setup() { // Начать последовательную связь Arduino и Arduino IDE (монитор последовательного порта) Serial.begin(9600); // Начать последовательную связь Arduino и SIM900 mySerial.begin(9600); Serial.println("Initializing..."); delay(1000); // Рукопожатие с SIM900 mySerial.println("AT"); updateSerial(); // Настройка текстового режима mySerial.println("AT+CMGF=1"); updateSerial(); // Решает, как следует обрабатывать новые входящие SMS сообщения 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()); } } |
Если ваше сообщение достаточно длинное, вероятно, вы получите его с пропущенными символами. Это не из-за неисправного кода. Ваш буфер приема SoftwareSerial заполняется и отбрасывает символы. А вы не читаете из буфера достаточно быстро.
Самое простое решение – увеличить размер буфера SoftwareSerial со стандартного размера с 64 до 256 байт (или меньше, в зависимости от того, что у вас заработает).
На компьютере с Windows перейдите в
1 |
C:Program Files (x86) → Arduino → hardware → Arduino → avr → libraries → SoftwareSerial (→ src для более новой версии Arduino IDE). |
Откройте SoftwareSerial.h и измените строку:
1 2 |
// RX buffer size #define _SS_MAX_RX_BUFF 64 |
на
1 2 |
// RX buffer size #define _SS_MAX_RX_BUFF 256 |
Сохраните файл и попробуйте скомпилировать скетч еще раз.