Arduino:Примеры/GSMExamplesGSMScanNetworks
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Сканирование сетей GSM[1]
Этот пример показывает IMEI-номер модема, потом проверяет, подключен ли он к оператору, а затем отображает мощность сигнала. Кроме того, он сканирует ближайшее сетевое пространство на наличие доступных сетей.
Необходимое оборудование
- Плата Arduino;
- Модуль Arduino + Telefonica GSM/GPRS Shield;
- SIM-карта;
Цепь
Изображение Arduino GSM Shield, установленного поверх Arduino Uno
Код
Сначала импортируем библиотеку GSM.
#include <GSM.h>
Функционал SIM-карты может быть заблокирован PIN-кодом, поэтому нам надо определить этот PIN-код в виде константы, для чего пригодится директива #define. Если PIN-кода нет, оставляем это место пустым.
#define PINNUMBER ""
Создаем экземпляры классов GSM, GSMScanner и GSMModem.
GSM gsmAccess;
GSMScanner scannerNetworks;
GSMModem modemTest;
Создаем переменную, в которой будет храниться IMEI-номер, а также статусное сообщение об ошибке, которое в случае необходимости будет выводиться на Serial Monitor.
String IMEI = "";
String errortext = "ERROR";
В секции setup() инициализируем последовательную передачу данных. Запустив соединение, отсылаем на Serial Monitor сообщение, оповещающее о начале работы скетча. Затем вызываем функцию scannerNetworks.begin(), чтобы перезагрузить модем.
void setup(){
Serial.begin(9600);
Serial.println("GSM networks scanner");
scannerNetworks.begin();
Создаем локальную переменную для отслеживания статуса соединения. Это нужно, чтобы скетч не начинал работать, пока SIM-карта не подключится к сети.
boolean notConnected = true;
Подключаемся к сети при помощи функции gmsAccess.begin(), где PIN-код будет в качестве аргумента. Помещаем ее в цикле while(), благодаря чему сможем постоянно проверять статус соединения. Когда модем подключится, функция gsmAccess() вернет значение GSM_READY. Воспользуемся им как сигналом для того, чтобы задать переменной notConnected значение true или false. Если подключиться не удастся, сообщаем об этом через Serial Monitor.
while(notConnected)
{
if(gsmAccess.begin(PINNUMBER)==GSM_READY)
notConnected = false;
else
{
Serial.println("Not connected");
delay(1000);
}
}
При помощи функции modemTest.getIMEI() получаем IMEI-номер модема, а затем выводим его на Serial Monitor.
Serial.print("Modem IMEI: ");
IMEI = modemTest.getIMEI();
IMEI.replace("\n","");
if(IMEI != NULL)
Serial.println(IMEI);
В секции loop() сканируем доступные сети, а затем выводим их на Serial Monitor. Это может занять некоторое время.
Serial.println("Scanning available networks. May take some seconds.");
Serial.println(scannerNetworks.readNetworks());
Показываем на Serial Monitor оператора, который подключен в данный момент, а также мощность сигнала. Этот показатель будет варьироваться в диапазоне от 0 до 31, где «0» – это самый низкий, а «31» – самый высокий. Закрываем loop().
Serial.print("Current carrier: ");
Serial.println(scannerNetworks.getCurrentCarrier());
Serial.print("Signal Strength: ");
Serial.print(scannerNetworks.getSignalStrength());
Serial.println(" [0-31]");
Чтобы увидеть статус соединения, загрузите код, а затем откройте Serial Monitor.
/*
Поиск сетей GSM
Этот пример «добывает» IMEI-номер SIM-карты, выводит его на Serial Monitor,
а затем проверяет, подключена ли она к оператору.
Если да, скетч показывает телефонный номер, привязанный к этой SIM-карте.
Далее он сканирует окружающее сетевое пространство на предмет
находящихся поблизости сетей и выводит на Serial Monitor мощность их сигнала.
Цепь:
* GSM Shield, подключенный к Arduino
Создан 8 марта 2012 Томом Иго (Tom Igoe),
реализован Хавьером Каразо (Javier Carazo),
модифицирован 18 января 2013 Скоттом Фитцджеральдом (Scott Fitzgerald).
*/
// Библиотеки:
#include <GSM.h>
// PIN-код:
#define PINNUMBER ""
// Создаем экземпляры классов:
GSM gsmAccess; // включая параметр «true» для активации отладки
GSMScanner scannerNetworks;
GSMModem modemTest;
// Строка для IMEI-номера:
String IMEI = "";
// Статусное сообщение для Serial Monitor:
String errortext = "ERROR"; // "Ошибка"
void setup()
{
// Инициализируем последовательную передачу данных:
Serial.begin(9600);
Serial.println("GSM networks scanner"); // "Поисковик сетей GSM"
scannerNetworks.begin();
// Состояние соединения:
boolean notConnected = true;
// Запускаем GSM shield.
// Если у вашей SIM_карты есть PIN-код, делаем его параметром функции begin():
while(notConnected)
{
if(gsmAccess.begin(PINNUMBER)==GSM_READY)
notConnected = false;
else
{
Serial.println("Not connected"); // "Подключиться не удалось"
delay(1000);
}
}
// Пытаемся получить параметры модема
// (точнее IMEI, т.е. уникальный идентификатор модема):
Serial.print("Modem IMEI: "); // "IMEI-номер модема: "
IMEI = modemTest.getIMEI();
IMEI.replace("\n","");
if(IMEI != NULL)
Serial.println(IMEI);
// Оператор, подключенный в данный момент:
Serial.print("Current carrier: "); // "Текущий оператор: "
Serial.println(scannerNetworks.getCurrentCarrier());
// Эта функция возвращает мощность сигнала и BER.
// Диапазон мощности сигнала: 0-31, где 31 – это больше 51 dBm.
// BER – это количество ошибок в потоке данных (Bit Error Rate),
// диапазон: 0-7, 99 – «не определено».
Serial.print("Signal Strength: "); // "Мощность сигнала: "
Serial.print(scannerNetworks.getSignalStrength());
Serial.println(" [0-31]");
}
void loop()
{
// Сканируем имеющиеся сети, отображаем список сетей:
Serial.println("Scanning available networks. May take some seconds."); // "Сканирование доступных сетей. Может занять несколько секунд."
Serial.println(scannerNetworks.readNetworks());
// Оператор, подключенный в данный момент:
Serial.print("Current carrier: "); // "Текущий оператор: "
Serial.println(scannerNetworks.getCurrentCarrier());
// Эта функция возвращает мощность сигнала и BER.
// Диапазон мощности сигнала: 0-31, где 31 – это больше 51 dBm.
// BER – это количество ошибок в потоке данных (Bit Error Rate),
// диапазон: 0-7, 99 – «не определено».
Serial.print("Signal Strength: "); // "Мощность сигнала: "
Serial.print(scannerNetworks.getSignalStrength());
Serial.println(" [0-31]");
}
См.также
- GSMScanner
- begin()
- getCurrentCarrier()
- getSignalStrength()
- readNetworks()
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino