Arduino:Примеры/WiFiWebClientRepeating

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

Перевод: Максим Кузьмин (Cubewriter) Перевел 364226 статей для сайта.</br>Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Повторяющийся запрос с помощью WiFi Shield[1]

Этот пример демонстрирует, как при помощи WiFi Shield делать повторяющийся HTTP-запрос. В процессе будет создан клиент, который каждые 10 секунд будет подключаться к странице https://www.arduino.cc/latest.txt, а ее содержание будет отображаться на Serial Monitor.

По умолчанию скетч написан таким образом, чтобы работать через WPA-зашифрованную сеть. Впрочем, его можно переписать, чтобы он вместо WPA работал с WEP – для этого поменяйте соответствующим образом функцию Wifi.begin().

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

  • Сетевой модуль Arduino WiFi Shield;
  • Плата Arduino, совместимая с Arduino;

Цепь

WiFi Shield для SPI-соединения с модулем HDG104 использует 10-ый, 11-ый, 12-ый и 13-ый контакты. Для управления SS-контактом SD-карты используется 4-ый цифровой контакт.

Также для этого примера понадобится доступ к 802.11b/g сети, подключенной к интернету. Кроме того, в скетче надо будет поменять сетевые настройки, чтобы они соответствовали сети, к которой вы собираетесь подключиться.

Для сетей, использующих шифрование через WPA и WPA Personal, понадобятся SSID и пароль. К сети, использующей шифрование через WPA Enterprise, Shield подключиться не сможет.

Пароли к сетям с WEP-шифрованием – это шестнадцатеричные строки, называемые «ключами». Причем WEP-сеть может иметь 4 разных ключа, каждому из которых будет присвоен свой собственный «индекс». Таким образом, для WEP-зашифрованных сетей вам понадобятся SSID, ключ и индекс ключа.

WiFiShield bb.png

На картинке выше сетевой модуль WiFi Shield установлен поверх платы Arduino.

Код

  1 /*
  2 Веб-клиент, делающий повторяющиеся HTTP-запросы 
  3 
  4 Этот скетч подключается к веб-серверу, а затем при помощи WiFi Shield
  5 делает запросы. 
  6 
  7 Цепь:
  8 * WiFi Shield, подключенный к SPI-контактам и 7-ому контакту Arduino
  9 
 10 Создан 23 апреля 2012,
 11 модифицирован 31 мая 2012 Томом Иго (Tom Igoe),
 12 еще раз модифицирован 13 января 2014 Федерико Ванзати (Federico Vanzati).
 13 
 14 http://www.arduino.cc/en/Tutorial/WifiWebClientRepeating
 15 
 16 Этот код не защищен авторским правом.
 17 */
 18 
 19 #include <SPI.h>
 20 #include <WiFi.h>
 21 
 22 char ssid[] = "yourNetwork";      //  SSID (имя) вашей сети
 23 char pass[] = "secretPassword";   //  пароль к вашей сети
 24 int keyIndex = 0;                 //  индекс ключа для вашей сети (нужно только для WEP)
 25 
 26 int status = WL_IDLE_STATUS;
 27 
 28 // Инициализируем клиентскую библиотеку WiFi:
 29 WiFiClient client;
 30 
 31 // Адрес сервера::
 32 char server[] = "www.arduino.cc";
 33 //IPAddress server(64,131,82,241);
 34 
 35 unsigned long lastConnectionTime = 0;            // время, когда вы в последний раз подключались к серверу (в миллисекундах)
 36 const unsigned long postingInterval = 10L * 1000L; // задержка между обновлениями (в миллисекундах)
 37 
 38 void setup() {
 39   // Инициализируем последовательную передачу данных и ждем открытия порта:
 40   Serial.begin(9600);
 41   while (!Serial) {
 42     ; // ждем подключения последовательного порта (нужно только для Leonardo)
 43   }
 44 
 45   // Проверяем наличие Shield:
 46   if (WiFi.status() == WL_NO_SHIELD) {
 47     Serial.println("WiFi shield not present");  //  "WiFi Shield не подключен"
 48     // Дальше не продолжаем:
 49     while (true);
 50   }
 51 
 52   String fv = WiFi.firmwareVersion();
 53   if (fv != "1.1.0") {
 54     Serial.println("Please upgrade the firmware");  //  "Пожалуйста, обновите прошивку"
 55   }
 56 
 57   // Пробуем подключиться к WiFi-сети:
 58   while (status != WL_CONNECTED) {
 59     Serial.print("Attempting to connect to SSID: ");  //  "Пробуем подключиться к SSID: "
 60     Serial.println(ssid);
 61     // Подключаемся к сети с шифрованием через WPA или WPA2.
 62     // Чтобы перенастроить скетч на подключение к WEP-сети, подправьте эту строчку:
 63     status = WiFi.begin(ssid, pass);
 64 
 65     // Ждем подключения 10 секунд:
 66     delay(10000);
 67   }
 68   // Итак, мы подключились, поэтому сообщаем об этом на Serial Monitor:
 69   printWifiStatus();
 70 }
 71 
 72 void loop() {
 73   // Если через сетевое подключение пришли какие-нибудь данные, 
 74   // выводим их на Serial Monitor. Это нужно только в отладочных целях:
 75   while (client.available()) {
 76     char c = client.read();
 77     Serial.write(c);
 78   }
 79 
 80   // Если с момента последнего подключения прошло 10 секунд,
 81   // подключаемся снова, а затем отправляем новый запрос:
 82   if (millis() - lastConnectionTime > postingInterval) {
 83     httpRequest();
 84   }
 85 
 86 }
 87 
 88 // Эта пользовательская функция осуществляет HTTP-подключение к серверу:
 89 void httpRequest() {
 90   // Перед отправкой нового запроса отключаем все соединения.
 91   // Это освободит сокет на WiFi Shield:
 92   client.stop();
 93 
 94   // Если подключение прошло успешно:
 95   if (client.connect(server, 80)) {
 96     Serial.println("connecting...");  //  "Подключение..."
 97     // Отправляем HTTP-Запрос типа PUT:
 98     client.println("GET /latest.txt HTTP/1.1");
 99     client.println("Host: www.arduino.cc");
100     client.println("User-Agent: ArduinoWiFi/1.1");
101     client.println("Connection: close");
102     client.println();
103 
104     // Отмечаем время, было установлено когда подключение:
105     lastConnectionTime = millis();
106   } else {
107     // Если подключиться не удалось, сообщаем об это на Serial Monitor:
108     Serial.println("connection failed");  //  "Подключиться не удалось"
109   }
110 }
111 
112 //  Пользовательская функция для отображения информации о сети и сетевом оборудовании: 
113 void printWifiStatus() {
114   // Показываем на Serial Monitor название (SSID) сети, к которой подключились:
115   Serial.print("SSID: ");
116   Serial.println(WiFi.SSID());
117 
118   // Показываем IP-адрес WiFi Shield:
119   IPAddress ip = WiFi.localIP();
120   Serial.print("IP Address: ");  //  "IP-адрес: "
121   Serial.println(ip);
122 
123   // Показываем мощность приемного сигнала:
124   long rssi = WiFi.RSSI();
125   Serial.print("signal strength (RSSI):");  //  "Мощность сигнала: (RSSI):"
126   Serial.print(rssi);
127   Serial.println(" dBm");
128 }

См.также

  1. ConnectNoEncryption : Demonstrates how to connect to an open network
  2. ConnectWithWEP : Demonstrates how to connect to a network that is encrypted with WEP
  3. ConnectWithWPA : Demonstrates how to connect to a network that is encrypted with WPA2 Personal
  4. ScanNetworks : Displays all WiFi networks in range
  5. WiFiChatServer : Set up a simple chat server
  6. WiFiWebClient : Connect to a remote webserver
  7. WiFiWebClientRepeating: Repeatedly make HTTP calls to a server
  8. WiFiWebServer : Serve a webpage from the WiFi shield

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