Обзор модуля GSM, GPRS на чипе SIM800L
Модуль GSM, GPRS на чипе SIM800L — это миниатюрный GSM-модем, который можно использовать в различных проектах, таких как охрана дачи или дома, сигнализация в машине и многое другое. Данный модуль, по функционалу не чем не уступает обычному сотовому телефону и с его помощью можно, отправлять SMS сообщения, совершать или принимать телефонные звонки, подключаться к Интернету через GPRS, TCP / IP и многое другое. А так же, модуль поддерживает четырехдиапазонную сеть GSM / GPRS.
Технические параметры
► Напряжение питания: 3.7 В ~ 4.4 В
► Потребляемый ток режима ожидания: 0,7 мА
► Пиковый ток: 2 А
► Скорость UART: 1200 – 115200 бод
► Формат SIM карты: microSIM
► Рабочий диапазон: EGSM900, DCS1800, GSM850, PCS1900
► Мощность передачи DCS1800, PCS1900: 1 Вт
► Мощность передачи GSM850, EGSM900: 2 Вт
► Режим сети: 2G
► Габариты: 25 мм х 24 мм х 4 мм
Общие сведения
В основе модуля лежит чип SIM800L от SimCom. Рабочее напряжение чипа составляет от 3.4 В до 4.4 В, что делает его идеальным, для прямого питания от литиевой батареи.
Контакты чипа SIM800L выведены по бокам модуля. Включая контакты необходимые для связи с микроконтроллером интерфейс UART, поддерживаемая скорость от 1200 бит / с до 115200 бит / с с автоматическим определением скорости. Для подключения к сотовой сети, нужна внешняя антенна, которая идет в комплекте с модулем. Так-же, на плате имеется разъем U.FL, если необходимо подключить выносную антенну.
На задней панели расположено гнездо для установки SIM-карты (подойдет любая SIM карта, главное чтобы была активированная). Устанавливать SIM карту необхоимо контактами к чипу SIM800L, а ключ должен располагаться сверху.
Светодиодные индикаторы состояния
В верхнем правом углу модуля SIM800L находится светодиод, который показывает состояние сотовой сети.
► Мигает раз в 1 с — Модуль работает, но еще не подключился к сотовой сети.
► Мигает раз в 2 с — Запрошенное вами соединение для передачи данных GPRS активно.
► Мигает раз в 3 с — Модуль установил связь с сотовой сетью и может отправлять / получать голосовые и SMS-сообщения.
Распиновка GSM-модуля SIM800L
На модуле SIM800L расположено 12 контактов, которые необходимы для связи с микроконтроллером и подключении динамика и микрофона. Соединения следующие:
► NET — Вывод для припаивания спиральной антенну.
► VCC — Питание модуля, от 3,4 В до 4,4 вольт.
Помните, что подключение модуля к 5 В, приведет к его выходу из строя, он так же не работает и от 3.3 В. Для его работы необходим внешний источник питания, Li-ion аккумулятор или понижающие преобразователи постоянного тока на 3,7 В, 2A.
► RST (Reset) — Вывод сброса модуля.
► RxD (Receiver) — Вывод последовательной связи.
► TxD (Transmitter) — Вывод последовательной связи.
► GND — Вывод заземления, должен быть подключен к выводу GND на Arduino.
► RING — Вывод индикатора звонка.
► DTR — Вывод активации / деактивации спящего режима.
► MIC ± — Микрофонные вывод.
► SPK ± — Вывод динамика.
Питание для модуля SIM800L
Для стабильной работы модуля SIM800L необходим источник питания с выходным напряжением от 3,4 до 4,4 В (в идеале 4,1 В) с максимальным рабочим током 2А. В качестве источника питания можно использовать Li-ion аккумулятор (1200mAh и выше) или стабилизатор напряжения на LM2596.
Подключение
модуля SIM800L к Arduino
Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Макетная плата 400 контактов, breadboard x 1 шт.
► Резисторы 0,128 Вт, 10 кОм x 2 шт.
► Модуль GSM, GPRS на чипе SIM800L x 1 шт.
► Провод DuPont, 2,54 мм, 20 см, F-M (Female — Male) x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.
Подключение:
Первое делом необходимо припаять антенну или установить выносную, далее установите SIM карту в разъем. Теперь подключаем вывод Tx на модуле к выводу 3 на Arduino. Вывод Rx нельзя подключать напрямую, так как цифровой вывод Arduino Uno использует 5В, а модуль SIM800L использует 3,3В. Необходимо сигнал Tx, поступающий от Arduino UNO, понизить до 3,3В, чтобы не спалить модуль SIM800L. Самый простой способ, это воспользоватся делителем напряжения на резисторах. Подключаем резистор на 10 кОм между выводом Rx (SIM800L) и выводом 2 (Arduino) и второй резистор на 10 кОм между выводом Rx (SIM800L) и GND. Теперь осталось подключить питание модуля, в примере используется стабилизатор напряжения на LM2596.
Программа №1 — Тестирование AT-команд
Для отправки AT-команд и связи с модулем SIM800L будем использовать окно «Мониторинг порта». Копируем приведенный скетч ниже и загружаем его в 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 38 39 40 41 42 |
/* Тестировалось на Arduino IDE 1.8.5 Дата тестирования 28.03.2019г. */ #include <SoftwareSerial.h> SoftwareSerial mySerial(3, 2); // Выводы SIM800L Tx & Rx подключены к выводам Arduino 3 и 2 void setup() { Serial.begin(19200); // Инициализация последовательной связи с Arduino и Arduino IDE (Serial Monitor) mySerial.begin(19200); // Инициализация последовательной связи с Arduino и SIM800L 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()); // Переадресация с последовательного порта SIM800L на последовательный порт Arduino IDE } while(mySerial.available()) { Serial.write(mySerial.read()); // Переадресация c Arduino IDE на последовательный порт SIM800L } } |
Открываем окно «Мониторинг порта» , устанавливаем скорость «19200» и «NL (Новая строка)».
Скетч начинается с включения библиотеки «SoftwareSerial.h» и указании выводов к которым подключены Tx и Rx модуля SIM800L.
1 2 |
#include <SoftwareSerial.h> SoftwareSerial mySerial(3, 2); |
В функции void setup(), инициализируем последовательный связь между Arduino и модулем SIM800L на скорости 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 (), которая перенаправляет данные от последовательного порта и отправляет их в модуль SIM800L, через вывод D2 (RX), а так же на оборот, перенаправляет данные от вывода D3 (TX) на последовательный порт.
1 2 3 4 5 6 7 8 9 10 11 12 |
void updateSerial() { 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 40 41 42 43 44 |
/* Тестировалось на Arduino IDE 1.8.5 Дата тестирования 28.03.2019г. */ #include <SoftwareSerial.h> SoftwareSerial mySerial(3, 2); // Выводы SIM800L Tx & Rx подключены к выводам Arduino 3 и 2 void setup() { Serial.begin(19200); // Инициализация последовательной связи с Arduino и Arduino IDE (Serial Monitor) mySerial.begin(19200); // Инициализация последовательной связи с Arduino и SIM800L 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()); // Переадресация с последовательного порта SIM800L на последовательный порт Arduino IDE } while(mySerial.available()) { Serial.write(mySerial.read()); // Переадресация c Arduino IDE на последовательный порт SIM800L } } |
Скетч похож на предыдущий, за исключением небольшого фрагмента кода.
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 37 38 39 40 41 |
/* Тестировалось на Arduino IDE 1.8.5 Дата тестирования 28.03.2019г. */ #include <SoftwareSerial.h> SoftwareSerial mySerial(3, 2); // Выводы SIM800L Tx Rx подключены к выводам Arduino 3 и 2 void setup() { Serial.begin(19200); // Инициализация последовательной связи с Arduino и Arduino IDE (Serial Monitor) mySerial.begin(19200); // Инициализация последовательной связи с Arduino и SIM800L 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()); // Переадресация с последовательного порта SIM800L на последовательный порт Arduino IDE } while(mySerial.available()) { Serial.write(mySerial.read()); // Переадресация c Arduino IDE на последовательный порт SIM800L } } |
Программа очень похожа, за исключением приведенного ниже фрагмента кода.
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 38 39 40 41 42 |
/* Тестировалось на Arduino IDE 1.8.5 Дата тестирования 28.03.2019г. */ #include <SoftwareSerial.h> SoftwareSerial mySerial(3, 2); // Выводы SIM800L Tx Rx подключены к выводам Arduino 3 и 2 void setup() { Serial.begin(19200); // Инициализация последовательной связи с Arduino и Arduino IDE (Serial Monitor) mySerial.begin(19200); // Инициализация последовательной связи с Arduino и SIM800L 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()); // Переадресация с последовательного порта SIM800L на последовательный порт Arduino IDE } while(mySerial.available()) { Serial.write(mySerial.read()); // Переадресация c Arduino IDE на последовательный порт SIM800L } } |
Для осуществления вызова используются следующие AT-команды:
ATD+ +7xxxxxxxxxx; — Набирает указанный номер.
ATH — закончить звонок
1 2 3 4 5 |
mySerial.println("ATD+ +Zxxxxxxxxxx;"); updateSerial(); delay(20000); mySerial.println("ATH"); updateSerial(); |
На рисунках ниже показан звонок из GSM-модуля SIM800L.
Программа №5 — Принятие звонка
В последнем примере, будем принимать звонок, для этого ненужно специального скетча, необходимо просто считывать постоянно данные с модуля SIM800L.
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 |
/* Тестировалось на Arduino IDE 1.8.5 Дата тестирования 28.03.2019г. */ #include <SoftwareSerial.h> SoftwareSerial mySerial(3, 2); // Выводы SIM800L Tx Rx подключены к выводам Arduino 3 и 2 void setup() { Serial.begin(19200); // Инициализация последовательной связи с Arduino и Arduino IDE (Serial Monitor) mySerial.begin(19200); // Инициализация последовательной связи с Arduino и SIM800L Serial.println("Initializing..."); // Печать текста } void loop() { updateSerial(); } void updateSerial() { delay(500); // Пауза 500 мс while (Serial.available()) { mySerial.write(Serial.read()); // Переадресация с последовательного порта SIM800L на последовательный порт Arduino IDE } while(mySerial.available()) { Serial.write(mySerial.read()); // Переадресация c Arduino IDE на последовательный порт SIM800L } } |
Входящий вызов обычно обозначается как «RING» на последовательном мониторе, за которым следует номер телефона и идентификатор звонящего. Чтобы принять / повесить звонок, используются следующие AT-команды:
ATA — принять звонок.
ATH — отказ от звонка.
Ниже вывод на последовательном мониторе показывает вызов, полученный GSM-модулем SIM800L.
Купить на Aliexpress
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Провода DuPont, 2,54 мм, 20 см
Модуль GSM, GPRS на чипе SIM800L
Преобразователь напряжения 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 на чипе SIM800L
Понижающий преобразователь напряжения LM2596, DC 3.2-40B на DC 1.38-35B, 3А
Понижающий преобразователь напряжения LM2596 с вольтметром, DC 4-40B на DC 1.25-37B, 3А
Здравствуйте, подскажите пожалуйста, а как сделать white-list для принятия сообщения на arduino?
Здравствуйте, скажите пожалуйста, из-за чего модуль SIM800L на протяжении какого то времени работал, отправлял сообщения на смартфон, а потом вышел из строя и теперь пишет следующее:
AT OKAT+CMGF=1 ERRORAT+CMGS=»+79080730938″ ERRORTemperature < +28C ERROR
Ранее везде где сейчас ERROR, модуль отправлял OK
Устройство проработало сутки
Добрый день, питаете модуль от отдельного блок питания?
Температура меньше рабочей
Добрый день!
Появился в хозяйстве ESP-800L.
Форм-фактор и разъем напоминает обычный Wi-Fi модуль ESP8266-01 (ESP-01)
Возможно ли допустим его подключить допустим к модулю реле для ESP8266-01S или ESP-01S DHT-11 ?
Добрый день, Ильгиз.
Не работал с этим модулем, но для модуля SIM800 нужен контроллер который будет управлять им, работать с модулем реле и DHT-11 напрямую не будет.
Всем привет, как-то давно читал книгу по ардуине и там было сказано, что ардуина на аппаратном уровне может понижать напряжение на аналоговом выходе, какой не помню, но суть именно в том, что можно исключить танцы с доп девайсами.
вот, Нашел, ARef
Нет, AREF это ВХОД опорного напряжения АЦП. Чисто аналоговых выходов у Ардуины (на чипе Atmega328) — нет. Есть выходы на которые может подаваться ШИМ сигнал.
Спасибо, очень полезный обзор, особенно для тех кто с нуля. Нужно добавить, что СИМку надо кроме активации , еще и отключить в установках телефона Pin код. На макетной плате подать питание на SIM800 сразу после понижающего модуля, все соединения должны быть надежными, а так же проверять работу в зоне хорошего приема, без него тоже никак. Еще раз спасибо.
Доброго здравия желаю! Благодарю за подробное описание SIM800! Прошу помощи ещё в одном вопросе: можно ли его без ардуино настроить как генератор несущей? Мне для проверки измерителей ЭМИ нужны компактные источники СВЧ любого диапазона. Благодарствую!
Ребята, можете подсказать как отсеивать номер? писать в порт понятно, а вот идея в том чтобы звонок от номера внесённого в список вызывал команду вкл. реле, а абонент не из списка просто висел и не было приёма от него звонка
помогите плииз!
используй телефонную книгу модуля симм800, есть ат команды записи в нее номеров и имён, чтения редактирования и удаления, каждая запись идёт под своим номером что облегчает работу с ней. хотите отправить смс адресату а имени не помните как пишется, через цикл считали все записи где имя соответствует какой то маске, например содержит иван, в ответ получите команду со списком всех записей где в поле имя будет это сочетание — и Иваны и Ивановы и т п. как вариант отправить всем смс можно, но если знаете сразу номер записи то считываете поле телефон адресной книги где номер записи такой то, и присваивает полученное значение переменной которую потом представляете в AT+CMGS. аналогично делается проверка белого списка номеров для входящих сообщений, если вам белый список не статичный нужен а изменяемый не только пеоепрлшивкой нового скетча. ищите мануал ат команд на сим800, он есть в свободном доступе