Обзор модуля GSM, GPRS на чипе SIM800C
В статье расскажу о плате разработке на чипе SIM800C, который поддерживает GSM, GPRS b Bluetooth с управлением AT командам.
В статье расскажу о плате разработке на чипе SIM800C от компании SimCom, который поддерживает GSM, GPRS и Bluetooth 3.0 с управлением AT командами через последовательную связь. Данный модуль можно использовать в различных проектах, где необходимо отправлять показания с датчиков в виде SMS, звонка и так далее.
Технические параметры
► Питание: вывод 5V — 5В и вывод VBAT: — литиевая батарея Li-Pol/Li-Ion 3.7В;
► Диапазоны частот: GSM-850 / EGSM-900 / DCS-1800 / PCS-1900 МГц;
► Соответствие стандартам: GSM Phase 2 / GSM Phase 2+;
► Мощность излучения:
— Класс 4: 2Вт, GSM-850 / EGSM-900 МГц;
— Класс 1: 1Вт, DCS-1800 / PCS-1900 МГц;
— Класс 4: 2Вт, GSM-850 / EGSM-900 МГц;
— Класс 1: 1Вт, DCS-1800 / PCS-1900 МГц;
► GPRS соединение:
— GPRS мульти-слотовый класс: 12 (по умолчанию);
— GPRS мульти-слотовый класс 1-12 (настраивается);
— Входящая и исходящая скорость, макс.: 85.6 Кб/с;
— Схемы кодирования каналов: CS-1 / CS-2 / CS-3 / CS-4;
— Поддержка протокола аутентификации PAP для соединений типа точка-точка (PPP);
— Интегрированный протокол TCP/IP;
— Поддержка канала управления пакетной передачи данных PBCCH;
— Поддержка интерактивных сервисов с USSD-запросами;
► SMS:
— Поддержка режимов: MT / MO / CB / Text / PDU;
— Хранение: на SIM-карте;
► Аудио:
— Звуковые кодеки: Half Rate (GSM-HR) / Full Rate (GSM-FR) / Enhanced Full Rate (GSM-EFR) Adaptive Multi Rate (GSM-AMR);
— Поддержка эхоподавления и шумоподавления;
► Bluetooth: версии 3.0 (опционально*);
► Антенна: внешняя
— GSM: коннектор IPEX + площадка под пайку;
— Bluetooth: площадка под пайку;
► СИМ-карта: 3В/1.8В, формат microSIM;
► Управление: АТ команды 3GPP TS 27.007, 3GPP TS 27.005, расширенный набор АТ команд SIMcom;
► Доп.функции: DTMF, RTC;
► Индикация: рабочее напряжение, статус сетевого соединения;
► Габариты: 30 х 26 х 6 мм;
► Вес: 4 грамм.
Описание модуля SIM800C
Модуль имеет небольшие габариты, всего 26 х 30 х 5 мм и собран на базе чипа SIM800C от компании SimCom. SIM800C работает от напряжения 3.4 В – 4.4 В, поэтому на плате установлены последовательно два диода, на которых падает напряжение до необходимого уровня. Так же, для согласований уровней с 5 Вольтной Arduino, на модуле установлены два транзистора с резисторами, 0а также установлен коннектор для антенны типа IPEX и разъём для сим-карты.
Чип SIM800C имеет небольшие размеры, всего 15.7 мм х 17.6мм х 2.3 мм в форм-факторе LCC (42 вывода). Модуль работает в сетях GSM и GPRS на частотах 850 МГц, 900 МГц, 1800 МГц и 1900 МГц, что позволяет осуществлять голосовые вызовы, отправки или прием SMS сообщений, обмен цифровыми и факсимильными данными. За дополнительной информации можно за сайт производителя по ссылка 1 и ссылка 2, где можно скачать прошивку, мануал и много что еще.
Конфигурация контактов:
► 5V — Напряжение питания +5В DC;
► V_TTL — Вход +3.3В/+5В для питания логических выводов TXD/RXD;
► GND — Общий, земля;
► TXD — Передача данных UART-TTL;
► RXD — Приём данных UART-TTL;
► DTR — Готовность к приёму данных UART;
► SPKP — Плюсовой выход на динамик;
► SPKN — Минусовой выход на динамик;
► BT_ANT — Вход антенны Bluetooth;
► GSM_ANT — Вход антенны GSM;
► VBAT — Напряжение питания +3.7В, литиевая батарея;
► GND — Общий, земля;
► PWX — Вход управления включения, выключения SIM800C;
► GND — Общий, земля;
► VRTC — Напряжение питания RTC +3.0В;
► RI — Индикатор вызова (входящий звонок);
► MICP — Плюсовой вход микрофона;
► MICN — Минусовой вход микрофона.
Подключение модуля SIM800C к Arduino UNO
Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Макетная плата 400 контактов, breadboard x 1 шт.
► Модуль GSM, GPRS на чипе SIM800C x 1 шт.
► Понижающий преобразователь напряжения LM2596 x 1 шт.
► Провод DuPont, 2,54 мм, 20 см, F-M (Female — Male) x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.
Подключение:
Первое делом необходимо припаять антенну или установить выносную, далее установите SIM карту в разъем. Теперь подключаем вывода TX и RX к выводам 3 и 2 на Arduino UNO. Питать модуль будем от модуля LM2596, заранее установив на нем выходное напряжение 5 Вольт. На вывод TTL подаем 5В от Arduino UNO, а так же не забываем объединить землю. Чтобы модуль включился, необходимо RWX подключить к земле.
Программа №1 — Тестирование AT-команд:
Для отправки AT-команд и связи с модулем SIM800C будем использовать «Мониторинг порта». Копируем приведенный скетч ниже и загружаем его в Arduino.
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 |
#include <SoftwareSerial.h> SoftwareSerial mySerial(3, 2); // Выводы SIM800C Tx & Rx подключены к выводам Arduino 3 и 2 void setup() { Serial.begin(19200); // Инициализация последовательной связи с Arduino и Arduino IDE (Serial Monitor) mySerial.begin(19200); // Инициализация последовательной связи с Arduino и SIM800C Serial.println("Initializing..."); // Печать текста delay(1000); // Пауза 1 с mySerial.println("AT"); // Отправка команды AT updateSerial(); mySerial.println("AT+CSQ"); // Проверка качества сигнала, диапазон значений 0-31, 31 - лучший updateSerial(); mySerial.println("AT+CCID"); // Чтение информацию о SIM-карте updateSerial(); mySerial.println("AT+CREG?"); // Проверка регистрации в сети updateSerial(); } void loop() { updateSerial(); } void updateSerial() { delay(500); // Пауза 500 мс while (Serial.available()) { mySerial.write(Serial.read()); // Переадресация с последовательного порта SIM800C на последовательный порт Arduino IDE } while(mySerial.available()) { Serial.write(mySerial.read()); // Переадресация c Arduino IDE на последовательный порт SIM800C } } |
Открываем окно «Мониторинг порта» , устанавливаем скорость «19200» и «NL (Новая строка)».
Скетч начинается с включения библиотеки «SoftwareSerial.h» и указании выводов к которым подключены Tx и Rx модуля SIM800C.
1 2 |
#include <SoftwareSerial.h> SoftwareSerial mySerial(3, 2); |
В функции void setup(), инициализируем последовательный связь между Arduino и модулем SIM800C на скорости 9600 бод.
1 2 |
Serial.begin(9600); mySerial.begin(9600); |
Далее, идет отправка серий AT-команд:
AT — это самая основная команда AT. Если все работает, в ответ получаем, символ AT, а затем ОК, сообщая, что все в порядке.
AT+CSQ — проверка уровня сигнала в дБ, должно быть выше 5.
AT+CCID — получение номера SIM-карты.
AT+CREG? — проверка регистрации в сети.
1 2 3 4 5 6 7 8 |
mySerial.println("AT"); updateSerial(); mySerial.println("AT+CSQ"); updateSerial(); mySerial.println("AT+CCID"); updateSerial(); mySerial.println("AT+CREG?"); updateSerial(); |
В функции void loop() мы вызываем функцию updateSerial (), которая перенаправляет данные от последовательного порта и отправляет их в модуль SIM800C, через вывод D2 (RX), а так же на оборот, перенаправляет данные от вывода D3 (TX) на последовательный порт.
1 2 3 4 5 6 7 8 9 10 11 |
{ delay(500); while (Serial.available()) { mySerial.write(Serial.read()); } while(mySerial.available()) { Serial.write(mySerial.read()); } } |
Теперь можно отправить команды через окно «Мониторинг порта», для получения дополнительной информации о сетевом подключении и состоянии батареи.
ATI — получить название модуля и ревизию
AT+COPS? — проверка регистрации в сети (MTS)
AT+COPS=? — список операторов в сети.
AT+CBC — команда возвращает состояние батареи
— значение «0» указывает, что модуль питается от батареи
— значение «72» показывает, процент заряда батареи в % (72%)
— значение «3983» показывает фактическое напряжением в мВ (3,983 В).
Программа №2 — Отправка SMS:
В данном примере запрограммируем Arduino для отправки SMS на указанный номер телефона. Прежде чем загрузить пример необходимо ввести номер телефона. Найдите строку +7xxxxxxxxxx и замените его на необходимый номер телефона.
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 |
#include <SoftwareSerial.h> SoftwareSerial mySerial(3, 2); // Выводы SIM800C Tx & Rx подключены к выводам Arduino 3 и 2 void setup() { Serial.begin(19200); // Инициализация последовательной связи с Arduino и Arduino IDE (Serial Monitor) mySerial.begin(19200); // Инициализация последовательной связи с Arduino и SIM800C Serial.println("Initializing..."); // Печать текста delay(1000); // Пауза 1 с mySerial.println("AT"); // Отправка команды AT updateSerial(); mySerial.println("AT+CMGF=1"); // Выбирает формат SMS updateSerial(); mySerial.println("AT+CMGS=\"+7xxxxxxxxxx\""); // Отправка СМС на указанный номер updateSerial(); mySerial.print("Hello from the site | RobotChip.ru"); // Тест сообщения updateSerial(); mySerial.write(26); } void loop() { updateSerial(); } void updateSerial() { delay(500); // Пауза 500 мс while (Serial.available()) { mySerial.write(Serial.read()); // Переадресация с последовательного порта SIM800C на последовательный порт Arduino IDE } while(mySerial.available()) { Serial.write(mySerial.read()); // Переадресация c Arduino IDE на последовательный порт SIM800C } } |
Скетч похож на предыдущий, за исключением небольшого фрагмента кода.
1 2 3 4 5 6 7 |
mySerial.println("AT+CMGF=1"); updateSerial(); mySerial.println("AT+CMGS=\"+7xxxxxxxxxx\""); updateSerial(); mySerial.print("Hello from the site | RobotChip.ru"); updateSerial(); mySerial.write(26); |
AT + CMGF = 1 — выбирает формат SMS-сообщения в виде текста. Формат по умолчанию PDU.
AT + CMGS = +7xxxxxxxxxx — отправляет SMS на указанный номер телефона.
Программа №3 — Получение SMS:
В следующей программе, будем читать полученные сообщения, данный пример будет интересен для тех, кто хочет сделать проект с управлением по 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 |
#include <SoftwareSerial.h> SoftwareSerial mySerial(3, 2); // Выводы SIM800C Tx Rx подключены к выводам Arduino 3 и 2 void setup() { Serial.begin(19200); // Инициализация последовательной связи с Arduino и Arduino IDE (Serial Monitor) mySerial.begin(19200); // Инициализация последовательной связи с Arduino и SIM800C Serial.println("Initializing..."); // Печать текста delay(1000); // Пауза 1 с mySerial.println("AT"); // Отправка команды AT updateSerial(); mySerial.println("AT+CMGF=1"); // Выбирает формат SMS updateSerial(); mySerial.println("AT+CNMI=1,2,0,0,0"); // Обработка вновь поступившие SMS updateSerial(); } void loop() { updateSerial(); } void updateSerial() { delay(500); // Пауза 500 мс while (Serial.available()) { mySerial.write(Serial.read()); // Переадресация с последовательного порта SIM800C на последовательный порт Arduino IDE } while(mySerial.available()) { Serial.write(mySerial.read()); // Переадресация c Arduino IDE на последовательный порт SIM800C } } |
Программа очень похожа, за исключением приведенного ниже фрагмента кода.
1 2 |
mySerial.println("AT+CNMI=1,2,0,0,0"); updateSerial(); |
AT+CNMI=1,2,0,0,0 — указывает как должны обрабатываться вновь поступившие SMS-сообщения.
Ответ получим +CMT: все поля разделены запятыми:
— первое поле, указывается номер телефона отправившего SMS.
— второе поле, имя человека, отправляющего SMS.
— третье поле, времени получения SMS
— четвертое поле, сообщение.
Программа №4 — Звонок:
В этом примере, будем осуществлять вызов на указанный номер телефона. Первым делом, необходимо ввести номер телефона, на который будет осуществляться звонок.
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 |
#include <SoftwareSerial.h> SoftwareSerial mySerial(3, 2); // Выводы SIM800C Tx Rx подключены к выводам Arduino 3 и 2 void setup() { Serial.begin(19200); // Инициализация последовательной связи с Arduino и Arduino IDE (Serial Monitor) mySerial.begin(19200); // Инициализация последовательной связи с Arduino и SIM800C Serial.println("Initializing..."); // Печать текста delay(1000); // Пауза 1 с mySerial.println("AT"); // Отправка команды AT updateSerial(); mySerial.println("ATD+ +7xxxxxxxxxx;");// Номер телефона для вызова updateSerial(); delay(20000); mySerial.println("ATH"); // Положить трубку updateSerial(); } void loop() { updateSerial(); } void updateSerial() { delay(500); // Пауза 500 мс while (Serial.available()) { mySerial.write(Serial.read()); // Переадресация с последовательного порта SIM800C на последовательный порт Arduino IDE } while(mySerial.available()) { Serial.write(mySerial.read()); // Переадресация c Arduino IDE на последовательный порт SIM800C } } |
Для осуществления вызова используются следующие AT-команды:
ATD+ +7xxxxxxxxxx; — Набирает указанный номер.
ATH — закончить звонок
1 2 3 4 5 |
mySerial.println("ATD+ +Zxxxxxxxxxx;"); updateSerial(); delay(20000); mySerial.println("ATH"); updateSerial(); |
На рисунках ниже показан звонок из GSM-модуля SIM800C.
Купить на Aliexpress
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Провода DuPont, 2,54 мм, 20 см
Модуль GSM, GPRS на чипе SIM800С
Преобразователь напряжения LM2596, DC 3.2-40B на DC 1.38-35B, 3А, Step-Down
Преобразователь напряжения LM2596 с вольтметром, DC 4-40B на DC 1.38-35B, 3А, Step-Down
Купить в Самаре и области
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Провода DuPont, 2,54 мм, 20 см
Модуль GSM, GPRS на чипе SIM800С
Понижающий преобразователь напряжения LM2596, DC 3.2-40B на DC 1.38-35B, 3А
Понижающий преобразователь напряжения LM2596 с вольтметром, DC 4-40B на DC 1.25-37B, 3А
Купить на Авито
Контроллер Arduino UNO R3
Понижающий преобразователь напряжения LM2596
Модуль GSM, GPRS на чипе SIM800L