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

Arduino:Примеры/WiFiWebClientRepeating

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

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

Контакты:

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


Повторяющийся запрос с помощью 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

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

  1. Arduino - WiFi Web Client Repeating