Рассмотрим как связать Адруино с GSM модулем SIM800L. Существуют GSM шилды специально для Ардуино, но по цене они достаточно дороги, потому решил приобрести бюджетный вариант. Статья может быть полезна так же для подключения модуля SIM900, NEOWAY M590, и некоторых сотовых телефонов. Неудобный нюанс в том, что этот модуль требует нестандартное для Ардуино питание 3.7В, поэтому запитывать пришлось отдельно через понижающий преобразователь напряжения.
Подключение
Для подключения я использовал следующие компоненты:
- Контроллер Arduino UNO R3 + USB кабель
- GSM модуль SIM800L (питание от 3.7В до 4.2В)
- Преобразователь напряжения понижающий (DC-DC step-down converter)
- Батарея 12В (или любой источник питания от 6В до 20В)
- Соединительные провода
Соединяем Ардуино с компьютером через 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, приходят непонятные строки. Пробовал в модуле сменить кодировки. Вопрос пока не решен.
как так?
Я все же побоялся спалить модуль который ждал месяц, и решил руководствоваться даташитом на модуль. TX модуля и RX ардуины соединил через резистор 1ком, а TX ардуины и RX модуля соединил через делитель 1ком + 1.2ком. Иначе с ардуины идет 5в что не есть хорошо. Теперь на ТХ и RX модуле как положено 2.8 вольт.
Все завелось с пол пинка на скетче в статье!
2. какой уровень сигнала в телефоне показывает (на модуле антенна может похуже быть)?
3. другого оператора симку попробовать.
2. Уровень в норме, а на модуле внешняя антенна
3. Ну, Билайна, МТС и Теле2, думаю, достаточно
У меня, кстати, два таких модуля. Один как в статье, другой поменьше. С обоими одно и то же.
Кстати, скидывал до заводских настройки модуля через АТ-команды. Это могло повлиять?
Вы как-то решили этот вопрос? У меня 2 модуля и оба не могут зарегистрироваться в сеть. С питанием все в порядке. Сами модули на АТ - команды дают отклик.
А лучше поперебегайте несколько раз туда-сюда...
на водителей не обращайте внимания, даташиты ведь не для нас...
там уровни сигналов 0-2,8В а у Ардуино 0-5В !!!
никаких мыслей не возникает?
потом не стоит задавать вопросов - почему мол не работает..
Не поделитесь скетчем как на фтп грузить через sim800l?
Поскольку промучался порядочно с таким же модулем,
очень рекомендую в void setup() добавить:
delay(2000); в самом начале
– примерно столько нужно времени gsm модулю, чтобы запуститься и быть готовым к командам после включения питания. Ардуино же стартует почти мгновенно.
Поэтому, если, например, послать какую-либо команду ДО того как модуль прогрузится – в serial.read интерфейсе можно увидеть всякие иероглифы и кракозяблики. Если же в этот момент отправить команду перевода модема в текстовый режим AT+CMGF=1 , то она просто не сработает и смс не будут отправляться.
---
А вообще спасибо большое автору :)
Зарядка от айпада или аналогичная 5 вольт 2 ампера.
Сначала питает ардуино, подключением к выходу 5v, затем через два последовательных толстых диода 1N5404 рассеиваем напряжение до примерно 4v и питаем модуль.
Может кто-то поможет?
void draw()
{
if ( myPort.available() > 0)
{ // If data is available,
val =myPort.readString();
if (val != null) {
println(val); //print it out in the console
output.println( val );
}
}
if (mousePressed == true)
{
myPort.write("ATI");
println("ATI");
}
}
Если кто сталкивался с такой проблемой и решил ее, буду очень признателен.
Люди добрые, у кого под рукой есть этот модуль, прозвоните, пожалуйста, вывод под аннтену относительно земли. А то у меня звонится короткое. Такого ведь не может быть.
Спасибо!
Встречная просьба: собрал схему сигналки с использованием arduino uno, pir sensor, SIM800L. Все хорошо работает. Экспериментирую со спящим режимом: перевожу в сон arduino, а по pin DTR модуль GSM (сеть не теряет, входящие звонки, смс принимает). Потом по наступившему прерывниям от pir сенсора или GSM модуля бужу всех обратно. Во сне arduino сама по себе ест 8mA, а SIM800L - 2mA. Но в собранном проекте arduino берет 20mA - получается подпитывает SIM800L. Собственно ищу почему так.
Может кто проверить. Что между пинами DTR и RI ? У меня коротыш.
А RI это что?
ng
Видимо, я замкнул при пайке, буду зачищать.
Может пояснить кто-нибудь следующую ситуацию. У меня модуль SIM800L Coreboard подключен к arduino по пинам rx, tx, reset, dtr, ring и общий gnd. Если первому подавать питание модулю, то видно как светодиод "on" на arduino тускло загорается, т.е. получается если бы напряжение было бы достаточное, то arduino завелась бы. И наоборот, когда при рабочей arduino отключить питание у модуля, то модуль продолжает работать, питаясь от arduino. Пин rx подключен через резистовый делитель, tx - резистор.
Нормально ли, что через сигнальные пины идёт взаимное питание arduino и модуля?
Вообщем, как уже здесь ни раз упоминалось: главное наладить стабилизированное питание и хороший контакт.
Порадовало, что модуль в режиме сна ест 1-2 мА и без проблем просыпается при входящих звонков или смс.
Мой проект GSM сигнализация: arduino pro mini 328P (без led power и стабилизатора во сне меньше 1мА) + датчик движения + SIM800l + аккумулятор 3,7v 1200mA = минимум 20 дней автономной работы.
Фотки и скетч в студию
Не подскажите, у меня на команду AT приходит не ОК, а какие то непонятные символы (да еще и русские). Не сталкивались с таким?
попробуйте, удивитесь.
И еще - нужен ли вариант модуля уже с питанием на борту и установленной микросхемой 328 с цепями согласования уровней?
это проблема питания.
низкий уровень сети и питание дергает сильнее, там нужно сетные 2А -4В. и ставить низкоимпендансную емкость 4700х6,3в..
Без них - НЕЛЬЗЯ!! а то что вы 5в тх рх подавали - так и спилить могли. у модуля внутренние линии 2,8в. !!! и вообще : читайте даташит, не нужно чепуху выдумывать и нести сюда. В даташите все описанои подробно, что нельзя, что можно и как требуется делать.
Предлагаю рассмотреть вариант как я работаю с номерами входящих звонков.
Если останутся вопросы - спрашивайте.
Ссылка:
https://cloud.mail.ru/public/7WsL/8jv34NMQz
Для модуля sim800 - не нужно иметь микросхему дтмф декодера. сим800 сам умеет дтмф принимать, примеры на раз ищутся в интернет.
По ссылке, которую я указал лежит файл со скетчем -полноценной программой приём входящих звонков с фильтрацией номеров. Там я каждую строчку прокомментировал.
Про DTMF не знал, что это уже есть в SIM800L, т.к. не было необходимости у меня в этом, но спасибо за подсказку, может понадобится.
Потом решил переделать проект, тра та та, собрал и... модуль перестал работать. То вроде бы включится, раза при моргнет и перестает, то раз шесть моргнёт и перестает. Не понимаю, провода позванивал, вроде бы норм. Что может быть? Ему явно что то не нравится. И еще вопрос. Если просто подать питание, он же должен работать? Регистрироваться в сети и тд.? Или должны быть подключены линии RX TX?
Пример сообщений модуля на плохое питание:
if Vcc voltage is = 4.4V:
OVER-VOLTAGE POWER DOWN
И для проверки
выбросите бубен в мусорку и возьмите паяльник в руки:
там завышено напряжение питания, в порт кричит "андер вальтаж..." и три раза мигнет и выключится..
Запросы AT отвечают, но в ответах лишние символы в виде буковок "я".
Скорость с модулем менял, сами модули менял, компьютеры менял. Кто то сталкивался?
Test
AяTя - это ответ AT
я
я
яOяKя
я
яAяTI
я
я
SIяMя8я00 яRя1я4.1я8я - Это название модуля
я
яOяK
По описанию arduino uno максимум может отдать 50mA.
Скорее всего сгорел стабилизатор напряжения на ардуинке, сам sim800l модуль должен работать.
Что Вам мешает для начала повторить приведённый здесь пример подключения от внешнего источника питания?
Получится ли восстановить???
это скорее Кашпировскому вопрос нужно задать.
Но я вам отвечу - в мусорку... даташиты читайте внимательно, потом приборы включайте.
Goodnight moon!
AT
OK
AT
O›
ATI
ЄRS‚‚’љrЃВj
OK
AT
OK
ATI
ЄRS‚‚’љrЃВj
OK
ATICЎЄRS‚‚’љr‚Вj
OK
ATI
SIM800 R11^08
все сделал как по схеме, отдельное питание от аккумулятора 4.0в(пробовал и 3.7) , tx подключил через резисторный делитель напряжения(1500ом и 1150ом) скорость 115200 (на других скоростях вообще одни иероглифы). Пробовал на разных выходы и разных ардуино уно...
Читайте больше немного чем просто скетч вставить из интернета и все.
1) софтвер сериал выше 57600 глючит
2) уменьшите до 9600 и еще лучше обойтись без софтвер сериал..
как? -читайте в интернет
уважаемый, для начала разберитесь как работает софтвер-сериал который вы наверняка используете, уточните размер буфера и т.д. Вы наверняка пихаете туда все подряд без остановки, без считывания ответа и потом удивляетесь такому результату. Модуль даже переживать не успевает как вы ему новое заталкиваете. Вот буфер и переполняется.
естественно будут проблемы и неработоспособность модуля и глюки..
ага, делей ставили?, и думаете что во время делей проц команды и отсылает и принимает?? ага... ну-ну..
AT+CMGF=1
OK
AT+IFC=1, 1
OK
AT+CB
На этом процесс установочных команд закончен. В чем кроется ответ ума не приложу. Менял преобразователь не помогло. Может кто сталкивался?
Код в студию...
AT&W что говорит?
Пробовал проверить работоспособность своего SIM 800 L через ардуино уно по схеме выше в сериал порте тишина и скорость разную задовал и общий ноль с ардуино и питание разное отдельное давал от 3,7 v- 4.2v
Попробовал просто подать питание от батареи телефона на 3,7 V вначале светодиод на SIM 800 L моргает часто ищет сеть видимо но через несколько секунд начинает мигать реже; 7 раз моргнет пауза потом опять 7 раз пауза ... дозвон на вставленную сим не проходит .Хотя изначально когда купил проверял таким же способом гудки проходили и светодиод моргал без паузы !
Подскажите может кто знает или сталкивался что может означать такое мигание светодиода
RDY
+CFUN: 1
+CPIN: READY
(происходит это раз в 3-5 секунд)? И пока происходит ожидание нового вывода этой информации, через терминал невозможно передать никакие команды. Они просто теряются. Сами команды выдают ответы только когда происходит очередной вывод информации.
Такое ощущение, что SIM800L чем-то нагружен и только в свободные промежутки времени он воспринимает команды.
И вторая проблема: похоже, что модуль не регистрируется в сети оператора. Хотя симка абсолютно рабочая в мобильном телефоне и не требует ввода PIN номера. Что здесь можно сделать? Надо ли как-то перепрошивать сам SIM800L? Или какой АТ командой заставить модуль зарегистрироваться в сети оператора?
Всем заранее спасибо.
и ещё 100 мкф непосредственно на ногу питания
- стал ловить сеть :)
Надо будет получше блок питания поставить китайские 2A это, похоже не совсем 2A
А так, в принципе, модуль sim800L - Хорош!, но с точки зрения приема сигнала - нужна антенна, может самому сделать не на 3db, а на больше или на али поискать
Подключайте линию RX через делитель напряжения