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

Arduino:Примеры/WiFiWebClient

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

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

Контакты:

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


Веб-клиент при помощи WiFi Shield[1]

Этот пример демонстрирует, как делать HTTP-запрос при помощи модуля WiFi Shield – это будет запрос к Google по слову «Arduino». Результаты поиска будут показаны в HTML-виде через 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. Веб-клиент при помощи WiFi Shield
  3.  
  4. Этот скетч при помощи WiFi Shield подключается к вебсайту
  5. (в данном случае – к http://www.google.com).
  6.  
  7. По умолчанию скетч работает с сетями, использующими WPA-шифрование.
  8. Но его можно настроить таким образом, чтобы он работал с WEP –
  9. для этого соответствующим образом измените функцию Wifi.begin().
  10.  
  11. Цепь:
  12. * WiFi Shield, подключенный к Arduino
  13.  
  14. Создан 13 июля 2010 пользователем dlf (Metodo2 srl),
  15. модифицирован 31 мая 2012 Томом Иго (Tom Igoe).
  16. */
  17.  
  18. #include <SPI.h>
  19. #include <WiFi.h>
  20.  
  21. char ssid[] = "yourNetwork";       // название (SSID) вашей сети
  22. char pass[] = "secretPassword";    // пароль к вашей сети (для WPA; если работаете с WEP-сетью, вам нужен будет ключ)
  23. int keyIndex = 0;                  // индекс ключа к вашей сети (нужно только для WEP)
  24.  
  25. int status = WL_IDLE_STATUS;
  26. // Если не хотите использовать DNS (и тем самым уменьшить размер скетча)
  27. // вместо названия (веб-адреса) сервера используйте числовой IP:
  28. //IPAddress server(74,125,232,128);  // числовой IP для Google (без DNS)
  29. char server[] = "www.google.com";    // web-адрес для Google (с DNS)
  30.  
  31. // Инициализируем библиотеку WiFi:
  32. WiFiClient client;
  33.  
  34. void setup() {
  35.   // Инициализируем последовательную передачу данных и ждем открытия порта:
  36.   Serial.begin(9600);
  37.   while (!Serial) {
  38.     ; // ждем подключения порта (нужно только для Leonardo)
  39.   }
  40.  
  41.   // Проверяем наличие WiFi Shield:
  42.   if (WiFi.status() == WL_NO_SHIELD) {
  43.     Serial.println("WiFi shield not present");  //  "WiFi Shield не подключен"
  44.     // Дальше не продолжаем:
  45.     while(true);
  46.   }
  47.  
  48.   // Пытаемся подключиться к WiFI-сети::
  49.   while (status != WL_CONNECTED) {
  50.     Serial.print("Attempting to connect to SSID: ");  //  "Пробуем подключиться к SSID: "
  51.     Serial.println(ssid);
  52.     // Подключаемся к сети с шифрованием WPA/WPA2. Измените эту строчку,
  53.     // если используете открытую или WEP-зашифрованную сеть:    
  54.     status = WiFi.begin(ssid, pass);
  55.  
  56.     // Ждем подключения 10 секунд:
  57.     delay(10000);
  58.   }
  59.   Serial.println("Connected to wifi");  //  "Подключение к WiFi прошло успешно"
  60.   printWifiStatus();
  61.  
  62.   Serial.println("\nStarting connection to server...");  //  "\nЗапускаем подключение к серверу..."
  63.   // Если подключение установлено, сообщаем об этом на Serial Monitor:
  64.   if (client.connect(server, 80)) {
  65.     Serial.println("connected to server");  //  "Подключение к серверу прошло успешно"
  66.     // Делаем HTTP-Запрос:
  67.     client.println("GET /search?q=arduino HTTP/1.1");
  68.     client.println("Host: www.google.com");
  69.     client.println("Connection: close");
  70.     client.println();
  71.   }
  72. }
  73.  
  74. void loop() {
  75.   // Если от сервера пришли какие-нибудь байты,
  76.   // считываем их и показываем на Serial Monitor:
  77.   while (client.available()) {
  78.     char c = client.read();
  79.     Serial.write(c);
  80.   }
  81.  
  82.   // Если сервер отключился, останавливаем клиент:
  83.   if (!client.connected()) {
  84.     Serial.println();
  85.     Serial.println("disconnecting from server.");  //  "Соединение с сервером разорвано"
  86.     client.stop();
  87.  
  88.     // Дальше ничего не делаем (вечно):
  89.     while(true);
  90.   }
  91. }
  92.  
  93. // Пользовательская функция для показа на Serial Monitor
  94. // характеристик сети и используемого сетевого оборудования:
  95. void printWifiStatus() {
  96.   // Показываем на Serial Monitor название (SSID) сети, к которой подключились:
  97.   Serial.print("SSID: ");
  98.   Serial.println(WiFi.SSID());
  99.  
  100.   // Показываем IP-адрес WiFi Shield:
  101.   IPAddress ip = WiFi.localIP();
  102.   Serial.print("IP Address: ");  //  "IP-адрес: "
  103.   Serial.println(ip);
  104.  
  105.   // Показываем мощность приемного сигнала:
  106.   long rssi = WiFi.RSSI();
  107.   Serial.print("signal strength (RSSI):");  //  "Мощность сигнала (RSSI): "
  108.   Serial.print(rssi);
  109.   Serial.println(" dBm");
  110. }

См.также

  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