Arduino:Примеры/GSMExamplesTestModem: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
м (Замена текста — «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">» на «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">»)
 
Нет описания правки
Строка 22: Строка 22:
Для начала импортируем библиотеку '''GSM'''.
Для начала импортируем библиотеку '''GSM'''.


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
#include <GSM.h>
#include <GSM.h>
</syntaxhighlight>
</syntaxhighlight>
Строка 28: Строка 28:
Создаем экземпляр класса '''GSMModem'''.
Создаем экземпляр класса '''GSMModem'''.


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
GSMModem modem;
GSMModem modem;
</syntaxhighlight>
</syntaxhighlight>
Строка 34: Строка 34:
Создаем переменную, в которой будем хранить '''IMEI''' модема.
Создаем переменную, в которой будем хранить '''IMEI''' модема.


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
String IMEI = "";
String IMEI = "";
</syntaxhighlight>
</syntaxhighlight>
Строка 40: Строка 40:
В секции setup() инициализируем последовательную передачу данных на компьютер. Запустив соединение, отправляем сообщение, информирующее о начале работы скетча.  
В секции setup() инициализируем последовательную передачу данных на компьютер. Запустив соединение, отправляем сообщение, информирующее о начале работы скетча.  


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
void setup(){
void setup(){
   Serial.begin(9600);  
   Serial.begin(9600);  
Строка 48: Строка 48:
Чтобы запустить модем, вызываем функцию modem.begin(). В зависимости от результата выводим на '''Serial Monitor''' статусное сообщение, а затем завершаем блок setup().
Чтобы запустить модем, вызываем функцию modem.begin(). В зависимости от результата выводим на '''Serial Monitor''' статусное сообщение, а затем завершаем блок setup().


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
if(modem.begin())  
if(modem.begin())  
     Serial.println("modem.begin() succeeded");
     Serial.println("modem.begin() succeeded");
Строка 58: Строка 58:
В блоке loop() вписываем функцию modem.getIMEI(), чтобы она вернула нам '''IMEI'''-номер модема. Для вашего '''GSM Shield''' этот номер будет уникальным.
В блоке loop() вписываем функцию modem.getIMEI(), чтобы она вернула нам '''IMEI'''-номер модема. Для вашего '''GSM Shield''' этот номер будет уникальным.


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
void loop()
void loop()
{
{
Строка 68: Строка 68:
Если getIMEI() вернет нам какой-нибудь приемлемый ответ, выводим его на '''Serial Monitor''', а потом перезагружаем модем при помощи функции modem.begin().
Если getIMEI() вернет нам какой-нибудь приемлемый ответ, выводим его на '''Serial Monitor''', а потом перезагружаем модем при помощи функции modem.begin().


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
if(IMEI != NULL)
if(IMEI != NULL)
   {
   {
Строка 78: Строка 78:
Перезагрузив, снова проверяем '''IMEI'''. Если результат снова приемлем, то модем функционирует как нужно.
Перезагрузив, снова проверяем '''IMEI'''. Если результат снова приемлем, то модем функционирует как нужно.


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
if(modem.getIMEI() != NULL)
if(modem.getIMEI() != NULL)
     {
     {
Строка 87: Строка 87:
Однако если после перезагрузки модема приемлемого результата нет, сообщаем об ошибке.  
Однако если после перезагрузки модема приемлемого результата нет, сообщаем об ошибке.  


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
else
else
     {
     {
Строка 96: Строка 96:
Если после запуска мы так и не получили '''IMEI''', сообщаем об этом и завершаем программу.  
Если после запуска мы так и не получили '''IMEI''', сообщаем об этом и завершаем программу.  


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
}
}
   else
   else
Строка 108: Строка 108:




<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
/*
/*
Проверка модема с помощью GSM Shield
Проверка модема с помощью GSM Shield

Версия от 12:32, 20 мая 2023

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Проверка модема с помощью GSM Shield[1]

Этот скетч тестирует модем на GSM Shield, проверяя, правильно ли он работает. SIM-карта для этого примера не требуется.

Необходимое оборудование

  • Плата Arduino;
  • Модуль Arduino + Telefonica GSM/GPRS Shield;

Цепь

Модуль Arduino GSM Shield, установленный поверх Arduino Uno

Код

Для начала импортируем библиотеку GSM.

#include <GSM.h>

Создаем экземпляр класса GSMModem.

GSMModem modem;

Создаем переменную, в которой будем хранить IMEI модема.

String IMEI = "";

В секции setup() инициализируем последовательную передачу данных на компьютер. Запустив соединение, отправляем сообщение, информирующее о начале работы скетча.

void setup(){
  Serial.begin(9600); 
  Serial.print("Starting modem test...");

Чтобы запустить модем, вызываем функцию modem.begin(). В зависимости от результата выводим на Serial Monitor статусное сообщение, а затем завершаем блок setup().

if(modem.begin()) 
    Serial.println("modem.begin() succeeded");
  else
    Serial.println("ERROR, no modem answer.");
}

В блоке loop() вписываем функцию modem.getIMEI(), чтобы она вернула нам IMEI-номер модема. Для вашего GSM Shield этот номер будет уникальным.

void loop()
{
  // get modem IMEI
  Serial.print("Checking IMEI...");
  IMEI = modem.getIMEI();

Если getIMEI() вернет нам какой-нибудь приемлемый ответ, выводим его на Serial Monitor, а потом перезагружаем модем при помощи функции modem.begin().

if(IMEI != NULL)
  {
    Serial.println("Modem's IMEI: " + IMEI);
    Serial.print("Reseting modem...");
    modem.begin();

Перезагрузив, снова проверяем IMEI. Если результат снова приемлем, то модем функционирует как нужно.

if(modem.getIMEI() != NULL)
    {
      Serial.println("Modem is functoning properly");
    }

Однако если после перезагрузки модема приемлемого результата нет, сообщаем об ошибке.

else
    {
      Serial.println("Error: getIMEI() failed after modem.begin()");
    }

Если после запуска мы так и не получили IMEI, сообщаем об этом и завершаем программу.

}
  else
  {
    Serial.println("Error: Could not get IMEI");
  }
  while(true);
}


/*
Проверка модема с помощью GSM Shield

Этот скетч проверяет, правильно ли работает ваш модем. 

Цепь:
* GSM Shield, подключенный к Arduino (через 2-ой, 3-ий и 7-ой цифровые контакты)

Создан 12 июня 2012 Дэвидом дель Пералем (David del Peral),
модифицирован 21 ноября 2012 Томом Иго (Tom Igoe).
 */

// Библиотеки:
#include <GSM.h>

// Объект для проверки модема:
GSMModem modem;

// Переменная для номера IMEI:
String IMEI = "";

void setup()
{
  // Инициализируем последовательную передачу данных:
  Serial.begin(9600);

  // Запускаем тест модема (методом сброса и проверки ответа):
  Serial.print("Starting modem test...");  //  "Начинаем тест модема..."
  if(modem.begin()) 
    Serial.println("modem.begin() succeeded");  //  "Функция modem.begin() активирована успешно..."
  else
    Serial.println("ERROR, no modem answer.");  //  "Ошибка, модем не отвечает"
}

void loop()
{
  // Пытаемся получить IMEI-номер модема:
  Serial.print("Checking IMEI...");  //  "Проверяем IMEI..."
  IMEI = modem.getIMEI();

  // Проверяем ответ:
  if(IMEI != NULL)
  {
    // Показываем IMEI на Serial Monitor:
    Serial.println("Modem's IMEI: " + IMEI);  //  "IMEI-номер модема: "
    // Перезагружаем модем для проверки загрузки:
    Serial.print("Reseting modem...");  //  "Перезагружаем модем..."
    modem.begin();
    // Получаем и проверяем IMEI еще раз:
    if(modem.getIMEI() != NULL)
    {
      Serial.println("Modem is functoning properly");  //  "Модем работает должным образом"
    }
    else
    {
      Serial.println("Error: getIMEI() failed after modem.begin()");  //  "Ошибка: getIMEI() не сработала после modem.begin()"
    }
  }
  else
  {
    Serial.println("Error: Could not get IMEI");  //  "Ошибка: получить IMEI не удалось"
  }
  // Ничего не делаем:
  while(true);
}

См.также

  1. GSMModem Constructor
  2. begin()
  3. getIMEI()

Внешние ссылки