Sim800l подключение к arduino. Подключение GSM модуля SIM800L к Arduino. Пример реализации подключения gsm модуля sim800l к мк esp8266

Модуль 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 с помощью которых можно отправлять СМС, контролировать состояние контактов датчика и отправлять на сайт время изменения состояния контролируемых контактов, а на сайте сохранять принятые данные в виде журнала.

Всем привет! Давненько мы с вами не говорили про GSM. И так, начнем. Глубокоуважаемые Китайцы забацали новый бюджетный модуль под названием SIM800L. Да, да, этот модуль выпускает ихняяя же фирма SIMCOM. Я по началу боялся его тестить, мол на просторах России его нет и нет гарантии что данный модуль снюхается с нашими сетями. Заниматься перепрошивкой от другого модуля я не хотел, но мне просто чудесно повезло убить двух тараканов одним тапком. Я совсем забыл о замечательном магазине ЧипРезистор который с радостью мне предоставил данный модуль на растерзание.
Вот как выглядит это чудо.

Не густо, на плате установлен сам модуль, держатель для микросим, тантал, пару керамики, резистор и светодиод. Как ни странно Китайцы позиционируют данный модуль как шилд для Ардуины. Ардуина вроде как питается от 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 #include "main_init.h" #include "axlib/usart.h" #include "sim800l.h" Теперь переходим в наш созданный файл и впишем туда нужные нам дефайны. // Первая команда, овет OK #define SIM800L_AT_AT "AT" // Команда на ввод номера абонента для отправки ему SMS сообщения #define SIM800L_AT_SMS "AT+CMGS=\"" // Настройка формата покета #define SIM800L_AT_SMS_SET "AT+CMGF=1" Такс, дефайны для упрощения записали, теперь пишем сложную функцию инициализации. void sim800l_init(void) { usart_str_rn(SIM800L_AT_AT); } Вся сложность данной функции заключается в том, что мы просто передаем команду АТ модулю. С этой команды должен начинать работать модуль. Следующая функция немного посложнее. BYTE sim800l_send_sms(BYTE *num, BYTE *text, BYTE lenght) { // Массив для получения ответов от модуля BYTE str = {0}; _delay_ms(1000); // Настройка режима передачи usart_str_rn(SIM800L_AT_SMS_SET); // Подача номера телефона абонента usart_str_out(SIM800L_AT_SMS, 9); usart_str_out(num, 12); usart_str_rn("\""); // Ожидание начала ввода текста _delay_ms(3000); // Отправка текста usart_str_out(text, lenght); str = 0x1A; str = 0; usart_str_rn(str); // Ждем OK usart_str_in(str, 18); if(!((str == 0x4F) & (str == 0x4B))) return 0x34; return 0x30; } Вот тут я понял всю сущность дешевизны данного модуля. Эта фиговина напрочь отказывалась стабильно возвращать ответы. Как я только не извращался, и ставил таймауты по приходу данных гигантские, и задержки лепил. Короче плюнул на те ответы что плавали во времени и натыкал задержек. Для работы это не сильно мешает. Платим за дешевизну. Поехали по функции. Первым делом тыкаем настройку передачи пакета. Это нужно чтобы модуль отправлял данные получив номер телефона, а затем ожидал принятия текста. Затем передаем номер телефона абонента которому отправляем SMS. Берем его из аргумента данной функции. Есть одно но! Номер телефона должен иметь формат вида: +79161234567. +7 обязательно, этот модуль в отличии от 900-тых не понимает 8. После передачи номера абонента просто тупим 3 секунды. Все это время модуль не спеша пережевывает номер и по хрен знает какому алгоритму, как раз на этих задержках я подорвался, выдает нам приглашение на ввод текста значком > 3 секунд железно хватает пережевать и выплюнуть приглашение. После 3 секунд кидаем текст сообщения. Его так же берем из аргумента данной функции и от туда же длину текста для функций UART. Ведь мы не знаем сколько буковок вы собираетесь послать. Если внимательно присмотреться, то можно заметить байт 0x1A в конце текста сообщения. Это команда Ctrl+Z нужна для окончания передачи текста. Когда модуль получит эту команду, то все бросит и передаст SMS. Все, с данным файлом закончили, переходим в основной файл программы. #define BUTTON_1 "Nazhata knopka 1" #define BUTTON_2 "Nazhata knopka 2" // Инициализация GSM модуля sim800l_init(); // Настройка портов ввода вывода на чтение DDRB = 0x00; // Включаем подтяжку внутренним резистором PORTB |= (1 // Если нажали кнопку 1 if(!(PINB & (1 // Ждем пока не отпустили кнопку while(!(PINB & (1 // Если нажали кнопку 2 if(!(PINB & (1 // Ждем пока не отпустили кнопку while(!(PINB & (1 Что мы тут видим. Два дефайна с заранее подготовленным текстом. Затем мы инициализируем модуль. Затем настраиваем ножки 2 и 3 порта В на вход и подтягиваем внутренний резистор к плюсу питания. Затем в бесконечном цикле проверяем на нажатие кнопок. Как только какая-либо из кнопок будет нажата, сразу вваливаемся в бесконечный цикл и ждем пока не отпустят кнопку. После того как кнопку отпустили вызываем функцию отправки SMS с заранее продефаненым текстом. Вот и все.))) Проект выкладывать не буду так как его можно сгенерить axlib генератором и скопипастить текст отсюда. Ой, да, вот что я получил на телефон.))


Фыва 09.10.16 23:29

Если верить mt-system, то 800 серия это приемник 900 серии, которую якобы сворачивают к концу 2016 года. Поэтому довольно странно читать о таких досадных косяках как зажатые ответы.
может чего в датишах нового завелось? Или ты чисто по аналогии с 900 кидал команды, особо не раскуривая?

Алексей 09.10.16 23:39

Меня эти паузы насторожили еще когда я с ней общался через терминал. Думал порт тормозит, но на ноуте та же песня.

Юрий 05.03.17 20:36

Подскажите как заставить модуль, по запросу USSD отправлять баланс,считывать и устанавливать на ножках Avrки уровнь. В общем хочется сделать "Умный дом" Спасибо

Алексей 06.03.17 12:36
Олег 28.03.17 02:43


передаётся \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 ?

Алексей 28.03.17 12:33

--> Что делает символ /" тут
Символ \ ставится перед служебными символами для того чтобы эти символы превратить в простые. Дело в том что двойная кавычка это служебный символ. Его используют чтобы передать строку в массив. А для того чтобы компилятор прочитал именно как символ, то перед служебными символами ставят обратную косую черту.
Пример:


BYTE data = "Какой-то текст \"Текст в кавычках\"";

Теперь внутренние кавычки запишутся в массив как символы.

--> почему нельзя разом usart_str_rn (AT+CMGS="+7xxxxxxxxxx") , как в терминале?

Потому что функция принимает в качестве аргумента указатель на первый элемент массива с номером абонента. Если написать сразу, то SMS будут высылаться вечно только этому абоненту. И изменить можно будет лишь переписав код.

--> Разъясните пожалуйста. Для чего в функции usart_str_rn
передаётся \n

Потому что документация на модуль SIMCOM требует в конце команды вводить код конца строки и перевода каретки.

Олег 28.03.17 14:05

Спасибо, Алексей это осознал, имею проблему с передачей 1А, в таблице служебных символов нет комбинации с \... .

Алексей 28.03.17 15:04

А как должен выглядеть символ Ctrl+z? Или например пробел, табуляция. Поэтому передается именно кодом. Например \r\n можно записать как два байта 0x0D, 0x0A. Это одно и тоже.

Олег 28.03.17 16:59

Это я понял, коммада отправилась вот так


str = 0x4D;
str = 0x4B;
str = 0x4D;// три буквы текст для теста.
str = 0x1A;
str = 0;
usart_str_rn (str);
, текст наверно могу строкой, но 1А получается только через массив, как-то проще нельзя?

Алексей 28.03.17 17:14

void usart_char_out (BYTE data)

Просто посылает один байт в порт.

Евгений 07.05.17 17:47

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 ?

Алексей 07.05.17 20:05

А вот такой я валенок. Массив не на 10 ячеек, а на 20)))

Евгений 08.05.17 20:13

Бывает)) Так и понял что опечатка. Начал свой код писать, взял за основу и просто сразу увидел

Алексей 08.05.17 21:34

Советую лучше использовать SIM800C вместо L. Те же деньги но у C есть синезуб в модуле.

Евгений 12.05.17 06:43

Да, у меня как раз 800C модули. Алексей, после выполнения чтения, в str пусто, в чем может быть проблема? Команды на модуль уходят и модуль отвечает (проверено лог.анализатором), но в str пусто
// Ждем OK
usart_str_in(str, 18);
if(!((str ==

Евгений 12.05.17 18:57

Алексей. Разобрался в чем проблема, в функции 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;
}
А как быть если не известно какой длины придет ответ?

Алексей 12.05.17 20:03

Опрашивать буфер на прием больше одного байта, а потом подождав вычитать весь пакет из буфера.

Евгений 12.05.17 20:21

Алексей, не совсем понял идею, поясни плз

Алексей 12.05.17 20:58


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 лежат все принятые байты.
}
}
}

Евгений 12.05.17 21:25

Алексей, спасибо, идею понял наглядно, буду пробовать. Еще хотел спросить про два слейва и мастер, по поводу потери связи при сдергивании линии, не пробовал макетировать?

Алексей 12.05.17 22:18

Пока нет. Очень много работы. Я вообще из-за нее подзабил на сайт.

Олег 08.07.17 23:28

Алексей, расскажите как согласовать уровни если мк питается 5в а модуль 3,3в? На али нашел модуль питания KIS-3R33S, он имеет управление выходом, есть ли смысл затевать перезагрузку SIM модуля снятием питания или хватит резета и вывода включения модуля?

Алексей 09.07.17 12:28

Во первых для согласования с модулем нужно не 3,3в, а 3в. Для этого достаточно поставить резистивный делитель, где RXD МК будет на входе резистора верхнего плеча, а резистор нижнего плеча подключен к общему сигналу.
Во вторых. Затевать перезагрузку передергиванием питания можно если модуль завис. Если модуль работает, то это категорически нельзя, та как это может привести к убиванию прошивки в модуле. Рестарт нужно делать передергиванием ножки PWR или АТ командой.

Олег 09.07.17 12:44

Спасибо, по первому всё понятно.
По второму, такой жесткий резет и планируется если модуль не отвечает и дергание rst и pwr не даёт результата,к стати есть pcb модулей без pwr или без rst, вопрос а как прошивка при выключении питания всего устройства, есть рекомендации?

Алексей 09.07.17 14:48

Это китайский баг. Подпаиватся к контактам. Китайцы особо не парятся, они даже питание не всегда реализовывают правильно. Лишь бы было дешево.

Олег 09.07.17 15:05

А когда модуль повис что вначале дергать pwr или rst, и если пвр и резет не помогает как правильно по питанию передернуть?

Алексей 09.07.17 19:29

Если завис наглухо, то просто снять питание секунды на три. А потом подать и проинициализировать по правилам.

Игорь 12.09.19 19:21

Подскажите как передать номер бз кавычек модем MC52i
// Подача номера телефона абонента
usart_str_out(SIM800L_AT_SMS, 9);
usart_str_out(num, 12);
usart_str_rn(""");

ESP8266 стал настоящей новостью прошлого года для всех, кто занимается созданием девайсов на Ардуино. Дешёвый микроконтроллер, с возможностями, превышающими его дорогостоящий аналог, и при этом совместимый с АТ+.

Ардуино не остались за бортом, и теперь данный модуль официально добавлен в списки поддерживаемых платой, а соответственно, всё больше пользователей приобщится к китайскому мк для wi-fi соединения. Но бывает, что в системе необходимо отслеживать и местоположение модуля, для чего одной платы esp8266 будет недостаточно. Здесь и пригодится esp8266 sim800l.

Для смарт-домов и множества поделок требуется получать уведомление о местоположении платы, будь то дистанционная дверь или обычный трекер. Вот лишь краткий список поделок, которые можно создать, совмещая esp8266 sim800:

  1. Умный дом. Практически любую технику для умных домов можно настроить на определённые патерны при приближении объекта. Но зачем устанавливать датчики движения, если можно просто прикрепить в wi-fi плате sim800, вшить в какой-то предмет одежды мк с аккумулятором (благо, много энергии не потребуется) и автоматически включать свет или открывать дверь при приближении пользователя.
  2. Разнообразные отслеживающие устройства. Речь не идёт о противозаконных жучках и прочих устройствах, нарушающих ваше право на неприкосновенность. Однако мк может работать отдельно от ардуино, а если к нему прикрепить sim800, общие размеры устройства не превысят спичечный коробок. Просто оберните всё в металлический корпус и прикрепите к ключам, в качестве брелока. Отныне найти смартфон, ключи и даже вашу машину на парковке будет в разы проще.
  3. Робототехника и смежные направления. Здесь можно долго говорить о развитии современного виртуального интеллекта и нейросетях, но зачастую, чтобы создавать карту местности и ориентироваться в ней, железякам недостаточно датчиков. И если вы занимаетесь чем-то подобным, то gps модуль пригодится. Особенно он удобен в паре с дронами.

Когда вы определитесь с конечной целью проекта, следует разобраться в нюансах вопроса. Подключение устройств к вышеназванному микроконтроллеру такое же, как у стандартных плат ардуино, разница лишь в количестве доступных пинов. GPS трекер требует для работы от 3.7 до 4.2 вольт, в отличие от стандартных 5, выдаваемых микроконтроллером. Это следует учитывать при построении схемы платы и соответствующе подбирать вспомогательные источники питания. Либо устанавливать трансформаторы и резисторы, в зависимости от того, что вы ещё будете подсоединять к конечной системе.

Регистрируясь в сети, модулю потребуется приблизительно 2А, но это его пиковое потребление и в дальнейшем необходимая сила тока снизится до 1-1.2 А.

Как только вы подключите трекер к системе, необходимо будет его запустить и отправить первые команды, лучше всего подойдут АТ и АТ+. Только после этих действий модуль, наконец, начнёт посылать данные и отвечать на ваши запросы, поэтому не стоит беспокоится, если вы его подсоединили, диод мигает, но никаких реакций на скрипты нет. Вам просто необходимо активировать Sim800i при первом использовании, чтобы он успел зарегистрироваться в сети.

Также не стоит рассматривать Sim800i, как альтернативу ESP8266, чем грешат многие пользователи на форумах. Если вы натыкались на подобные заявления, можете смело утверждать, что автор в жизни не работал с ардуино. В первую очередь, сравнивать вспомогательную плату и микроконтроллер – бессмысленно. Не говоря уже о том, что одно из устройств создано для координации, отправки и принятия запросов по беспроводному интернету, а второе является GSM GPRS модулем. Соответственно, они являются хорошим дополнением друг к другу, но никак не альтернативой.

Схема подключения sim800l к esp8266

Распиновка более чем стандартная. Пин с питанием подключаете к источнику, способному выдавать напряжение в пределах 3.7-4.2 Вольт, или же к трансформатору. TX идёт к RX пину и наоборот. Как только вы выполните спайку и решите протестировать работу модуля, подключив источник питания, о правильности подключения просигнализируют диоды. Далее остаётся активировать модуль по описанному выше методу, и вы сможете использовать АТ-команды для управления. Если захотите подгрузить вспомогательную библиотеку или какие-то весомые медиа, стоит ознакомиться с подключением карты памяти к системе Ардуино.

Для начала давайте протестируем скорость работы порта и информацию о модуле, для этого воспользуемся «AT+IPR?» и «AT+CPAS» соответственно. Если всё в порядке и информация выводится без ошибок, то можно продолжить проверку и протестировать уровень сигнала, а также операторов, которых может увидеть модуль.

Самое главное – Sim800i позволяет звонить на указанные номера и принимать звонки, притом с помощью базовых библиотек.

Это также открывает простор для применения систем с его участием. Если вы захотите написать определённый скрипт, запускающий что-либо по входящему звонку, то учитывайте, что модуль реагирует на него фразой «RING» в командной строке.

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

Пример реализации подключения gsm модуля sim800l к мк esp8266

После подключения и спайки по вышеописанным пинам, модуль должен начать мигать. Как только произойдёт аутентификация в сети, диоды станут реже моргать.

Если уменьшение частоты световых сигналов не произошло, то стоит, при помощи АТ-команд, удостовериться, воспринял ли вообще sim800I сеть вашего мобильного оператора и нет ли никакой ошибки. Также проверьте правильность распиновки и как установлена СИМ-карта с антенной, ошибка может быть и в них.

Ну и, конечно, поднесите систему ближе к окну, если находитесь в многоэтажном здании, вполне возможно, она просто не может поймать сигнал.

Рассмотрим как связать Адруино с GSM модулем SIM800L. Существуют GSM шилды специально для Ардуино, но по цене они достаточно дороги, потому решил приобрести бюджетный вариант. Статья может быть полезна так же для подключения модуля SIM900, NEOWAY M590, и некоторых сотовых телефонов. Неудобный нюанс в том, что этот модуль требует нестандартное для Ардуино питание 3.7В, поэтому запитывать пришлось отдельно через понижающий преобразователь напряжения.

Подключение

Для подключения я использовал следующие компоненты:

  1. Контроллер Arduino UNO R3 + USB кабель
  2. GSM модуль SIM800L (питание от 3.7В до 4.2В)
  3. Преобразователь напряжения понижающий (DC-DC step-down converter)
  4. Батарея 12В (или любой источник питания от 6В до 20В)
  5. Соединительные провода

Соединяем Ардуино с компьютером через USB кабель.

Даем питание к GSM модулю от батареи 12В через преобразователь:

  • от 12В "минус" идет на ардуино в "GND", от "GND" в преобразователь напряжения во "входящий минус".
  • от 12В "плюс" идет в преобразователь напряжения во "входящий плюс".

Возникает вопрос: можно ли подать питание от самой Ардуино от 5В? Напрямую не рисковал бы. Но можно подобрать диод или стабилизатор напряжения.

Перед подключением к преобразователю напряжения необходимо его настроить выставив выходное напряжение на любое в диапазоне 3.7В - 4.2В. От преобразователя напряжения выходящие контакты подключаем к GSM модулю, соблюдая полярность.

TX и RX контакты на GSM модуле соединяем с 2 и 3 цифровыми контактами на Ардуино. Если необходимо подключить несколько GSM модулей к Arduino, то используйте другие пины и прописывайте в скетче через SoftwareSerial.

Скетч

#include <SoftwareSerial .h> SoftwareSerial mySerial(2, 3); // RX, TX void setup () { Serial .begin (19200); //Скорость порта для связи Arduino с компьютером Serial .println ("Goodnight moon!" ); mySerial.begin (19200); //Скорость порта для связи Arduino с GSM модулем mySerial.println ("AT" ); } void loop () { if (mySerial.available ()) Serial .write (mySerial.read ()); if (Serial .available ()) mySerial.write (Serial .read ()); }

Процедура для отправки СМС

void sms (String text , String phone ) { Serial . println ("SMS send started" ) ; mySerial . println ("AT+CMGS=\"" + phone + "\"" ) ; delay (1000 ) ; mySerial . print (text ) ; delay (300 ) ; mySerial . print ((char ) 26 ) ; delay (300 ) ; Serial . println ("SMS send finish" ) ; delay (3000 ) ; }

Процедуру добавлять в конец скетча и вызывать её из основного цикла так: sms(String("текст СМС на англ."),String("+791212345678"));

Проверка

Включаем питание затем через монитор порта, выставив скорость 19200 и обязательно опцию "новая строка".

Вводите команду "ATI" и нажмите ENTER. Должна появиться информация от модели модуля.

Пробовал отправить на модуль СМСку через бесплатный сервис от Теле2, приходят непонятные строки. Пробовал в модуле сменить кодировки. Вопрос пока не решен.

Видео