В одном из устройств, которое должно работать автономно, появилась необходимость периодически отправлять уведомления – уровень заряда аккумулятора, а так же информацию о нескольких датчиках. Поскольку девайс будет находиться в таком месте, где нет интернета и на расстоянии в несколько десятков километров от пользователя, было решено использовать в качестве уведомлений – отправку смс. Покопавшись на сайте aliexpress, я нашел давольно много различных GSM модулей, которые способны отправлять смски. Но как и водится, выбор пал на самый дешевый — GSM модуль NEOWAY M590. У этого модуля есть много различных вариаций исполнения, но смысл работы и набор возможностей везде примерно одинаковый.
Описание GSM модуля NEOWAY M590
В первую очередь, с чем я стал разбираться – это отправка смс-сообщений, но параллельно получилось совершать и звонки с помощью модуля NEOWAY M590. Провозиться пришлось довольно приличное время, чтобы вообще хоть как-то запустить модуль. Основная сложность заключается в том, что для стабильной работы M590, требуется отдельный от arduino источник питания. Оказывается gsm модуль очень «прожорливый» и если верить даташиту, способен потреблять до 2х ампер тока при пиковых нагрузках – при подключении к сети и в момент отправки смс или звонке. Обычный блок питания от мобильной зарядки на 5в подключать напрямую нельзя, это может спалить модуль, он питается от напряжения в диапазоне от 3.7 до 4.2 вольт. Чтобы победить проблему с питанием можно использовать блок питания на 1-1,5 ампера и 5в, только подключать не напрямую, а через выпрямительный диод, который понизит напряжение. Так же не будет лишним впаять конденсатор, чтобы побороть пиковые скачки нагрузки модуля. Я использовал блок питания на 1А и конденсатор 680мфд, после этого M590 стал работать стабильно.
Так же для стабильной работы, при подключении NEOWAY M590 к arduino нужно не забыть соединить минусы блока питания и ардуино.
И еще один момент, который стоит отметить: практически в каждом модуле M590 имеется пин, который необходимо замыкать на землю для старта самого модуля. Даже если светодиод на плате моргает, это не всегда сигнализирует об успешном запуске. На плате, которую я использовал такой пин называется BOOT. В других вариантах исполнения он может быть подписан буквой K.
Ниже на картинке нарисована распиновка модуля.
Подключение GSM модуля NEOWAY M590 к arduino
Схема подключения очень простая. Хоть на модуле и находится 14 пинов, потребуется всего несколько: питание, boot, rxd и txd. Обмен данными с ардуино осуществляется через пины rx и tx – UART.
Модуль запитан и подключен, остается только написать несколько строк код. Скетч получается простым, поскольку общение с модулем происходит через serial port. Нужно только в даташите на модуль, найти на какой скорости происходит обмен данными. В моем модуле по умолчанию скорость 115200.
Для управления модулем, все что нужно, это отправка AT команд, их можно легко найти в сети. В коде будет использоваться всего несколько, которые мне были нужны.
Скетч arduino для отправки sms
Ниже приведен код с подробными комментариями:
#include <SoftwareSerial.h> // библиотека, для работы с Serial SoftwareSerial gsm_module(8, 7); // RX, TX // функция для отправки смс void sms_send(String text, String phone){ // отправляем команду о начале отправки смс gsm_module.println("AT+CMGS=\"" + phone + "\""); delay(500); // указываем, какой текст отправить gsm_module.print(text); delay(500); // отправляем символ конца сообщения gsm_module.print((char)26); delay(500); } void setup() { // указываем, на какой скоросте будет происходить // обмен данными с модулем gsm_module.begin(115200); //включаем АОН gsm_module.println("AT+CLIP=1"); delay(500); //режим кодировки СМС - обычный. Для английских символов gsm_module.println("AT+CMGF=1"); delay(500); //режим кодировки текста gsm_module .println("AT+CSCS=\"GSM\""); delay(500); // ждем, пока модуль будет готов к работе while(1){ gsm_module.println("AT+CPAS"); if (gsm_module.find("0")) break; delay(100); } // отправляем смс на номер +71234567890 с текстом "test sms" sms_send(String("test sms"), String("+71234567890")); } void loop() { // }
Скетч arduino для звонка
Ниже приведен код с подробными комментариями:
#include <SoftwareSerial.h> // библиотека, для работы с Serial SoftwareSerial gsm_module(8, 7); // RX, TX void setup() { // монитор порта Serial.begin(115200); // указываем, на какой скоросте будет происходить // обмен данными с модулем gsm_module.begin(115200); //включаем АОН gsm_module.println("AT+CLIP=1"); delay(500); //режим кодировки СМС - обычный. Для английских символов gsm_module.println("AT+CMGF=1"); delay(500); //режим кодировки текста gsm_module .println("AT+CSCS=\"GSM\""); delay(500); // ждем, пока модуль будет готов к работе while(1){ gsm_module.println("AT+CPAS"); if (gsm_module.find("0")) break; delay(100); } // отправляем команду для звонка на номер +71234567890 gsm_module.println("ATD+71234567890;"); delay(500); // проверяем результат if (gsm_module.find("OK")) { Serial.println("ok"); }else { Serial.println("error"); } } void loop() { // }
Послесловие
Помимо отправки смс и звонков, модуль M590 умеет принимать смски и звонки, это можно обрабатывать в скетче и как-то реагировать, выполняя какие-либо действия. Плюс ко всему модуль способен подключаться к GPRS.