Arduino:Примеры/GSMExamplesSendSMS: различия между версиями
Нет описания правки |
Нет описания правки |
||
Строка 283: | Строка 283: | ||
<references /> | <references /> | ||
{{Навигационная таблица/Портал/Arduino}} | |||
[[Категория:Пример]] | [[Категория:Пример]] | ||
[[Категория:Примеры]] | [[Категория:Примеры]] | ||
[[Категория:Пример программирования Arduino]] | [[Категория:Пример программирования Arduino]] | ||
[[Категория:Примеры программирования Arduino]] | [[Категория:Примеры программирования Arduino]] |
Текущая версия от 12:34, 8 июля 2023
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Отправка SMS[1]
Этот скетч отправляет SMS-сообщение, используя для этого тандем из платы Arduino и модуля GSM Shield. Номер, на который будет передано SMS, а также само сообщение вводятся через Serial Monitor.
Необходимое оборудование
- Плата Arduino;
- Модуль Arduino + Telefonica GSM/GPRS Shield;
- SIM-карта;
Цепь
Изображение модуля Arduino GSM Shield, установленного поверх платы Arduino Uno
Код
Для начала импортируем библиотеку GSM.
#include <GSM.h>
При помощи директивы #define определяем PIN-код как константу, чтобы разблокировать SIM-карту. Если PIN-кода нет, оставляем это место пустым.
#define PINNUMBER ""
Создаем экземпляры классов GSM и GSM_SMS.
GSM gsmAccess;
GSM_SMS sms;
В блоке setup() запускаем последовательную передачу данных на компьютер. Запустив, отсылаем на Serial Monitor сообщение, информирующее о начале работы скетча.
void setup(){
Serial.begin(9600);
Serial.println("SMS Messages Sender");
Создаем локальную переменную, чтобы отслеживать статус соединения. Это нужно для того, чтобы скетч не начинал работать, пока SIM-карта не подключится к сети.
boolean notConnected = true;
Подключаемся к сети при помощи функции gsmAccess.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);
}
}
Заканчиваем секцию setup() выводом на Serial Monitor сообщения о том, что инициализация GSM прошла успешно.
Serial.println("GSM initialized.");
}
Создаем функцию типа int под названием readSerial. Она будет делать перебор входящих данных, присланных через Serial Monitor, попутно сохраняя номер, на который вы хотите отправить SMS, а также само сообщение. В качестве аргумента у нее будет массив типа char.
int readSerial(char result[])
{
Создаем переменную, которая будет пересчитывать содержимое буфера последовательного порта, а потом запускаем цикл while(), который будет выполнятся непрерывно.
int i = 0;
while(1)
{
Покуда в буфере последовательного порта доступна какая-либо информация, считываем ее в переменную под названием inChar.
while (Serial.available() > 0)
{
char inChar = Serial.read();
Если добрались до символа новой строки, стираем содержимое массива, очищаем буфер последовательного порта и выполняем функцию.
if (inChar == '\n')
{
result[i] = '\0';
Serial.flush();
return 0;
}
Если входящий символ является ASCII-символом, а не символом новой строки или возврата строки, добавляем его к массиву и увеличиваем индекс. Затем закрываем циклы while() и саму функцию.
if(inChar!='\r')
{
result[i] = inChar;
i++;
}
}
}
}
В секции loop() создаем массив типа char под названием remoteNumber, чтобы хранить в нем номер, на который вы хотите отправить SMS. Далее вызываем только что созданную функцию readSerial(), где remoteNumber будет в качестве аргумента. Эта функция заполнит массив remoteNumber номером, которому будет адресоваться SMS-сообщение.
Serial.print("Enter a mobile number: ");
char remoteNumber[20];
readSerial(remoteNumber);
Serial.println(remoteNumber);
Создаем еще один массив типа char, но уже под названием txtMsg. Он будет содержать в себе содержимое вашего SMS и станет аргументом для функции readSerial().
Serial.print("Now, enter SMS content: ");
char txtMsg[200];
readSerial(txtMsg);
Далее вызываем три функции. Первая (чтобы начать отправку сообщения) – это sms.beginSMS() с аргументом в виде массива remoteNumber. Вторая (чтобы отправить сообщение) – sms.print(). Третья (чтобы завершить процесс отправки) – sms.endSMS(). Печатаем пару «диагностических» сообщений и закрываем loop(). Ваше сообщение полетело к адресату!
Serial.println("SENDING");
Serial.println();
Serial.println("Message:");
Serial.println(txtMsg);
sms.beginSMS(remoteNumber);
sms.print(txtMsg);
sms.endSMS();
Serial.println("\nCOMPLETE!\n");
}
Загрузив код, открываем Serial Monitor. Убедитесь, что он настроен таким образом, что при нажатии на клавишу ввода отсылается только символ новой строки. Когда скетч попросит вас ввести желаемый номер, впишите цифры и нажмите клавишу ввода. Затем вас попросят ввести сообщение. Напечатайте его и снова нажмите клавишу ввода.
/*
Отправщик SMS
Этот скетч, предназначенный для Arduino GSM Shield,
отправляет на указанный адрес SMS-сообщение, введенное через Serial Monitor.
Подключив Shield к Arduino и настроив скетч, откройте Serial Monitor
и, увидев сообщение READY, начинайте писать сообщение.
Убедитесь, что Serial Monitor настроен таким образом,
чтобы при нажатии на клавишу ввода отправлять только символ новой строки.
Цепь:
* GSM Shield, подключенный к Arduino
Создан 25 февраля 2012 Томом Иго (Tom Igoe).
Этот код не защищен авторским правом.
*/
// Библиотека:
#include <GSM.h>
#define PINNUMBER ""
// Создаем экземпляры классов GSM и GSM_SMS:
GSM gsmAccess; // включая параметр «true» для активации отладки
GSM_SMS sms;
void setup()
{
// Инициализируем последовательную передачу данных:
Serial.begin(9600);
Serial.println("SMS Messages Sender"); // "Отправщик SMS-сообщений"
// Состояние соединения:
boolean notConnected = true;
// Запускаем GSM Shield.
// Если ваша SIM-карта заблокирована PIN-кодом,
// ставим его параметром в функции gsmAccess.begin():
while(notConnected)
{
if(gsmAccess.begin(PINNUMBER)==GSM_READY)
notConnected = false;
else
{
Serial.println("Not connected"); // "Подключиться не удалось"
delay(1000);
}
}
Serial.println("GSM initialized"); // "GSM не инициализирован"
}
void loop()
{
Serial.print("Enter a mobile number: "); // "Введите мобильный номер"
char remoteNumber[20]; // телефонный номер, которому будем слать SMS
readSerial(remoteNumber);
Serial.println(remoteNumber);
// Текст SMS-сообщения:
Serial.print("Now, enter SMS content: "); // "Теперь введите SMS-сообщение: "
char txtMsg[200];
readSerial(txtMsg);
Serial.println("SENDING"); // "Отправка"
Serial.println();
Serial.println("Message:"); // "Сообщение:"
Serial.println(txtMsg);
// Отправляем сообщение:
sms.beginSMS(remoteNumber);
sms.print(txtMsg);
sms.endSMS();
Serial.println("\nCOMPLETE!\n"); // "\nГотово!\n"
}
/*
Считываем входящие данные, пришедшие через последовательный порт
*/
int readSerial(char result[])
{
int i = 0;
while(1)
{
while (Serial.available() > 0)
{
char inChar = Serial.read();
if (inChar == '\n')
{
result[i] = '\0';
Serial.flush();
return 0;
}
if(inChar!='\r')
{
result[i] = inChar;
i++;
}
}
}
}
См.также
- GSM Constructor
- GSM.begin()
- GSM.shutdown()
- GSM_SMS Constructor
- beginSMS()
- ready()
- endSMS()
- available()
- remoteNumber()
- read()
- write()
- print()
- peek()
- flush()
Внешние ссылки
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