Какую статью добавить следующей?

Статья для тех, кто хочет заставить Arduino отправлять СМС  через данный GSM модуль. Модуль NEOWAY M590 на базе чипа SIM900 подойдет для создания самодельной сигнализации, умного дома. Существует также альтернативный GSM модуль подключаемый напрямую к Arduino через 5 Вольт: Sim800L EVB v2.0

Постановка задачи

  • Используя только Arduino и GSM модуль управлять светодиодом посредством звонка с телефона.
  • Отправлять СМС (пока через команду поступающую через монитор порта в Arduino IDE)

 

Подключение к Arduino

Соединяем GSM модуль с Arduino.
5В модуля -> 5V Arduino
GND модуля -> GND Arduino
ТХ модуля -> digital pin2 Arduino
RX модуля -> digital pin3 Arduino
Распиновку можно посмотреть на фото. Порядок контактов такой: 1 - +5В, 2 - GND, 7 - TX, 8 - RX.

neoway m590 pins


Соединение NEOWAY M590 к АрдуиноСоединение NEOWAY M590 к Ардуино

Запитать модуль можно от 4В до 5В, я использовал 5 вольтовый выход.

Модуль требует отдельного питания, потому что потребляет в пике до 2А. Конденсатор скорей всего не спасет. Поэтому при запитке от Ардуино может не работать или глючить.

Землю Ардуино и модуля GSM при раздельном питании надо соединить, но сначала нужно мультиметром замерить напряжение между этими "землями". Некоторые компьютерные блоки питания имеют перепад потенциала на корпусе и земле USB до 100В. Ток там мизерный и убить не может, но уничтожить Ардуино или модуль GSM или то и другое вместе - запросто.

 

Скетч

#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX
int ch = 0;
int led = 13;
String val = "";

void setup() {
delay(2000); //время на инициализацию модуля  pinMode(led, OUTPUT);  digitalWrite(led, LOW);  Serial.begin(9600);  //скорость порта  Serial.println("GSM tester v1.0");  mySerial.begin(9600);  mySerial.println("AT+CLIP=1");  //включаем АОН  delay(100);  mySerial.println("AT+CMGF=1");  //режим кодировки СМС - обычный (для англ.)  delay(100);  mySerial.println("AT+CSCS=\"GSM\"");  //режим кодировки текста  delay(100); } void loop() {  if (mySerial.available()) {  //если GSM модуль что-то послал нам, то    while (mySerial.available()) {  //сохраняем входную строку в переменную val      ch = mySerial.read();      val += char(ch);      delay(10);    }    if (val.indexOf("RING") > -1) {  //если звонок обнаружен, то проверяем номер      if (val.indexOf("71234567890") > -1) {  //если номер звонящего наш. Укажите свой номер без "+"        Serial.println("--- MASTER RING DETECTED ---");        mySerial.println("ATH0");  //разрываем связь        digitalWrite(led, HIGH);  //включаем светодиод на 3 сек        delay(3000);        digitalWrite(led, LOW);  //выключаем реле      }    } else      Serial.println(val);  //печатаем в монитор порта пришедшую строку    val = "";  }  if (Serial.available()) {  //если в мониторе порта ввели что-то    while (Serial.available()) {  //сохраняем строку в переменную val      ch = Serial.read();      val += char(ch);      delay(10);    }    //mySerial.println(val); //передача всех команд, набранных в мониторе порта в GSM модуль    if (val.indexOf("sendsms") > -1) {  //если увидели команду отправки СМС      sms(String("hello world"), String("+71234567890"));  //отправляем СМС на номер +71234567890    }    val = "";  //очищаем  } } void sms(String text, String phone)  //процедура отправки СМС {  Serial.println("SMS send started");  mySerial.println("AT+CMGS=\"" + phone + "\"");  delay(500);  mySerial.print(text);  delay(500);  mySerial.print((char)26);  delay(500);  Serial.println("SMS send complete");  delay(2000); }

 

Проверка

  1. Подключаем Arduino (с подключенным к нему сотовым модулем) к компьютеру
  2. Заливаем скетч
  3. Открываем монитор порта и если все в порядке, то увидим следующую картину
    port1
  4. Пробуем сделать звонок с номера телефона, который прописали в скетче. На плате Ардуино включится светодиод на 3 секунды и в мониторе порта видим реакцию:
    port2
  5. Пробуем отправить СМС. Для этого набираем в мониторе порта текст sendsms и, если денег на счете достаточно и отправка оператором разрешена, то должно все получиться и увидим следующую картину:
    port3
    При успешной отправке выводится строка +CMGS: 13 (цифра 13 – порядковый номер исходящего сообщения, значит успешно ушло)

Дальше сами экспериментируйте. Можно подключить любой датчик (температуры, движения, влажности и т.д.) и при достижении отпределенного значения отправлять СМСку или делать звонок хозяину.

 

GPRS

В рассматриваемой версии модуля 1.30 поддержка GPRS урезанная. Мне не удалось подключиться к серверу по его DNS имени (например mysite.ru), получилось только по IP-адресу. В другом модуле SIM800L таких проблем не было.

 

Перечень некоторых AT команд:

AT+CMGF=1 Вкл. текстового режима (смс только латиницей)
AT+CSCS= "GSM" Вкл. режима
AT+CLIP=1 включение определения номера входящего звонка
Если отправить команду с 0, то определение номера отключится и модуль вместо номера вызывающего будет слать только сообщение "RING".
AT+CMGS="+79123456789" Отправка СМС
ATI Получить информацию об устройстве
AT+IPR=19200 настройка скорости порта
AT+GSN вернет IMEI модуля
AT+CCLK? считываем время с модуля
AT+CCLK=«yy/mm/dd,hh:mm:ss+zz» где по порядку идут  «год/месяц/дата,час:минуты:секунды+часовой пояс»  Данные обязательно отправляются с ведущими нулями, то есть, к примеру, если месяц у нас "4", то отправить должны "04". 
Получить обратно текущие время и дату можно отправив ту же команду, только со знаком "?":
AT+CMEE=0 уровень информации об ошибке. Может быть от 0 до 2.
0 - отключено. Будет просто писать ERROR.
1 -  код ошибки. Будет возвращать цифровой код ошибки.
2 -  описание ошибки. Напишет что именно ему не нравится в команде.
Для работы с модулем через терминал удобней режимы ATV1, ATE1 AT+CMEE=2, для общения с микроконтроллером лучше использовать ATV0, ATE0 и AT+CMEE=0 - так проще будет обрабатывать полученные ответы.
 Данные настройки не сохраняются после перезагрузки модуля, поэтому необходимо включать эти команды в код программы. 
AT+CSQ информация о качестве сигнала.
Модуль вернет два числа +CSQ: 17,0
17 - уровень сигнала. Может быть в диапазоне 0..31 или 99. Чем больше тем лучше, но 99 значит его отсутствие. 
0 - коэффициент ошибок связи (т.н. RXQUAL). Может быть от 0 до 7, чем число меньше тем качество связи лучше.
AT+COPS? информация об операторе, в сети которого зарегистрирован модуль
ATD+79121234567; набор номера. (";" обязательно)
Модуль позвонит по указанному номеру и вернет один из вариантов
BUSY - номер занят
NO DIALTONE - нет сигнала на линии
NO CARRIER - нет сети или другая проблема (например, нет денег на счету)
NA ANSWER - нет ответа 
CONNECT - есть контакт!
AT+CMGR=3,0 (3-номер сообщения, которое хотим прочитать, 0-изменить статус сообщения на прочитанный)
Комментарии  
0 # Иван 25.12.2015 12:20
Подскажите пожалуйста, а как сделать не сколько разрешенных номеров? Чтоб например с 3 разных номеров зажигался светодиод.
Ответить | Ответить с цитатой | Цитировать
0 # Олен 25.12.2015 12:23
:-) скопипастить либо процедуру сваять.
Ответить | Ответить с цитатой | Цитировать
0 # физ 25.12.2015 12:25
Поменять строку
if (val.indexOf("71234567890") > -1) {
на
if (val.indexOf("71234567890") > -1 || val.indexOf("79084567890") > -1 || val.indexOf("72277567890") > -1) {
знак двойной палки "||" - это "ИЛИ"
Ответить | Ответить с цитатой | Цитировать
0 # Иван 25.12.2015 17:11
а можно какой нибудь массив создать с базой номеров и искать нужный номер в массиве? какой тип массива использовать?
Ответить | Ответить с цитатой | Цитировать
0 # Роман 12.01.2016 17:22
А где взять такие провода?))
Ответить | Ответить с цитатой | Цитировать
0 # физ 12.01.2016 18:18
Можно в старом компьютере отковырять, можно у нас заказать (2150692.ru/product/view/14/56)
Ответить | Ответить с цитатой | Цитировать
0 # Роман 16.01.2016 18:08
Спасибо, все работает) :lol: а можно как нибудь сделать чтобы модуль сам звонил на указанный номер? И точно так же про выход в интернет, моя версия поддерживает gprs
Ответить | Ответить с цитатой | Цитировать
0 # сергей 20.01.2016 01:28
Всем привет!Может кто знает как отправить сообщение на русском языке? :-)
Ответить | Ответить с цитатой | Цитировать
0 # сергей 20.01.2016 01:30
Всем привет!может кто подскажет как отправить смс на русском языке?
Ответить | Ответить с цитатой | Цитировать
0 # Олег 21.01.2016 12:02
Покажите пожалуйста какой нибудь пример подключения датчика температуры. Что то разобраться не могу
Ответить | Ответить с цитатой | Цитировать
+3 # radioman 25.02.2016 13:22
Доброго дня, а подскажите корректно ли у Вас работает схема без преобразователя уровня TTL? В датише по M590E на 18 странице даже схема есть для 5V микроконтроллеров...
Ответить | Ответить с цитатой | Цитировать
+3 # Алексиус 30.03.2016 02:18
Скетч не полный) На счет смс:
В сетапе:
mySerial.println("ATE1");
mySerial.println("AT+CNMI=2,2");//если вместо "RING" написать "+CMT" то будет проверять не звонок, а смс с указанного телефона
В функции отправки смс:
mySerial.println("AT+CMGF=1");
delay(100);
mySerial.println("AT+CSCS=\"GSM\"");
delay(100);
Serial.println("SMS send started");

----
Иначе не отправит смс)
Ответить | Ответить с цитатой | Цитировать
0 # Александр 03.11.2016 17:39
fа у меня скейч ошибку компиляции бъёт
Ответить | Ответить с цитатой | Цитировать
+3 # mummykbf 08.11.2016 04:46
Господа, добрый вечер.
Подкиньте кусочек кода как из считанного времени с модуля по команде AT+CCLK? присвоить объявленным переменным hour и minute часы и минуты соответственно?
Ответить | Ответить с цитатой | Цитировать
0 # Вова 03.12.2016 22:14
Как известно Arduino Nano имеет лишь один Serial подключенный к выходам(пинам) D0(30) (RX) и D1(31) (TX). И через этот Serial подключен внутренний UART-USB(FT232RL) через который мы с помощью компьютера записываем прошивку. Но вот беда когда я хочу одновременно работать с вторичным устройством через TTL и делать отладку прошивки.

Один из вариантов решить проблему:
SoftwareSerial на другие порты
В скече создаем свой Serial_2 и пользуемся им как обычно.
Код:
#include

SoftwareSerial Serial_2(11, 12); // RX, TX

void setup()
{
Serial.begin(57600); // стандартный

Serial_2.begin(4800); // новый на другой скорости
Serial_2.println("Hello, world?");
}

void loop()
{

}
Ответить | Ответить с цитатой | Цитировать
+1 # nig 09.12.2016 19:50
спасибо. из всего, что прочитал за неделю самое понятное. заработало сразу в тестовом режиме.
Ответить | Ответить с цитатой | Цитировать
0 # iron 11.12.2016 16:03
Скажите пожалуйста, как прописать несколько номеров в этом месте:
if (val.indexOf("RING") > -1) { //если звонок обнаружен, то проверяем номер
if (val.indexOf("71234567890") > -1) { //если номер звонящего наш. Укажите свой номер без "+"
Ответить | Ответить с цитатой | Цитировать
+3 # физ 11.12.2016 17:50
Во вторую строку через оператор ИЛИ (две вертикальные палки ||) дописать проверку второго номера:
if (val.indexOf("71234567890") > -1 || val.indexOf("79125656565") > -1) { //
Ответить | Ответить с цитатой | Цитировать
0 # iron 11.12.2016 18:19
Спасибо большое- всё заработало как надо.
Ответить | Ответить с цитатой | Цитировать
0 # Евгений 17.12.2016 00:57
Доброго времени суток! Господа!.
при компиляции скетча постоянно ругается на строчку:
sms(String("hello world"), String("+71234567890"));
""exit status 1
'sms' was not declared in this scope"".
Если её (строчку блокировать) то работает, но смс-ку не отправляет.
Подскажите, в чём касяк
Ответить | Ответить с цитатой | Цитировать
0 # Евгений 18.12.2016 23:55
Кажется разобрался
Ответить | Ответить с цитатой | Цитировать
0 # Александр 12.01.2017 19:47
Евгений, ну и как вы разобрались? У меня аналогичная проблема.
Ответить | Ответить с цитатой | Цитировать
0 # Евгени 12.01.2017 20:10
Перед компиляцией создаю каждый раз новый скетч, с копированием туда старого, и так далее. Иногда не хватает или лишний знак окончания цикла { или }.
Ответить | Ответить с цитатой | Цитировать
0 # андрей 18.12.2016 20:12
подскажите пожалуйста скетч работает только при подключении к ПК и открытии монитор парта. Как только сбрасываешь питание и подкл.внешний источник перестает работать.Даже если подключаешь по USB к ПК не работает, пока не откроешь монитор порта и вуаля все снова работает
Ответить | Ответить с цитатой | Цитировать
0 # Евгений 06.01.2017 17:11
Андрей. По питанию ардуинку и модуль объединили?
Ответить | Ответить с цитатой | Цитировать
0 # Алексей 12.01.2017 17:02
уже третий день мучаюсь с данным модулем. В первое подключение с питанием от ардуины циклично писал Modem sturtup, иногда между этими ответами в терминале успевал отвечать на ат команды. Однако после экспериментов с разными скетчами перестал отвечать совсем. Попробовал запитать от аккумулятора на 4, 2 вольта - получил частоту мигания светодиода в 1 гц, но ответа также нет. Только после всех экспериментов стал глючить ардуино - перестал перезаписывать скетчи. Уже и не знаю, что с этой фигней делать.Может, подскажете чего, буду благодарен
Ответить | Ответить с цитатой | Цитировать
0 # Евгени 12.01.2017 20:05
День добрый! Что то было подобное с модулем. Дунька вроде не глючила. Проблема у меня была в том, что в месте подключения антенки, сама антенка от вращения замыкала на рядом стоящие контакты. Проверьте монтаж и пропайку. В моём блоке хреново работает АОН, но по команде Дуньки СМСки отправляет. У меня питание от 5V, (-) нужно объединить (соединить). Скорость порта 115200.
Ответить | Ответить с цитатой | Цитировать
0 # Алексей 12.01.2017 22:47
В смысле общий вывод питания и ардуиновский объединить? не вращается, пропаяно все хорошо. Начал так глючить после экспериментов с разными скетчами.к питанию параллельно подключен конденсатор на 1000 мкФ. В самый первый раз работал на 9600, на остальные скорости вообще не откликается
Ответить | Ответить с цитатой | Цитировать
+1 # Евгений 13.01.2017 11:21
(-) питания ардуирки и модуля. У меня ардуино нано пит. по USB. Модуль пит. от "MB-102 Solderless" 5V. Конденсаторы не подключал. Устойчиво работает на скр.115200. (скр. и в скетче и в мониторе порта). А кнопка сброса на ардуино не помогает?
Ответить | Ответить с цитатой | Цитировать
0 # Алексей 13.01.2017 15:32
На ресет не реагирует. Все это время светодиод L тупо горит, при нажатии на сброс не реагирует, после отпускания кнопки 3 раза мигает. Заметил, что после отключения модуля от ардуино, ардуино через некоторое время оживает.
Ответить | Ответить с цитатой | Цитировать
0 # Алексей 13.01.2017 17:49
После согласования общих выводов устройств и подключения конденсатора на 3300 мкФ через терминал начал отвечать на ат команды. Перетащив выводы 2, 3 с ардуино на макетную плату перестал глючить. Скетч еще не пробовал заливать, но уже стало повеселее)
Ответить | Ответить с цитатой | Цитировать
+1 # Aleksey 13.01.2017 13:38
При определении звонка пишит вот

RINGCЎCЎҐ(*
ҐєК’Љ‚’‚’ЄК‚b‰ўЄbbbbЉj
Ответить | Ответить с цитатой | Цитировать
0 # Евгений 13.01.2017 16:02
меняйте скорость порта. (в мониторе и в скетче)
Ответить | Ответить с цитатой | Цитировать
0 # Николай 13.01.2017 16:39
резисторы для TX/RX на 1кОм можно попробовать. На SIM800L по даташиту они рекомендованы.
Ответить | Ответить с цитатой | Цитировать
0 # Aleksey 13.01.2017 18:18
и все скорости перебрал и резисторы вешал. Причем с начало норм а потом вот так. В чем причина?
Ответить | Ответить с цитатой | Цитировать
0 # Андрей 28.01.2017 21:45
NEOWAY M590 полный отстой.Купитe sim800l и забудете о танцах с бубнами.Цена вопроса ничтожна.
Ответить | Ответить с цитатой | Цитировать
0 # Андрей 28.01.2017 21:50
А статья на отлично!Спасибо Автору.
Ответить | Ответить с цитатой | Цитировать
0 # Александр 07.02.2017 12:28
Все собрал скетч залил, модуль запитал от 3-х батареек ААА земли соединил светодиод на модуле один горит постянно один мигает , пишет начальную фразу
GSM tester v1.0 и на следующей строке смесь букв, на звонок не реагирует, при отправке смски выдает две фразы
SMS send started
SMS send complete
и опять смесь букв (но поменьше), что бы такое могло быть :cry:
Ответить | Ответить с цитатой | Цитировать
+1 # Евгений 07.02.2017 13:41
"смесь букв" у меня возникает из-за скоростей порта. У меня в скетче 115200 и в мониторе порта также. Строчка " sms(String("hello world"), String("+71234567890")); //отправляем СМС на номер +71234567890" - не потерялась?
Ответить | Ответить с цитатой | Цитировать
0 # александро 08.02.2017 09:50
Ура !!! Спасибо заработало
Ответить | Ответить с цитатой | Цитировать
0 # Александр 09.02.2017 12:56
Работает очень нестабильно то шлет СМС, то не шлет то при включении монитора все нормально, каракули пишет какие-то в чем причина, подскажите...., а то сигнализацию на таком у...ще делать неайс... :cry:
Ответить | Ответить с цитатой | Цитировать
0 # Иван 09.02.2017 14:53
У меня сигналка на таком работает безотказно уже 4 месяца, ни одного сбоя. Собирал по этой схеме:
http://mysku.ru/blog/ebay/43282.html
Ответить | Ответить с цитатой | Цитировать
0 # Дмитрий 19.02.2017 23:45
Суперская статья. Решила 75% моих вопросов по работе с модулем. И особенно парсинг строки. Спасибо.
Ответить | Ответить с цитатой | Цитировать
0 # Кирилл Романов 08.04.2017 18:09
Тоже столкнулся со скоростями, прописал в скетче 115200 и в мониторе - Но продолжало не работать, пока не повесил землю внешнего питания GSM-модуля на землю Arduino
Ответить | Ответить с цитатой | Цитировать
0 # Николай 31.10.2017 12:22
Все запустилось, однако постоянно в мониторе порта вспыхивает эта строка

MODEM:STARTUP

В чем может быть проблема? Не соединятется с оператором связи? Не подходит сим карта? ....

Эти команды работают
AT+CLHP=1
OK
AT+CMGF=0
OK
AT+CSCS="GSM"
OK
Ответить | Ответить с цитатой | Цитировать
0 # Николай 31.10.2017 15:41
Решено, питание увеличено до 6,4 вольта
Ответить | Ответить с цитатой | Цитировать
0 # Max 02.02.2019 05:02
Цитирую Николай:
Все запустилось, однако постоянно в мониторе порта вспыхивает эта строка

MODEM:STARTUP

В чем может быть проблема? Не соединятется с оператором связи? Не подходит сим карта? ....

Эти команды работают
AT+CLHP=1
OK
AT+CMGF=0
OK
AT+CSCS="GSM"
OK

Попробуй возле окна. Антенна слабая.
Ещё при соединении, он жрёт до 2 ампер. Я поставил конденсатор на 1000 мф на блок питания 750 мА, и все заработало.
Ответить | Ответить с цитатой | Цитировать
0 # arsenaleli 28.01.2018 22:17
а такого не было ни у кого

GSM tester v1.0
kccj?kRKRC?kScJJXC?

помогите если кто сможете
Ответить | Ответить с цитатой | Цитировать
0 # Ana Ramos 25.07.2018 22:04
GSM модуль используется для расширения возможностей обычных плат Ардуино – отправка смс, совершение звонков, обмен данными по GPRS. Существуют различные виды модулей, наиболее часто используемые — SIM900, SIM800L, A6, A7.
Ответить | Ответить с цитатой | Цитировать
0 # Max 02.02.2019 04:57
А 3 номера можно записать? Я пробовал вставлять через запятую и все перестало работать. Может надо как то иначе записывать?
Ответить | Ответить с цитатой | Цитировать
0 # Ivan Lutsenko 31.03.2019 00:04
Здравствуйте. Подскажите пожалуйста. В чем может быть проблема. Модуль в целом работает по скетчу. Отправляет СМС и принимает звонок. Но почему-то не могу выполнить ни одной АТ команды. К примеру, перемыкаю RST и GND. Подключаю к 0 и 1 выводам. Включаю Юсб. Включаю питание модуля. Что в терминале, что в Айдие ардуины, пишет Модуль стартует, потом +PBREADY и все. Тишина. Пишу AT или ATI, при нажатии из колонок идет звук динь но реакции от модуля нет. При попытке позвонить на модуль,выводится ring. Вчем причина, почему не могу командами управлять. Повторюсь, в скетче так же все работает.
Ответить | Ответить с цитатой | Цитировать
0 # Ivan Lutsenko 06.04.2019 18:35
Разобрался. Чтоб не гореть в аду, расскажу. Все оказалось рабочим, но так как работаю с подобным интерфейсом впервые, вычитал о том что провода RX - TX нужны максимально короткими. Укоротил до 4-5см, сразу все заработало. Ваш скетч что в шапке сразу переделал на: Звоним на модуль. Модуль встает на "охрану" Ардуинка отслеживает температуру. Ниже заданной температуры рассылает смс о том что потух котел в моем случае. Дальше буду подключать датчики движения PIR.
Ответить | Ответить с цитатой | Цитировать
Добавить комментарий