GSM/GPRS модуль на основе SIM800L самостоятельно подключить просто. Выполните несколько этапов и используйте современный компактный элемент в своих целях.
Корпорация SimCom предлагает пользователям компактный GSM/GPRS модуль на основе SIM800L. Улучшить сигнал позволяет встроенный разъем. Также можно воспользоваться антенной, которая идет в комплекте с этой модульной системой.
GSM/GPRS модуль SIM800L — описание
Детальное описание:
GSM/GPRS модуль SIM800L — подключение
Для подключения, кроме самого модуля, преобразователя и контроллера Arduino UNO R3, понадобится USB кабель, батарея на 12В и соединительные провода. Выполните следующие этапы:
Важно: Если вам необходимо подключить два или три модуля к ардуино, тогда используйте другие коды, прописывая их в скетче через SoftwareSerial.
Наглядно в нижеследующем видео представлено, как подключить модуль SIM800L к Ардуино.
Не густо, на плате установлен сам модуль, держатель для микросим, тантал, пару керамики, резистор и светодиод. Как ни странно Китайцы позиционируют данный модуль как шилд для Ардуины. Ардуина вроде как питается от 5 вольт и чаще всего от USB, а если меня не подводит память, то СИМкомовские модули кушают от 3,6в до 4,2 и при этом в пике хотят 2А. Ну да ладно, подключаю к отладочной плате и... Китайцы!!! Все что угодно лишь бы удешевить. Не работает данный модуль от 5 вольт. Моя память меня не подвела. Короче можно долго рассуждать чем его запитать, но я вам покажу один прекрасный девайс, который легко решит эту проблему. Прикупить его можно там же где и SIM800L , а именно в ЧипРезисторе . Модуль представляет собой понижающий импульсник до 3А.
Долее берем этот модуль и припаиваем входные и выходные провода. Заем подключаем к тостеру и настраиваем на 4 вольта.
Вот схемка, вид сверху.
Мой хаос выглядит вот так.
Проверяем на короткое, вставляем симку, подключаем USB-RS232 и питание. Если ничего не задымилось и замигал светодиод на модуле, значит все в порядке. Далее запускаем како-нибудь терминал, у меня PuTTYn и кидаем первую команду AT . В ответ если получили OK значит все работает.
Бинго! Далее кидаем AT+COPS? и если в ответ получили своего оператора, то для закрепления позвоните себе набрав команду ATD89161234567; . Точка с запятой обязательно! Если модуль дозвонился, то значит он работает с нашими сетями. Я тестил на пчелайне. Если я сейчас скажу что на этом все, то меня закидают яйцами и помидорами, а этого не хочу))) Значит давайте соберем из этого что-нибудь полезное. Например сигнализацию. Прикрутим модуль к МК и будем следить за состояние пару ножек. Как только на ножке появится изменения, то тут же пошлем SMS с оповещением об данном изменении. В роли МК будет выступать ATmegs32a. На ноги PB2 и PB3 прикрутим кнопки. Кнопки имеют общий GND, а для подтяжки используем встроенные резисторы. Для работы с модулем напишем пару функций, а именно инициализации и передачи SMS. Чтож, поехали.
Для начала сконфигурим проект при помощи генератора кода axlib . Для этого выберем МК ATmega32, внешний кварц на 7372800 (такой кварц нужен для уменьшения ошибок при передаче по UART)
. Настроим UART на скорость 9600. Далее сгенерив проект откроем его в AtmelStudio 6. Первым делом создадим файл sim800l.h
в корне проекта и подключим его.
#include
Если верить mt-system, то 800 серия это приемник 900 серии, которую якобы сворачивают к концу 2016 года. Поэтому довольно странно читать о таких досадных косяках как зажатые ответы.
может чего в датишах нового завелось? Или ты чисто по аналогии с 900 кидал команды, особо не раскуривая?
Меня эти паузы насторожили еще когда я с ней общался через терминал. Думал порт тормозит, но на ноуте та же песня.
Подскажите как заставить модуль, по запросу USSD отправлять баланс,считывать и устанавливать на ножках Avrки уровнь. В общем хочется сделать "Умный дом" Спасибо
передаётся \n ,для работы с симмодулем это нужно или на всякий случай?
Что делает символ /" тут
#define SIM800L_AT_SMS "AT+CMGS=\""
usart_str_out
(SIM800L_AT_SMS, 9);
usart_str_out
(num, 12);
usart_str_rn
("\"");
тут тоже /" /r /n
почему нельзя разом usart_str_rn
(AT+CMGS="+7xxxxxxxxxx") , как в терминале?
И
usart_str_out
(text, lenght);
str = 0x1A;понятно
str = 0; зачем ноль?
usart_str_rn
(str); и ещё /r /n ?
--> Что делает символ /" тут
Символ \ ставится перед служебными символами для того чтобы эти символы превратить в простые. Дело в том что двойная кавычка это служебный символ. Его используют чтобы передать строку в массив. А для того чтобы компилятор прочитал именно как символ, то перед служебными символами ставят обратную косую черту.
Пример:
BYTE
data = "Какой-то текст \"Текст в кавычках\"";
Теперь внутренние кавычки запишутся в массив как символы.
--> почему нельзя разом usart_str_rn (AT+CMGS="+7xxxxxxxxxx") , как в терминале?
Потому что функция принимает в качестве аргумента указатель на первый элемент массива с номером абонента. Если написать сразу, то SMS будут высылаться вечно только этому абоненту. И изменить можно будет лишь переписав код.
--> Разъясните пожалуйста. Для чего в функции usart_str_rn
передаётся \n
Потому что документация на модуль SIMCOM требует в конце команды вводить код конца строки и перевода каретки.
Спасибо, Алексей это осознал, имею проблему с передачей 1А, в таблице служебных символов нет комбинации с \... .
А как должен выглядеть символ Ctrl+z? Или например пробел, табуляция. Поэтому передается именно кодом. Например \r\n можно записать как два байта 0x0D, 0x0A. Это одно и тоже.
Это я понял, коммада отправилась вот так
str = 0x4D;
str = 0x4B;
str = 0x4D;// три буквы текст для теста.
str = 0x1A;
str = 0;
usart_str_rn
(str);
, текст наверно могу строкой, но 1А получается только через массив, как-то проще нельзя?
void usart_char_out (BYTE data)
Просто посылает один байт в порт.
BYTE sim800l_send_sms(BYTE *num, BYTE *text, BYTE lenght)
{
// Массив для получения ответов от модуля
BYTE str = {0};
далее исходник
// Ждем OK
usart_str_in(str, 18);
if(!((str == 0x4F) & (str == 0x4B))) return 0x34;
Откуда взялись 14 и 15 индекс в массиве, если он объявлен явно str ?
А вот такой я валенок. Массив не на 10 ячеек, а на 20)))
Бывает)) Так и понял что опечатка. Начал свой код писать, взял за основу и просто сразу увидел
Советую лучше использовать SIM800C вместо L. Те же деньги но у C есть синезуб в модуле.
Да, у меня как раз 800C модули. Алексей, после выполнения чтения, в str пусто, в чем может быть проблема? Команды на модуль уходят и модуль отвечает (проверено лог.анализатором), но в str пусто
// Ждем OK
usart_str_in(str, 18);
if(!((str ==
Алексей. Разобрался в чем проблема, в функции usart_str_in было принятие 18 байт, а модуль отвечал только 9тью байтами, соответственно функция воспринимала данный ответ как таймаут. (BYTE usart_str_in(BYTE *str, BYTE count)
{
BYTE out = 0;
BYTE data = 0;
BYTE timeout = 0;
While(count > data) // здесь пока 18>9 - таймаут
{
data = GetData();
// Если в течении 250 мс данные не пришли
// то выйти из функции и вернуть 0
if(timeout >= 250)
{
ClearBuffer();
return out;
}
Timeout++;
_delay_ms(1);
}
Out = OutBufferStr(str, count);
return out;
}
А как быть если не известно какой длины придет ответ?
Опрашивать буфер на прием больше одного байта, а потом подождав вычитать весь пакет из буфера.
Алексей, не совсем понял идею, поясни плз
main()
{
// Количество принятых байт в буфер
BYTE
len_pocket = 0;
// Массив для данных
BYTE
data = {0};
while
(1)
{
// Смотрим что в буфере
len_pocket = usart_data();
// Проверяем пришло ли что в буфер
if
(len_pocket > 0)
{
// Если пришло, ждем
// расчет паузы (1000/(битрейт/10)) *
макс байт.
// Пример битрейт 19200, макс байт 40. (1000/1920) *
40 = 20.8мс
// Пауза для гарантированного получения всех байт
_delay_ms(22);
// Получаем количество принятых байт
len_pocket = usart_data();
// Записываем данные в массив
usart_str_in
(data, len_pocket);
// Теперь в массиве data лежат все принятые байты.
}
}
}
Алексей, спасибо, идею понял наглядно, буду пробовать. Еще хотел спросить про два слейва и мастер, по поводу потери связи при сдергивании линии, не пробовал макетировать?
Пока нет. Очень много работы. Я вообще из-за нее подзабил на сайт.
Алексей, расскажите как согласовать уровни если мк питается 5в а модуль 3,3в? На али нашел модуль питания KIS-3R33S, он имеет управление выходом, есть ли смысл затевать перезагрузку SIM модуля снятием питания или хватит резета и вывода включения модуля?
Во первых для согласования с модулем нужно не 3,3в, а 3в. Для этого достаточно поставить резистивный делитель, где RXD МК будет на входе резистора верхнего плеча, а резистор нижнего плеча подключен к общему сигналу.
Во вторых. Затевать перезагрузку передергиванием питания можно если модуль завис. Если модуль работает, то это категорически нельзя, та как это может привести к убиванию прошивки в модуле. Рестарт нужно делать передергиванием ножки PWR или АТ командой.
Спасибо, по первому всё понятно.
По второму, такой жесткий резет и планируется если модуль не отвечает и дергание rst и pwr не даёт результата,к стати есть pcb модулей без pwr или без rst, вопрос а как прошивка при выключении питания всего устройства, есть рекомендации?
Это китайский баг. Подпаиватся к контактам. Китайцы особо не парятся, они даже питание не всегда реализовывают правильно. Лишь бы было дешево.
А когда модуль повис что вначале дергать pwr или rst, и если пвр и резет не помогает как правильно по питанию передернуть?
Если завис наглухо, то просто снять питание секунды на три. А потом подать и проинициализировать по правилам.
Подскажите как передать номер бз кавычек модем MC52i
// Подача номера телефона абонента
usart_str_out(SIM800L_AT_SMS, 9);
usart_str_out(num, 12);
usart_str_rn(""");
ESP8266 стал настоящей новостью прошлого года для всех, кто занимается созданием девайсов на Ардуино. Дешёвый микроконтроллер, с возможностями, превышающими его дорогостоящий аналог, и при этом совместимый с АТ+.
Ардуино не остались за бортом, и теперь данный модуль официально добавлен в списки поддерживаемых платой, а соответственно, всё больше пользователей приобщится к китайскому мк для wi-fi соединения. Но бывает, что в системе необходимо отслеживать и местоположение модуля, для чего одной платы esp8266 будет недостаточно. Здесь и пригодится esp8266 sim800l.
Для смарт-домов и множества поделок требуется получать уведомление о местоположении платы, будь то дистанционная дверь или обычный трекер. Вот лишь краткий список поделок, которые можно создать, совмещая esp8266 sim800:
Когда вы определитесь с конечной целью проекта, следует разобраться в нюансах вопроса. Подключение устройств к вышеназванному микроконтроллеру такое же, как у стандартных плат ардуино, разница лишь в количестве доступных пинов. GPS трекер требует для работы от 3.7 до 4.2 вольт, в отличие от стандартных 5, выдаваемых микроконтроллером. Это следует учитывать при построении схемы платы и соответствующе подбирать вспомогательные источники питания. Либо устанавливать трансформаторы и резисторы, в зависимости от того, что вы ещё будете подсоединять к конечной системе.
Регистрируясь в сети, модулю потребуется приблизительно 2А, но это его пиковое потребление и в дальнейшем необходимая сила тока снизится до 1-1.2 А.
Как только вы подключите трекер к системе, необходимо будет его запустить и отправить первые команды, лучше всего подойдут АТ и АТ+. Только после этих действий модуль, наконец, начнёт посылать данные и отвечать на ваши запросы, поэтому не стоит беспокоится, если вы его подсоединили, диод мигает, но никаких реакций на скрипты нет. Вам просто необходимо активировать Sim800i при первом использовании, чтобы он успел зарегистрироваться в сети.
Также не стоит рассматривать Sim800i, как альтернативу ESP8266, чем грешат многие пользователи на форумах. Если вы натыкались на подобные заявления, можете смело утверждать, что автор в жизни не работал с ардуино. В первую очередь, сравнивать вспомогательную плату и микроконтроллер – бессмысленно. Не говоря уже о том, что одно из устройств создано для координации, отправки и принятия запросов по беспроводному интернету, а второе является GSM GPRS модулем. Соответственно, они являются хорошим дополнением друг к другу, но никак не альтернативой.
Распиновка более чем стандартная. Пин с питанием подключаете к источнику, способному выдавать напряжение в пределах 3.7-4.2 Вольт, или же к трансформатору. TX идёт к RX пину и наоборот. Как только вы выполните спайку и решите протестировать работу модуля, подключив источник питания, о правильности подключения просигнализируют диоды. Далее остаётся активировать модуль по описанному выше методу, и вы сможете использовать АТ-команды для управления. Если захотите подгрузить вспомогательную библиотеку или какие-то весомые медиа, стоит ознакомиться с подключением карты памяти к системе Ардуино.
Для начала давайте протестируем скорость работы порта и информацию о модуле, для этого воспользуемся «AT+IPR?» и «AT+CPAS» соответственно. Если всё в порядке и информация выводится без ошибок, то можно продолжить проверку и протестировать уровень сигнала, а также операторов, которых может увидеть модуль.
Самое главное – Sim800i позволяет звонить на указанные номера и принимать звонки, притом с помощью базовых библиотек.
Это также открывает простор для применения систем с его участием. Если вы захотите написать определённый скрипт, запускающий что-либо по входящему звонку, то учитывайте, что модуль реагирует на него фразой «RING» в командной строке.
Подобный функционал позволяет создавать сотни автономных систем управления, вплоть до того, что вместо отпечатков пальцев или ключ-карт, вы можете открывать дверь по звонку на определённый номер. Но, естественно, для хорошего уровня защиты, стоит прописать вайт-лист номеров.
После подключения и спайки по вышеописанным пинам, модуль должен начать мигать. Как только произойдёт аутентификация в сети, диоды станут реже моргать.
Если уменьшение частоты световых сигналов не произошло, то стоит, при помощи АТ-команд, удостовериться, воспринял ли вообще sim800I сеть вашего мобильного оператора и нет ли никакой ошибки. Также проверьте правильность распиновки и как установлена СИМ-карта с антенной, ошибка может быть и в них.
Ну и, конечно, поднесите систему ближе к окну, если находитесь в многоэтажном здании, вполне возможно, она просто не может поймать сигнал.
Рассмотрим как связать Адруино с GSM модулем SIM800L. Существуют GSM шилды специально для Ардуино, но по цене они достаточно дороги, потому решил приобрести бюджетный вариант. Статья может быть полезна так же для подключения модуля SIM900, NEOWAY M590, и некоторых сотовых телефонов. Неудобный нюанс в том, что этот модуль требует нестандартное для Ардуино питание 3.7В, поэтому запитывать пришлось отдельно через понижающий преобразователь напряжения.
Для подключения я использовал следующие компоненты:
Соединяем Ардуино с компьютером через USB кабель.
Даем питание к GSM модулю от батареи 12В через преобразователь:
Возникает вопрос: можно ли подать питание от самой Ардуино от 5В? Напрямую не рисковал бы. Но можно подобрать диод или стабилизатор напряжения.
Перед подключением к преобразователю напряжения необходимо его настроить выставив выходное напряжение на любое в диапазоне 3.7В - 4.2В. От преобразователя напряжения выходящие контакты подключаем к GSM модулю, соблюдая полярность.
TX и RX контакты на GSM модуле соединяем с 2 и 3 цифровыми контактами на Ардуино. Если необходимо подключить несколько GSM модулей к Arduino, то используйте другие пины и прописывайте в скетче через SoftwareSerial.
Процедуру добавлять в конец скетча и вызывать её из основного цикла так: sms(String("текст СМС на англ."),String("+791212345678"));
Включаем питание затем через монитор порта, выставив скорость 19200 и обязательно опцию "новая строка".
Вводите команду "ATI" и нажмите ENTER. Должна появиться информация от модели модуля.
Пробовал отправить на модуль СМСку через бесплатный сервис от Теле2, приходят непонятные строки. Пробовал в модуле сменить кодировки. Вопрос пока не решен.
Модуль GSM GPRS SIM800L
(SIM800L) MicroSIM с антенной
SIM800L GPRS GSM Module MicroSIM Card Core BOard Quad-band TTL Serial Port
Миниатюрный модуль GSM/GPRS сотовой связи на основе компонента SIM800L , разработанного компанией SIMCom Wireless Solutions. Русскоязычная версия сайта SIMCom . Стандартный интерфейс управления компонента SIM800L предоставляет доступ к сервисам сетей GSM/GPRS 850/900/1800/1900МГц для отправки звонков, СМС сообщений и обмена цифровыми данными GPRS. Поставляется с встроенной антенной, также можно подключить дополнительные антенны для улучшения качества сигнала.
Управлять модулем можно при помощи персонального компьютера через преобразователь интерфейса USB-UART или непосредственно через UART модулем микроконтроллера самостоятельной разработки или Arduino, Raspberry Pi и аналогичными.
Компонент SIM800L имеет реализованный стек протокола TCP/IP. Содержит микросхему MT6260SA компании MediaTek и микросхему приемопередатчика RFMD RF7176.
Благодаря функции отправки СМС сообщений наиболее часто модуль GSM GPRS SIM800 MicroSIM с антенной используется в диспетчеризации, беспроводной сигнализации и в охранных системах. При этом в результате различных событий происходит отправка сообщений вида: “Аварийная остановка лифта 3 дома №17”, “Гараж открыт”, “Дверь подвала открыта”, “Отключено 220 по перегрузке”, “Протечка системы отопления”, “Отопительный котел выключен”, “Температура в теплице ниже нормы”.
К модулю GSM GPRS SIM800 MicroSIM подключаются динамик и микрофон. С модуля можно совершать звонки и принимать.
Характеристики
Питание
напряжение, В
номинальное 4
диапазон 3,4-4,4
ток
в режиме ожидания 0,7 мА
предельный 500 мА
Максимальное напряжение высокого уровня интерфейса UART 2,8 В
Скорость UART 1200-115200 бод
Четыре диапазона EGSM900, DCS1800, GSM850, PCS1900
Мощность передачи в различных диапазонах
DCS1800, PCS1900 1 Вт
GSM850, EGSM900 2 Вт
Автоматически выполняет поиск в четырех частотных диапазонах
Поддерживает сеть 2G
Сопротивление подключаемого динамика 8 Ом
Микрофон электретный
Управляется командами AT через UART (3GPP TS 27.007, 27.005 SIMCOM enhanced AT Commands)
Автоматическое определение скорости передачи управляющих АТ команд
Отправка и получение GPRS данных (TCP/IP, HTTP, и т.д.)
Макс скорость передачи GPRS данных 85,6 Кбод
Кодирование CS-1, CS-2, CS-3 и CS-4
Поддерживает GSM 07.10 протокол
Поддержка пакетной передачи широковещательного канала управления (PBCCH) CSD на скоростях 2.4, 4.8, 9.6 и 14.4 Кбод
Поддержка неструктурированных данных дополнительных услуг USSD
Поддерживает PAP (протокол идентификации пароля)
Поддержка часов реального времени RTC
Поддерживает симкарт питанием 3 и 1,8 В
Температура, ℃
воздуха при работе -30...75
хранения -45...90
Размеры 25 х 25 мм
Индикация
При включении модуля GSM GPRS на плате быстро мигает светодиод. При установке соединения с мобильным оператором частота мигания снижается. Если связь с мобильным оператором потеряна, то светодиод опять мигает быстро.
Быстрое мигание светодиода говорит о поиске в эфире сигнала станции мобильной связи.
Подключение
Названия некоторых контактов и функции сигналов, линий.
Для улучшения качества сигнала подсоединяется антенна. Превышение входного напряжения интерфейса UART приведет к порче модуля SIM800. Не существует преобразователя интерфейса USB-UART c выходным напряжением 2,8 В. Существующие преобразователи имеют более высокое напряжение на выходе UART. Поэтому между выходом преобразователя и входом модуля GSM GPRS SIM800 устанавливается резисторный делитель напряжения.
В зависимости от выходного напряжения U_usbttl имеющегося у вас преобразователя интерфейса рассчитываются номиналы резисторов в делителе по формуле, приведенной на рисунке. При расчетах следует стремиться к величинам сопротивлений порядка нескольких килоом.
Первые шаги
Для проверки работоспособности устройства достаточно иметь ПК и симкарту с небольшим денежным счетом. Проверку работоспособности можно проводить по двум методам подключения модуля к ПК: через преобразователь интерфейсов USB-UART или используя Arduino UNO. Рассмотрим метод проверки без Arduino. Установите симкарту в модуль GSM GPRS, соблюдая расположение контактов. Соедините ПК через преобразователь интерфейсов USB-UART с устройством по схеме приведенной выше. Подключите питание номинальным напряжением. Дождитесь ориентируясь на мигание светодиода подключения к мобильному оператору. Включите на ПК терминальную программу. Данные в нее следует вводить большими буквами. Используя терминальную программу отправьте в модуль GSM GPRS SIM800 через порт подключения следующие команды.
АТ
Ответ модуля ОК
AT+CSQ
Ответ модуля +CSQ: 18,0 OK
Эта команда дает информацию о уровне сигнала. Первое число - уровень сигнала, величина 18 означает -78 dbм. Второе число - количество ошибочно принятых бит, величина “0” говорит о доле ошибок менее 0,2 %, что свидетельствует о хорошей связи.
Попробуйте отправить в модуль команду ATI.
Если у вас нет преобразователя USB-UART, то можно использовать Arduino UNO. Соедините контакт RX модуля SIM800L с контактом 11 цифрового сигнала Arduino UNO применяя резисторный делитель напряжения. Величины сопротивлений резисторов нужно вычислить заново учитывая напряжение питания Arduino UNO. Соедините контакт TX модуля SIM800L с контактом 10 цифрового сигнала Arduino UNO. Загрузите в ардуино программу, текст которой приведен далее. Здесь используется библиотека SoftwareSerial позволяющая реализовать последовательный интерфейс на любых цифровых выводах Ардуино с помощью программных средств, дублирующих функциональность UART.
#include
SoftwareSerial mySerial(10, 11); // RX, TX
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(9600);
mySerial.begin(9600);
}
void loop() // run over and over
{
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
{
while(Serial.available())
{
mySerial.write(Serial.read());
}
mySerial.println();
}
}
Текст программы и много полезной информации . Теперь вы можете отправлять AT команды через последовательный монитор Arduino.
На русскоязычных и зарубежных сайтах размещены тексты программ Arduino с помощью которых можно отправлять СМС, контролировать состояние контактов датчика и отправлять на сайт время изменения состояния контролируемых контактов, а на сайте сохранять принятые данные в виде журнала.