Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/GSMExamplesWebClient

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

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


Веб-клиент с помощью GSM Shield[1]

Этот скетч при помощи GSM Shield подключает плату Arduino к домашней странице Arduino, а затем выводит контент страницы через Serial Monitor.

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

  • Плата Arduino;
  • Модуль Arduino + Telefonica GSM/GPRS Shield;
  • SIM-карта с возможностью передачи данных;

Цепь

GSMShield ArduinoUno.png

Изображение Arduino GSM Shield поверх Arduino Uno

Код

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

  1. #include <GSM.h>

Функционал SIM-карты может быть заблокирован PIN-кодом. В таком случае определяем этот PIN-код как константу при помощи директивы #define. Если PIN-кода нет, оставляем вместо него пустое место.

  1. #define PINNUMBER ""

Определяем еще несколько констант, содержащих информацию о GPRS-сети, к которой вы собираетесь подключиться. Вам понадобится APN (Access Point Name, т.е. имя точки доступа), логин и пароль. Чтобы узнать всю эту информацию (включая самые последние обновления), свяжитесь со своим оператором. На этой странице можно найти настройки от различных операторов, но учтите, что она может быть устаревшей.

  1. #define GPRS_APN       "GPRS_APN"
  2. #define GPRS_LOGIN     "login"
  3. #define GPRS_PASSWORD  "password"

Создаем экземпляры классов GSM, GPRS и GSMClient.

  1. GSMClient client;
  2. GPRS gprs;
  3. GSM gsmAccess;

Создаем несколько переменных, в которых будем держать информацию о сервере, пути и порте, к которому вы собираетесь подключиться.

  1. char server[] = "arduino.cc";
  2. char path[] = "/";
  3. int port = 80;

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

  1. void setup(){
  2.   Serial.begin(9600);
  3.   Serial.println("Starting Arduino web client.");

Создаем локальную переменную для отслеживания статуса соединения. Она потребуется для того, чтобы скетч не начинал работать, пока SIM-карта не подключится к сети.

  1. boolean notConnected = true;

Подключаемся к сети при помощи функции gsmAccess.begin(), где PIN-код SIM-карты будет в качестве аргумента. Также подключаемся к GPRS при помощи функции gprs.attachGPRS(). Ей потребуется информация об APN, логине и пароле, которые мы объявили ранее. Разместив все это в цикле loop(), вы сможете постоянно проверять статус соединения, ожидая, пока функции для обеих сетей получат значение true.

Когда модем подключится и соединит себя с GPRS-сетью, функция gsmAccess() вернет значение GSM_READY. Воспользуемся им как сигналом для того, чтобы придать переменной notConnected значение true или false. Если подключиться не удастся, сообщаем об этом на Serial Monitor.

  1. while(notConnected)
  2.   {
  3.     if(gsmAccess.begin(PINNUMBER)==GSM_READY)
  4.         (gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD)==GPRS_READY))
  5.       notConnected = false;
  6.     else
  7.     {
  8.       Serial.println("Not connected");
  9.       delay(1000);
  10.     }
  11.   }

Пытаемся подключиться к серверу при помощи функции client.connect(). Ей требуется два аргумента – сервер и порт. Подключившись к серверу, при помощи функции client.print() делаем HTTP-запрос. Стандартный веб-запрос выглядит примерно так: «GET pathname HTTP/1.0». При этом функция client.print() отправит сообщение – как это обычно делает браузер.

  1. if (client.connect(server, port))
  2.   {
  3.     Serial.println("connected");
  4.     client.print("GET ");
  5.     client.print(path);
  6.     client.println(" HTTP/1.0");
  7.     client.println();
  8.   }

Если подключиться к серверу не удалось, сообщаем об этом на Serial Monitor и закрываем блок setup().

  1. else
  2.   {
  3.     Serial.println("connection failed");
  4.   }
  5. }

В секции loop() проверяем, вернулись ли от сервера какие-нибудь байты. Если да, считываем их и выводим на Serial Monitor.

  1. if (client.available())
  2.   {
  3.     char c = client.read();
  4.     Serial.print(c);
  5.   }

Если сервер отключился, что он обычно делает после выполнения HTTP-запроса, локально останавливаем клиент и закрываем секцию loop().

  1. if (!client.available() && !client.connected())
  2.   {
  3.     Serial.println();
  4.     Serial.println("disconnecting.");
  5.     client.stop();
  6.  
  7.     for(;;)
  8.       ;
  9.   }
  10. }

Загрузив код, откройте Serial Monitor. Далее на экране должен появиться HTML-код страницы http://arduino.cc. Это должно занять около минуты, поэтому не волнуйтесь, если не получите немедленную обратную связь.

  1. /*
  2. Веб-клиент с помощью GSM Shield
  3.  
  4. Этот скетч подключается к вебсайту при помощи GSM Shield.
  5.  
  6. Цепь:
  7. * GSM Shield, подключенный к Arduino
  8.  
  9. Создан 8 марта 2012 Томом Иго (Tom Igoe)
  10. */
  11.  
  12. // Библиотеки:
  13. #include <GSM.h>
  14.  
  15. // PIN-код:
  16. #define PINNUMBER ""
  17.  
  18. // Данные для APN:
  19. #define GPRS_APN       "GPRS_APN" // вставьте сюда ваш GPRS APN
  20. #define GPRS_LOGIN     "login"    // вставьте сюда ваш логин
  21. #define GPRS_PASSWORD  "password" // вставьте сюда ваш пароль
  22.  
  23. // Создаем экземпляры классов:
  24. GSMClient client;
  25. GPRS gprs;
  26. GSM gsmAccess; // включая параметр «true» для активации отладки
  27.  
  28. // Этот пример загружает URL «http://arduino.cc»
  29.  
  30. // URL, путь и порт (например, arduino.cc)
  31. char server[] = "arduino.cc";
  32. char path[] = "/";
  33. int port = 80; // 80 для HTTP
  34.  
  35. void setup()
  36. {
  37.   // инициализируем последовательную передачу данных:
  38.   Serial.begin(9600);
  39.   Serial.println("Starting Arduino web client.");  //  "Запускаем веб-клиент Arduino"
  40.   // Состояние соединения:
  41.   boolean notConnected = true;
  42.  
  43.   // Запускаем GSM Shield.
  44.   // Если у вашей SIM-карты есть PIN-код, указываем его параметром функции gsmAccess.begin():
  45.   while(notConnected)
  46.   {
  47.     if((gsmAccess.begin(PINNUMBER)==GSM_READY) &
  48.         (gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD)==GPRS_READY))
  49.       notConnected = false;
  50.     else
  51.     {
  52.       Serial.println("Not connected");  //  "Подключиться не удалось"
  53.       delay(1000);
  54.     }
  55.   }
  56.  
  57.   Serial.println("connecting...");  //  "Подключение..."
  58.  
  59.   // Если подключились, сообщаем об этом через Serial Monitor:
  60.   if (client.connect(server, port))
  61.   {
  62.     Serial.println("connected");  //  "Подключено"
  63.     // Делаем HTTP-запрос:
  64.     client.print("GET ");
  65.     client.print(path);
  66.     client.println(" HTTP/1.0");
  67.     client.println();
  68.   }
  69.   else
  70.   {
  71.     // Если подключиться к серверу не удалось:
  72.     Serial.println("connection failed");  //  "Подключиться не удалось"
  73.   }
  74. }
  75.  
  76. void loop()
  77. {
  78.   // Если от сервера доступны какие-нибудь байты,
  79.   // считываем их и выводим на Serial Monitor:
  80.   if (client.available())
  81.   {
  82.     char c = client.read();
  83.     Serial.print(c);
  84.   }
  85.  
  86.   // Если сервер отключился, останавливаем работу клиента:
  87.   if (!client.available() && !client.connected())
  88.   {
  89.     Serial.println();
  90.     Serial.println("disconnecting.");  //  "Отключение."
  91.     client.stop();
  92.  
  93.     // Просто ничего не делаем:
  94.     for(;;)
  95.       ;
  96.   }
  97. }

См.также

  1. GPRS Constructor
  2. attachGPRS()
  3. GSMClient Constructor
  4. ready()
  5. connect()
  6. beginWrite()
  7. write()
  8. endWrite()
  9. connected()
  10. read()
  11. available()
  12. peek()
  13. flush()
  14. stop()

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

  1. Arduino - GSM Web Client