Arduino:Примеры/GSMExamplesWebClient: различия между версиями
Myagkij (обсуждение | вклад) м (Замена текста — «<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">») |
Нет описания правки |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 23: | Строка 23: | ||
Для начала импортируем библиотеку '''GSM'''. | Для начала импортируем библиотеку '''GSM'''. | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
#include <GSM.h> | #include <GSM.h> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 29: | Строка 29: | ||
Функционал '''SIM'''-карты может быть заблокирован '''PIN'''-кодом. В таком случае определяем этот '''PIN'''-код как константу при помощи директивы #define. Если '''PIN'''-кода нет, оставляем вместо него пустое место. | Функционал '''SIM'''-карты может быть заблокирован '''PIN'''-кодом. В таком случае определяем этот '''PIN'''-код как константу при помощи директивы #define. Если '''PIN'''-кода нет, оставляем вместо него пустое место. | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
#define PINNUMBER "" | #define PINNUMBER "" | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 35: | Строка 35: | ||
Определяем еще несколько констант, содержащих информацию о '''GPRS'''-сети, к которой вы собираетесь подключиться. Вам понадобится '''APN''' ('''Access Point Name''', т.е. имя точки доступа), логин и пароль. Чтобы узнать всю эту информацию (включая самые последние обновления), свяжитесь со своим оператором. На [http://forums.pinstack.com/f24/tcp_apn_wap_gateway_port_carrier_settings-360 этой странице] можно найти настройки от различных операторов, но учтите, что она может быть устаревшей. | Определяем еще несколько констант, содержащих информацию о '''GPRS'''-сети, к которой вы собираетесь подключиться. Вам понадобится '''APN''' ('''Access Point Name''', т.е. имя точки доступа), логин и пароль. Чтобы узнать всю эту информацию (включая самые последние обновления), свяжитесь со своим оператором. На [http://forums.pinstack.com/f24/tcp_apn_wap_gateway_port_carrier_settings-360 этой странице] можно найти настройки от различных операторов, но учтите, что она может быть устаревшей. | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
#define GPRS_APN "GPRS_APN" | #define GPRS_APN "GPRS_APN" | ||
#define GPRS_LOGIN "login" | #define GPRS_LOGIN "login" | ||
Строка 43: | Строка 43: | ||
Создаем экземпляры классов '''GSM''', '''GPRS''' и '''GSMClient'''. | Создаем экземпляры классов '''GSM''', '''GPRS''' и '''GSMClient'''. | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
GSMClient client; | GSMClient client; | ||
GPRS gprs; | GPRS gprs; | ||
Строка 51: | Строка 51: | ||
Создаем несколько переменных, в которых будем держать информацию о сервере, пути и порте, к которому вы собираетесь подключиться. | Создаем несколько переменных, в которых будем держать информацию о сервере, пути и порте, к которому вы собираетесь подключиться. | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
char server[] = "arduino.cc"; | char server[] = "arduino.cc"; | ||
char path[] = "/"; | char path[] = "/"; | ||
Строка 59: | Строка 59: | ||
В секции setup() инициализируем последовательную передачу данных. Запустив соединение, отсылаем сообщение, оповещающее о начале работы скетча. | В секции setup() инициализируем последовательную передачу данных. Запустив соединение, отсылаем сообщение, оповещающее о начале работы скетча. | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
void setup(){ | void setup(){ | ||
Serial.begin(9600); | Serial.begin(9600); | ||
Строка 67: | Строка 67: | ||
Создаем локальную переменную для отслеживания статуса соединения. Она потребуется для того, чтобы скетч не начинал работать, пока '''SIM'''-карта не подключится к сети. | Создаем локальную переменную для отслеживания статуса соединения. Она потребуется для того, чтобы скетч не начинал работать, пока '''SIM'''-карта не подключится к сети. | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
boolean notConnected = true; | boolean notConnected = true; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 75: | Строка 75: | ||
Когда модем подключится и соединит себя с '''GPRS'''-сетью, функция gsmAccess() вернет значение '''GSM_READY'''. Воспользуемся им как сигналом для того, чтобы придать переменной notConnected значение true или false. Если подключиться не удастся, сообщаем об этом на '''Serial Monitor.''' | Когда модем подключится и соединит себя с '''GPRS'''-сетью, функция gsmAccess() вернет значение '''GSM_READY'''. Воспользуемся им как сигналом для того, чтобы придать переменной notConnected значение true или false. Если подключиться не удастся, сообщаем об этом на '''Serial Monitor.''' | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
while(notConnected) | while(notConnected) | ||
{ | { | ||
Строка 91: | Строка 91: | ||
Пытаемся подключиться к серверу при помощи функции client.connect(). Ей требуется два аргумента – сервер и порт. Подключившись к серверу, при помощи функции client.print() делаем '''HTTP'''-запрос. Стандартный веб-запрос выглядит примерно так: '''«GET pathname HTTP/1.0»'''. При этом функция client.print() отправит сообщение – как это обычно делает браузер. | Пытаемся подключиться к серверу при помощи функции client.connect(). Ей требуется два аргумента – сервер и порт. Подключившись к серверу, при помощи функции client.print() делаем '''HTTP'''-запрос. Стандартный веб-запрос выглядит примерно так: '''«GET pathname HTTP/1.0»'''. При этом функция client.print() отправит сообщение – как это обычно делает браузер. | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
if (client.connect(server, port)) | if (client.connect(server, port)) | ||
{ | { | ||
Строка 104: | Строка 104: | ||
Если подключиться к серверу не удалось, сообщаем об этом на '''Serial Monitor''' и закрываем блок setup(). | Если подключиться к серверу не удалось, сообщаем об этом на '''Serial Monitor''' и закрываем блок setup(). | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
else | else | ||
{ | { | ||
Строка 114: | Строка 114: | ||
В секции loop() проверяем, вернулись ли от сервера какие-нибудь байты. Если да, считываем их и выводим на '''Serial Monitor'''. | В секции loop() проверяем, вернулись ли от сервера какие-нибудь байты. Если да, считываем их и выводим на '''Serial Monitor'''. | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
if (client.available()) | if (client.available()) | ||
{ | { | ||
Строка 124: | Строка 124: | ||
Если сервер отключился, что он обычно делает после выполнения '''HTTP'''-запроса, локально останавливаем клиент и закрываем секцию loop(). | Если сервер отключился, что он обычно делает после выполнения '''HTTP'''-запроса, локально останавливаем клиент и закрываем секцию loop(). | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
if (!client.available() && !client.connected()) | if (!client.available() && !client.connected()) | ||
{ | { | ||
Строка 139: | Строка 139: | ||
Загрузив код, откройте '''Serial Monitor'''. Далее на экране должен появиться '''HTML'''-код страницы http://arduino.cc. Это должно занять около минуты, поэтому не волнуйтесь, если не получите немедленную обратную связь. | Загрузив код, откройте '''Serial Monitor'''. Далее на экране должен появиться '''HTML'''-код страницы http://arduino.cc. Это должно занять около минуты, поэтому не волнуйтесь, если не получите немедленную обратную связь. | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
/* | /* | ||
Веб-клиент с помощью GSM Shield | Веб-клиент с помощью GSM Shield | ||
Строка 259: | Строка 259: | ||
<references /> | <references /> | ||
{{Навигационная таблица/Портал/Arduino}} | |||
[[Категория:Пример]] | [[Категория:Пример]] | ||
[[Категория:Примеры]] | [[Категория:Примеры]] | ||
[[Категория:Пример программирования Arduino]] | [[Категория:Пример программирования Arduino]] | ||
[[Категория:Примеры программирования Arduino]] | [[Категория:Примеры программирования Arduino]] |
Текущая версия от 12:35, 8 июля 2023
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Веб-клиент с помощью GSM Shield[1]
Этот скетч при помощи GSM Shield подключает плату Arduino к домашней странице Arduino, а затем выводит контент страницы через Serial Monitor.
Необходимое оборудование
- Плата Arduino;
- Модуль Arduino + Telefonica GSM/GPRS Shield;
- SIM-карта с возможностью передачи данных;
Цепь
Изображение Arduino GSM Shield поверх Arduino Uno
Код
Для начала импортируем библиотеку GSM.
#include <GSM.h>
Функционал SIM-карты может быть заблокирован PIN-кодом. В таком случае определяем этот PIN-код как константу при помощи директивы #define. Если PIN-кода нет, оставляем вместо него пустое место.
#define PINNUMBER ""
Определяем еще несколько констант, содержащих информацию о GPRS-сети, к которой вы собираетесь подключиться. Вам понадобится APN (Access Point Name, т.е. имя точки доступа), логин и пароль. Чтобы узнать всю эту информацию (включая самые последние обновления), свяжитесь со своим оператором. На этой странице можно найти настройки от различных операторов, но учтите, что она может быть устаревшей.
#define GPRS_APN "GPRS_APN"
#define GPRS_LOGIN "login"
#define GPRS_PASSWORD "password"
Создаем экземпляры классов GSM, GPRS и GSMClient.
GSMClient client;
GPRS gprs;
GSM gsmAccess;
Создаем несколько переменных, в которых будем держать информацию о сервере, пути и порте, к которому вы собираетесь подключиться.
char server[] = "arduino.cc";
char path[] = "/";
int port = 80;
В секции setup() инициализируем последовательную передачу данных. Запустив соединение, отсылаем сообщение, оповещающее о начале работы скетча.
void setup(){
Serial.begin(9600);
Serial.println("Starting Arduino web client.");
Создаем локальную переменную для отслеживания статуса соединения. Она потребуется для того, чтобы скетч не начинал работать, пока SIM-карта не подключится к сети.
boolean notConnected = true;
Подключаемся к сети при помощи функции gsmAccess.begin(), где PIN-код SIM-карты будет в качестве аргумента. Также подключаемся к GPRS при помощи функции gprs.attachGPRS(). Ей потребуется информация об APN, логине и пароле, которые мы объявили ранее. Разместив все это в цикле loop(), вы сможете постоянно проверять статус соединения, ожидая, пока функции для обеих сетей получат значение true.
Когда модем подключится и соединит себя с GPRS-сетью, функция gsmAccess() вернет значение GSM_READY. Воспользуемся им как сигналом для того, чтобы придать переменной notConnected значение true или false. Если подключиться не удастся, сообщаем об этом на Serial Monitor.
while(notConnected)
{
if(gsmAccess.begin(PINNUMBER)==GSM_READY)
(gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD)==GPRS_READY))
notConnected = false;
else
{
Serial.println("Not connected");
delay(1000);
}
}
Пытаемся подключиться к серверу при помощи функции client.connect(). Ей требуется два аргумента – сервер и порт. Подключившись к серверу, при помощи функции client.print() делаем HTTP-запрос. Стандартный веб-запрос выглядит примерно так: «GET pathname HTTP/1.0». При этом функция client.print() отправит сообщение – как это обычно делает браузер.
if (client.connect(server, port))
{
Serial.println("connected");
client.print("GET ");
client.print(path);
client.println(" HTTP/1.0");
client.println();
}
Если подключиться к серверу не удалось, сообщаем об этом на Serial Monitor и закрываем блок setup().
else
{
Serial.println("connection failed");
}
}
В секции loop() проверяем, вернулись ли от сервера какие-нибудь байты. Если да, считываем их и выводим на Serial Monitor.
if (client.available())
{
char c = client.read();
Serial.print(c);
}
Если сервер отключился, что он обычно делает после выполнения HTTP-запроса, локально останавливаем клиент и закрываем секцию loop().
if (!client.available() && !client.connected())
{
Serial.println();
Serial.println("disconnecting.");
client.stop();
for(;;)
;
}
}
Загрузив код, откройте Serial Monitor. Далее на экране должен появиться HTML-код страницы http://arduino.cc. Это должно занять около минуты, поэтому не волнуйтесь, если не получите немедленную обратную связь.
/*
Веб-клиент с помощью GSM Shield
Этот скетч подключается к вебсайту при помощи GSM Shield.
Цепь:
* GSM Shield, подключенный к Arduino
Создан 8 марта 2012 Томом Иго (Tom Igoe)
*/
// Библиотеки:
#include <GSM.h>
// PIN-код:
#define PINNUMBER ""
// Данные для APN:
#define GPRS_APN "GPRS_APN" // вставьте сюда ваш GPRS APN
#define GPRS_LOGIN "login" // вставьте сюда ваш логин
#define GPRS_PASSWORD "password" // вставьте сюда ваш пароль
// Создаем экземпляры классов:
GSMClient client;
GPRS gprs;
GSM gsmAccess; // включая параметр «true» для активации отладки
// Этот пример загружает URL «http://arduino.cc»
// URL, путь и порт (например, arduino.cc)
char server[] = "arduino.cc";
char path[] = "/";
int port = 80; // 80 для HTTP
void setup()
{
// инициализируем последовательную передачу данных:
Serial.begin(9600);
Serial.println("Starting Arduino web client."); // "Запускаем веб-клиент Arduino"
// Состояние соединения:
boolean notConnected = true;
// Запускаем GSM Shield.
// Если у вашей SIM-карты есть PIN-код, указываем его параметром функции gsmAccess.begin():
while(notConnected)
{
if((gsmAccess.begin(PINNUMBER)==GSM_READY) &
(gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD)==GPRS_READY))
notConnected = false;
else
{
Serial.println("Not connected"); // "Подключиться не удалось"
delay(1000);
}
}
Serial.println("connecting..."); // "Подключение..."
// Если подключились, сообщаем об этом через Serial Monitor:
if (client.connect(server, port))
{
Serial.println("connected"); // "Подключено"
// Делаем HTTP-запрос:
client.print("GET ");
client.print(path);
client.println(" HTTP/1.0");
client.println();
}
else
{
// Если подключиться к серверу не удалось:
Serial.println("connection failed"); // "Подключиться не удалось"
}
}
void loop()
{
// Если от сервера доступны какие-нибудь байты,
// считываем их и выводим на Serial Monitor:
if (client.available())
{
char c = client.read();
Serial.print(c);
}
// Если сервер отключился, останавливаем работу клиента:
if (!client.available() && !client.connected())
{
Serial.println();
Serial.println("disconnecting."); // "Отключение."
client.stop();
// Просто ничего не делаем:
for(;;)
;
}
}
См.также
- GPRS Constructor
- attachGPRS()
- GSMClient Constructor
- ready()
- connect()
- beginWrite()
- write()
- endWrite()
- connected()
- read()
- available()
- peek()
- flush()
- stop()
Внешние ссылки
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