Arduino gsm проекты


Источник: robotchip.ru

GSM GPRS в Arduino

Модули GSM GPRS

GSM модуль используется для расширения возможностей обычных плат Ардуино – отправка смс, совершение звонков, обмен данными по GPRS. Существуют различные виды модулей, наиболее часто используемые – SIM900, SIM800L, A6, A7.

Описание модуля SIM900

Модуль SIM900 используется в различных автоматизированных системах. С помощью интерфейса UART осуществляется обмен данными с другими устройствами. Модуль обеспечивает возможность совершения звонков, обмен текстовыми сообщениями. Работа модуля релизуется на компоненте SIM900, созданным фирмой SIMCom Wireless Solution.

Технические характеристики:


  • Диапазон напряжений 4,8-5,2В;
  • В обычном режиме ток достигает 450 мА, максимальный ток в импульсном режиме 2 А;
  • Поддержка 2G;
  • Мощность передачи: 1 Вт 1800 и 1900 МГц, 2 Вт 850 и 900 МГц;
  • Имеются встроенные протоколы TCP и UDP;
  • GPRS multi-slot class 10/8;
  • Рабочая температура от -30С до 75С.

С помощью устройства можно отслеживать маршрут  транспорта совместно с ГЛОНАСС или GPS устройством. Возможность отправки смс-сообщений используется в беспроводной сигнализации и различных охранных системах.

Описание модуля SIM800L

Модуль выполнен на основе компонента SIM800L и используется для отправки смс, реализации звонков и обмена данными  по GPRS. В модуль устанавливается микро сим карта. Устройство обладает встроенной антенной и разъемом, к которому можно подключать внешнюю антенну. Питание к модулю поступает от внешнего источника либо через DC-DC преобразователь. Управление осуществляется с помощью компьютера через  UART, Ардуино, Raspberry Pi или аналогичные устройства.

Технические характеристики:

  • Диапазон напряжений 3,7В – 4,2В;
  • Поддержка 4х диапазонной сети 900/1800/1900 МГц;
  • GPRS class 12 (85.6 кБ/с);
  • Максимальный ток 500 мА;
  • Поддержка 2G;
  • Автоматический поиск в четырех частотных диапазонах;
  • Рабочая температура от –30С до 75С.

Описание модуля A6

Модуль A6 разработан фирмой AI-THINKER в 2016 году. Устройство используется для обмена смс-сообщениями и обмена данными по GPRS. Плата отличается низким потреблением энергии и малыми размерами. Устройство полностью совместимо с российскими мобильными операторами.

Технические характеристики:

  • Диапазон напряжений 4,5 – 5,5В;
  • Питание 5В;
  • Диапазон рабочих температур от -30С до 80С;
  • Максимальное потребление тока 900мА;
  • GPRS Class 10;
  • Поддержка протоколов PPP, TCP, UDP, MUX.

Модуль поддерживает карты формата микросим.

Описание модуля A7

A7 является новейшим модулем от фирмы AI-THINKER. По сравнению со своим предшественником A6 имеет встроенный GPS, позволяющий упрощать конструкцию устройства.

Технические характеристики:

  • Диапазон рабочих напряжений 3,3В-4,6В;
  • Напряжение питания 5В;
  • Частоты 850/900/1800/1900 МГц;
  • GPRS Class 10: Макс. 85.6 кбит;
  • Подавление эха и шумов.

Устройство поддерживает микросим карты. Модуль поддерживает обмен звонками, обмен смс-сообщениями, передачу данных по GPRS, прием сигналов по GPS.

Где купить GSM модули для ардуино

Традиционно, прежде чем начать, несколько советов и полезных ссылок на продавцов Aliexpress.


Arduino gsm проектыОчень качественный модуль KEYES SIM900 GSM GPRS  Arduino gsm проектыМодуль SIM800C для ардуино от проверенного поставщика
Arduino gsm проектыШилд для разработки, совместимый с Ардуино, на базе модуля SIM900 GPRS/GSM Arduino gsm проектыНедорогой модуль mini A6 GPRS GSM

 

Подключение GSM GPRS шилда к Arduino

В этом разделе мы рассмотрим вопросы подключения GSM – модулей к плате адуино. За основу почти во всех примерах берется Arduino Uno, но в большинстве своем примеры пойдут и для плат Mega, Nano и т.д.

Подключение модуля SIM800

Для подключения нужны плата Ардуино, модуль SIM800L, понижающий преобразователь напряжения, провода для соединения и батарея на 12В. Модуль SIM800L требует нестандартное для ардуино напряжение в 3,7В, для этого нужен понижающий преобразователь напряжения.

Распиновка модуля SIM800 приведена на рисунке.


GSM GPRS в Ардуино

Плату Ардуино нужно подключить к компьютеру через USB кабель. Батарею на 12 В подключить через преобразователь: -12В на землю Ардуино, от земли в преобразователь в минус, +12В в преобразователь в плюс. Выходы с модуля TX и RX нужно подключить к пинам 2 и 3 на Ардуино. Несколько модулей можно подключать к любым цифровым пинам.

GSM GPRS в Ардуино

 

Подключение модуля A6

Модуль A6 стоит дешевле, чем SIM900, и его очень просто подключать к Ардуино. Модуль питается напряжением 5В, поэтому для соединения не нужны дополнительно понижающие напряжение элементы.

Для подключения потребуются плата Ардуино (в данном случае рассмотрена Arduino UNO), GSM модуль А6, соединительные провода. Схема подключения приведена на рисунке.

GSM и GPRS модуль для Arduino


Вывод RX с модуля GSM нужно подключить к TX на плате Ардуино, вывод TX подключить к пину RX на Ардуино. Земля с модуля соединяется с землей на микроконтроллере. Вывод Vcc на GSM модуле нужно соединить с PWR_KEY.

Подключение с помощью GSM-GPRS шилда

Перед подключением важно обратить внимание на напряжение питания шилда. Ток в момент звонка или отправки данных может достигать значений в 15-2 А, поэтому не стоит запитывать шилд напрямую от Ардуино.

Перед подключением к Ардуино нужно установить сим-карту на GSM-GPRS шилд. Также нужно установить джамперы TX и RX, как показано на рисунке.

GSM и GPRS модуль для Arduino

Подключение производится следующим образом – первый контакт (на рисунке желтый провод) с шилда нужно соединить с TX на Ардуино. Второй контакт (зеленый провод) подключается к RX на Ардуино. Земля с шилда соединяется с землей с аруино. Питание на микроконтроллер поступает через USB кабель.

Макет соединения шилда и платы Ардуино изображен на рисунке.

GSM и GPRS модуль для Arduino


Для работы потребуется установить библиотеку GPRS_Shield_Arduino.

Для проверки правильности собранной схемы нужно сделать следующее: соединить на Ардуино RESET и GND (это приведет к тому, что данные будут передаваться напрямую от шилда к компьютеру), вставить сим-карту в шилд и включить питание шилда.  Плату Ардуино нужно подключить к компьютеру и нажать кнопку включения. Если все соединено правильно, загорится красный светодиод и будет мигать зеленый.

Краткое описание взаимодействия через AT-команды

AT-команды – это набор специальных команд для модема, состоящий из коротких текстовых строк. Чтобы модем распознал поданную ему команду, строки должны начинаться с букв at. Строка будет восприниматься, когда модем находится в командном режиме. AT-команды можно отправлять как при помощи коммуникационного программного обеспечения, так и вручную с клавиатуры. Практические все команды можно разделить на 3 режима – тестовый, в котором модуль отвечает, поддерживает ли команду; чтение – выдача текущих параметров команды; запись – произойдет записывание новых значений.

Список наиболее используемых AT-команд:

  • AT – для проверки правильности подключения модуля. Если все исправно, возвращается OK.
  • A/ – повтор предыдущей команды.
  • AT+IPR? – получение информации о скорости порта. Ответом будет +IPR: 0 OK (0 в данном случае – автоматически).

  • AT+ICF? – настройка передачи. В ответ придет +ICF: бит, четность.
  • AT+IFC? – контроль передачи. Ответом будет +IFC: терминал от модуля, модуль от терминала (0 – отсутствует контроль, 1 – программный контроль, 2 – аппаратный).
  • AT+GCAP – показывает возможности модуля. Пример ответа – +GCAP:+FCLASS,+CGSM.
  • AT+GSN – получение IMEI модуля. Пример ответа 01322600XXXXXXX.
  • AT+COPS? – показывает доступные операторы.
  • AT+CPAS – состояние модуля. Ответ +CPAS: 0. 0 – готовность к работе, 3 – входящий звонок, 4 – голосовое соединение, 2 – неизвестно.
  • AT+CCLK? – информация о текущем времени и дате.
  • AT+CLIP=1 – включение/выключение АОН. 1 – включен, 0 – выключен.
  • AT+CSCB=0 – прием специальных смс-сообщений. 0 – разрешено, 1 – запрещено.
  • AT+CSCS= “GSM” – кодирование смс-сообщения. Можно выбрать одну из следующих кодировок: IRA, GSM, UCS2, HEX, PCCP, PCDN, 8859-1.
  • AT+CMEE=0 – получение информации об ошибке.
  • AT+CPIN=XXXX – ввод пин-кода сим-карты.
  • AT&F – сброс до заводских настроек.
  • AT+CPOWD=1 – срочное(0) или нормальное(1) выключение модуля.
  • ATD+790XXXXXXXX – звонок на номер +790XXXXXXXX.
  • ATA – ответ на вызов.
  • AT+CMGS=”+790XXXXXXXX”>Test sms – отправка смс-сообщения на номер +790XXXXXXXX.

В данном случае рассмотрены основные команды для модуля SIM900. Для разных модулей команды могут незначительно отличаться. Данные для модуля будут подаваться через специальную программу «терминал», которую нужно установить на компьютер. Также подавать команды модулю можно через монитор порта в Arduino IDE.

Монитор порта GSM и GPRS модуль для Arduino


Скетчи для работы с модулем GSM

Отправка СМС на примере SIM900

Перед тем, как отправить сообщение, нужно настроить модуль. В первую очередь нужно перевести в текстовый формат передаваемое сообщение. Для этого существует команда AT+CMGF=1. Нужно перевести кодировку на GSM командой AT+CSCS=»GSM». Эта кодировка наиболее удобная, так как там символы представлены в ASCII коде, который легко понимает компилятор.

Затем нужно набрать смс-сообщение. Для этого посылается команда с номером абонента AT+CMGS=»+79XXXXXXXXX» r, в ответ предлагается набрать текст смс. Нужно выполнить отправку сообщения. По окончании требуется отправить код комбинации  Ctrl+Z, модуль позволит отправку текста адресату. Когда сообщение будет отправлено, вернется OK.

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

Получение смс. Для чтения смс-сообщения используется команда AT + CNMI = 2,2,0,0,0. Когда на модуль придет текстовое сообщение, он отправит в последовательный порт +CMTI: «SM»,2 (в данном случае 2 – порядковый номер сообщения). Чтобы его прочитать, нужно отправить команду AT+CMGR=2.

Прием голосового звонка. В первую очередь для разговора нужно подключить к модулю динамик и микрофон. При получении звонка будет показан номер, с которого он совершен. Для осуществления работы нужно включить библиотеку GSM:

#include <GSM.h>

Если сим-карта заблокирована, нужно ввести ее пин-код. Если пин-код не требуется, это поле нужно оставить пустым.

#define PINNUMBER “”

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

boolean notConnected = true;

С помощью функции gsmAccess.begin() происходит подключение к сети. При установлении соединения вернется значение GSM_READY.

vcs.hangCall(); – функция, показывающая, что модем готов принимать звонки.

getvoiceCallStatus() – определяет статус скетча. Если кто-то звонит, она возвращает значение RECEIVINGCALL. Для записи номера нужно воспользоваться функцией retrieveCallingNumber(). Когда будет совершен ответ на звонок, вернется TALKING. Затем скетч будет ждать символа новой строки, чтобы прервать разговор.

Источник: ArduinoMaster.ru

Введение:

В этом уроке мы создадим систему удаленного управления домом по смс, используя GSM/GPRS Shield.

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

Видео:

Нам понадобится:

  • 1х Piranha UNO
  • 1х GSM/GPRS Shield;
  • 1х Battery Shield;
  • 2х Реле;
  • 2х Силовой ключ;
  • 1х Линейный привод 12В;
  • 1х Светодиодная лента 12В;
  • 1х Источник питания 12В;
  • 1х Вентилятор(кулер) 12В;
  • 2х Лампочка;

Для реализации проекта нам необходимо установить библиотеки:

  • iarduino_GSM- для работы с GSM/GPRS Shield;
  • Библиотеки SoftwareSerial входит в базовый набор Arduino IDE и не требует установки;

О том, как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki — Установка библиотек в Arduino IDE.

Описание работы системы удалённого управления:

    • После подачи питания дождитесь получения смс с уведомлением о том, что инициализация прошла успешно и модем GSM зарегистрировался в сети. После этого устройство готово к работе.
    • Устройство может принимать сообщения, содержащие параметры «Действие», «Устройство», «Яркость».
    • Для управления устройством вам необходимо сформировать смс по следующему алгоритму:
      • Основные функции:
        • [ДЕЙСТВИЕ] [УСТРОЙСТВО];
      • Дополнительные функции:
        • [ЗНАЧЕНИЕ%]; — задаём значение ШИМ-сигнала для яркости/скорости;
    • После правильно написанной и отправленной информации дождитесь обратного сообщения с уведомлением о том, что ваша команда прошла.

    Схема сборки:

    Arduino / Piranha UNO:

    Arduino gsm проекты

    Batery Shield:

    Установите Battery Shield на Arduino / Piranha UNO:
    Во время установки Battery Shield должен быть в выключенном состоянии.

    Arduino gsm проекты

    GSM/GPRS Shield:

    На Battery Shield установите GSM/GPRS Shield A6:

    На плате GSM/GPRS Shield A6 имеется слот для SIM-карт и переключатель UART. Установите SIM-карту в слот, выберите положение переключателя RX-7/TX-8.

    Arduino gsm проекты

    Trema Shield:

    На GSM/GPRS Shield A6 установите Trema Shield:

    Arduino gsm проекты

    Линейный привод:

    Подключим линейный привод к Trema Shield. Для этого необходимо 2 электромеханических реле подключить к выводу 4.

    После этого установить перемычки согласно рисунку.

    Далее подключить к реле линейный привод и подвести внешнее питание 12В.

    Arduino gsm проекты

    Лампочки:

    Подключите к выводу 2 и 3 Trema Shield 2 твердотельных реле.

    Далее согласно схеме подключите к реле лампочки и питание 220В.

    Будьте предельно внимательны и осторожны!

    Arduino gsm проекты

    Светодиодная лента:

    Подключите к 6 выводу Trema Shield Trema-модуль Силовой ключ, а к нему подключите светодиодную ленту, пустив провод питания ленты (красный) напрямую к источнику питания 12В, а провод GND ленты (чёрный) в разрыв через Trema-модуль Силовой ключ.

    Arduino gsm проекты

    Вентилятор(кулер):

    Подключите к 5 выводу Trema Shield Trema-модуль Силовой ключ, а к нему подключите вентилятор (кулер), пустив провод питания вентилятора (красный) напрямую к источнику питания 12В, а провод GND вентилятора (чёрный) в разрыв через Trema-модуль Силовой ключ.

    Arduino gsm проекты

    Код программы (скетч):

    В скетче используются библиотеки iarduino_GSM и SoftwareSerial.

     // БИБЛИОТЕКИ #include <iarduino_GSM.h> // Подключаем библиотеку iarduino_GSM для работы с GSM/GPRS Shield. #include <SoftwareSerial.h> // Подключаем библиотеку SoftwareSerial для программной реализации шины UART. iarduino_GSM gsm; // Создаём объект gsm для работы с функциями и методами библиотеки iarduino_GSM. SoftwareSerial softSerial(7, 8); // Создаём объект softSerial для работы по программной шине UATR, указывая выводы RX и TX платы Arduino (выводы 7 и 8)  // ПЕРЕМЕННЫЕ uint8_t Sum = 0; // Переменная для хранения процентного значения ШИМ-сигнала  // Для отправки СМС о удачном запуске устройства, укажите в строке ниже номер телефона без пробелов. char SMSnum[13] = "7_ВАШ_НОМЕР_ТЕЛЕФОНА"; // Объявляем строку для хранения номера отправителя SMS сообщений. char SMStxt[161]; // Объявляем строку для хранения текста принятых SMS сообщений. String strSMStxt; // переменная типа String для более удобной работы uint8_t flgFunc; // флаг наличия действия uint8_t flgDev; // флаг наличия устройства uint8_t flgPWM; // флаг наличия ШИМ uint8_t lvlPWM; // Переменная количества символов в строке const char* Func[2][5] = {{"ВКЛЮЧИТЬ", "ВЫКЛЮЧИТЬ"}, // Двумерный массив с функциями и устройствами  {"СВЕТ КУХНЯ" , "СВЕТ КОМНАТА", "ДВЕРЬ", "ВЕНТИЛЯТОР", "ПОДСВЕТКА"}}; //  const char Pins[] = { 2, 3, 4, 5, 6 }; // Массив с номерами выводов устройств  //  void setup() { //  // Инициируем GSM/GPRS Shield и проверяем его готовность к работе:  gsm.begin(softSerial); // Инициируем работу GSM/GPRS Shield, указывая объект шины UART.  while (gsm.status() != GSM_OK) { delay(1000); } // Ждём завершения регистрации модема в сети оператора связи.  // Установка кодировки для символов Кириллицы:  gsm.TXTsendCodingDetect("п"); // Выполняем автоопределение кодировки скетча для отправки текста на Русском языке.  // Отправка сообщения об удачном запуске:  gsm.SMSsend( F("Инициализация прошла успешно."), SMSnum); // Данная строка будет отвечать отправителю указанным SMS сообщением.  // Настраиваем выводы  pinMode(Pins[0], OUTPUT); // настройка вывода на работу в режиме выхода  pinMode(Pins[1], OUTPUT); // настройка вывода на работу в режиме выхода  pinMode(Pins[2], OUTPUT); // настройка вывода на работу в режиме выхода  pinMode(Pins[3], OUTPUT); // настройка вывода на работу в режиме выхода  pinMode(Pins[4], OUTPUT); // настройка вывода на работу в режиме выхода  digitalWrite(Pins[0], LOW); // устанавливаем на выходе значение сигнала равным LOW  digitalWrite(Pins[1], LOW); // устанавливаем на выходе значение сигнала равным LOW  digitalWrite(Pins[2], LOW); // устанавливаем на выходе значение сигнала равным LOW  digitalWrite(Pins[3], LOW); // устанавливаем на выходе значение сигнала равным LOW  digitalWrite(Pins[4], LOW); // устанавливаем на выходе значение сигнала равным LOW  flgFunc = 20; // Сбрасываем флаг  flgDev = 20; // Сбрасываем флаг  flgPWM = 0; // Сбрасываем флаг } //   //  void loop () { //   if (millis() % 1000 < 100) { // Выполняем код в теле оператора if первые 100 мс каждой секунды.  delay(100); // Устанавливаем задержку в 100 мс, чтоб не выполнить код более 1 раза за секунду.  if (gsm.SMSavailable()) { // Функция SMSavailable() возвращает количество входящих непрочитанных SMS сообщений.  gsm.SMSread(SMStxt, SMSnum); // Читаем SMS сообщение в ранее объявленные переменные (текст SMS сообщения, адрес отправителя, дата отправки, идентификатор SMS, количество SMS, номер SMS).  strSMStxt = SMStxt; // Присваиваем массиву atrSMStxt значения массива SMStxt для дальнейшей проверки на совпадения  for (int m = 0; m < (sizeof(Func[0]) / 2); m++) { // проверяем в цикле, совпадает ли команда из массива с тем, что пришло в СМС  if (strSMStxt.indexOf(Func[0][m]) > -1 && *Func[0][m] != 0) { // если совпадения есть, то  flgFunc = m; // присваиваем флагу порядковый номер совпавшего слова из массива Func  for (int i = 0; i < (sizeof(Func[1]) / 2); i++) { // проверяем в цикле, совпадает ли имя устройства из массива с тем, что пришло в СМС  if (strSMStxt.indexOf(Func[1][i]) > -1 && *Func[1][i] != 0) { // если совпадения есть и это не пустая строка, то  flgDev = i; // присваиваем флагу порядковый номер совпавшего слова из массива Device  if (strchr(SMStxt, '%')) { // проверяем, есть ли в тексте СМС символ %  flgPWM = 1; // и если есть, то устанавливаем флаг  } //  } //  } //  } //  } //  if (flgPWM == 1) { // если установлен флаг flgPWM, то  lvlPWM = uint8_t(strchr(SMStxt, '%' ) - SMStxt); // определяем количество символов в строке до совпадения с символом %  if (SMStxt[lvlPWM - 1] >= '0' && SMStxt[lvlPWM - 1] <= '9') { // Проверяем, является ли символ, расположенный в строке на 1 позицию левее символа %, цифрой от 0 до 9, и если да, то  Sum = uint8_t(SMStxt[lvlPWM - 1] - '0'); // прибавляем эту цифру к переменной (единицы)  if (SMStxt[lvlPWM - 2] >= '0' && SMStxt[lvlPWM - 2] <= '9') { // Проверяем, является ли символ, расположенный в строке на 2 позиции левее символа %, цифрой от 0 до 9, и если да, то  Sum += uint8_t((SMStxt[lvlPWM - 2] - '0') * 10); // прибавляем эту цифру к переменной, умножив на 10 (десятки)  if (SMStxt[lvlPWM - 3] > '0' && SMStxt[lvlPWM - 3] <= '1') { // Проверяем, является ли символ, расположенный в строке на 3 позиции левее символа %, цифрой от 0 до 1, и если да, то  Sum += uint8_t((SMStxt[lvlPWM - 3] - '0') * 100) ; // прибавляем эту цифру к переменной, умножив на 100 (сотни)  } else // иначе проверяем, что  if (SMStxt[lvlPWM - 3] >= '2' && SMStxt[lvlPWM - 3] <= '9') { // число "сотен" не больше 1, и если больше то  flgPWM = 0; // сбрасываем флаг ШИМ  } //   } //  } //  } //  if (flgFunc != 20) { // если флаг flgFunc установлен, то  switch (flgFunc) { // проверяем значение флага flgFunc с определёнными в операторе case  case 0: // Если 0 - значит указано действие ВКЛЮЧИТЬ  if (flgDev != 20) { // Если установлен флаг наличия устройства, то  if (flgPWM == 1) { // проверяем флаг ШИМ. Если он установлен, то  uint8_t mapPWM = map(Sum, 0, 100, 0, 255); // переопределяем множество для ШИМ и  analogWrite(Pins[flgDev], mapPWM ); // подаём ШИМ-сигнал на вывод и  gsm.SMSsend(F("Процент задан!"), SMSnum); // отправляем сообщение об успешном выполнении.  Sum = 0; // сбрасываем количество процентов для задания ШИМ-сигнала после выполнения  flgPWM = 0; // сбрасываем флаг ШИМ после выполнения  } //  else { // Если же флага ШИМ нет, то  digitalWrite(Pins[flgDev], HIGH); // подаём высокий сигнал на вывод для включения и  gsm.SMSsend(F("Устройство включено!"), SMSnum); // отправляем сообщение об успешном выполнении.  } //  flgDev = 20; // сбрасываем флаг устройства после выполнения  } else { // если в СМС не указано устройство, то  gsm.SMSsend(F("Что включить?"), SMSnum); // отправляем об этом сообщение  } //   flgFunc = 20; // сбрасываем флаг действия после выполнения  break; //  case 1: // Если 1 - значит указано действие ВЫКЛЮЧИТЬ  if (flgDev != 20) { // Если установлен флаг наличия устройства, то  digitalWrite(Pins[flgDev], LOW); // подаём низкий сигнал на вывод для выключения  gsm.SMSsend(F("Устройство выключено!"), SMSnum); // и отправляем сообщение об успешном выполнении.  flgDev = 20; // сбрасываем флаг устройства после выполнения  } else { // если в СМС не указано устройство, то  gsm.SMSsend(F("Что выключить?"), SMSnum); // отправляем об этом сообщение  } //   flgFunc = 20; // сбрасываем флаг действия после выполнения  break; //  } //  } else { //  gsm.SMSsend(F("Ошибка в тексте!"), SMSnum); // Если текст пришёл не верный, то отправляем об этом сообщение  } //  } //  } // } //

    Алгоритм работы скетча:

    До кода void setup() определяются номера выводов, объявляются переменные и функции, подключаются библиотеки, и создаются объекты для работы с ними.

    В коде void setup() конфигурируются выбранные выводы, инициируется работа GSM/GPRS Shield, выполняется цикл ожидания готовности GSM/GPRS Shield к работе (регистрация в сети оператора). И после выполнения всех указанных действий выполняется оповещение о готовности к работе, путем отправки смс на указанный номер.

    Код void loop() выполняется только при получении смс сообщения. Сам блок разделён на две основные части: приём входящих сообщений и выполнение указанных в сообщении действий.

    Приём входящих сообщений состоит из следующих действий:

    • Считывание сообщения из памяти SIM-карты, после чего функция автоматически их оттуда удаляет.
    • После считывания сообщения запускается цикл, в котором текст сообщения проверяется на наличие в нём управляющих команд;
    • Если команда найдена, то внутри него запускается второй цикл, в котором текст так же проверяется, но уже на наличие в нём имени устройства;
    • Если имя устройства найдено, то выполняется проверка на наличие дополнительного параметра, указанного с символом «%» — процент (от 0 до 100) яркости/скорости, с которым будет работать указанное устройство.
    • Если дополнительный параметр был указан, то ставится флаг о его наличии в полученном смс.

    Выполнение указанных в сообщении действий:

    • После того, как все флаги были выставлены, происходит проверка наличия флага дополнительного параметра. Если он присутствует, тогда выполняется вычисление значения числа, указанного перед символом %:
      • Для этого мы находим количество символов в строке, расположенных слева от символа %;
      • Полученное число покажет нам порядковый номер символа % в массиве strSMStxt;
      • Для того, чтобы узнать, какое значение было указано, проверим 3 ближайшие ячейки массива, расположенные слева от символа %:
        • Если 1 ячейка, расположенная ближе всего к символу %, содержит число от 0 до 9, то тогда мы заносим её значение в переменную Sum. Это будет разряд «единицы»;
        • После этого внутри первой проверки выполняется вторая проверка 2 ячейки на наличие числа от 0 до 9. Если число найдено, то оно умножается на 10 и прибавляется к переменной Sum. Это будет разряд «десятки»;
        • После этого внутри второй проверки производится третья проверка 3 ячейки. Если в ней найдена 1, то она умножается на 100 и прибавляется к переменной Sum. Это будет разряд «сотни».
        • Если же в третьей проверке окажется, что в «сотнях» указано больше 1, то флаг flgPWM будет сброшен;
    • Выполняется проверка наличия флага flgFunc:
      • Если флаг flgFunc был установлен, тогда выполняется проверка наличия флага flgDev:
        • Если флаг flgDev был установлен, тогда выполняется проверка наличия флага flgPWM:
          • Если флаг flgPWM установлен, тогда выполняется подача ШИМ-сигнала на вывод с указанным в сообщении устройством и отправка смс с уведомлением об успешном выполнении;
          • Если флаг flgPWM не установлен, тогда выполняется подача сигнала HIGH на вывод с указанным устройством и отправка смс с уведомлением об успешном выполнении;
        • Если флаг flgDev не установлен, тогда производится отправка смс уведомления о том, что в сообщении не указано устройство;
      • Если флаг flgFunc не установлен, тогда производится отправка смс уведомления о том, что пришло ошибочное сообщение.

    Источник: lesson.iarduino.ru


    Добавить комментарий

    Ваш e-mail не будет опубликован. Обязательные поля помечены *

    Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.