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

Arduino:Примеры/wifi101WiFiWebClientRepeating

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

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

Контакты:

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


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

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

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

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

  • Модуль Arduino WiFi Shield 101
  • Плата Arduino или Genuino Zero (или MKR1000)

Цепь

7-ой цифровой контакт используется в качестве контакта для «рукопожатия» между WiFi Shield 101 и платой, т.е. ни для каких других целей его использовать не следует.

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

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

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

ArduinoWiFi101.png

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

Код

  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 <WiFi101.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.     ; // ждем подключения последовательного порта (нужно только для плат со штатным USB-портом)
  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.   // пытаемся подключиться к WiFi-сети:
  53.   while ( status != WL_CONNECTED) {
  54.     Serial.print("Attempting to connect to SSID: ");  //  "Пытаемся подключиться к SSID: "
  55.     Serial.println(ssid);
  56.     // Подключаемся к WPA/WPA2 сети (если у вас открытая сеть или WEP-сеть, эту строчку нужно поменять):
  57.     status = WiFi.begin(ssid, pass);
  58.  
  59.     // 10 секунд ждем подключения:
  60.     delay(10000);
  61.   }
  62.   // мы подключились, значит, печатаем статус:
  63.   printWifiStatus();
  64. }
  65.  
  66. void loop() {
  67.   // Если через сетевое подключение пришли какие-нибудь данные,
  68.   // выводим их на Serial Monitor. Это нужно только в отладочных целях:
  69.   while (client.available()) {
  70.     char c = client.read();
  71.     Serial.write(c);
  72.   }
  73.  
  74.   // Если с момента последнего подключения прошло 10 секунд,
  75.   // подключаемся снова, а затем отправляем новый запрос:
  76.   if (millis() - lastConnectionTime > postingInterval) {
  77.     httpRequest();
  78.   }
  79.  
  80. }
  81.  
  82. // Эта пользовательская функция осуществляет HTTP-подключение к серверу:
  83. void httpRequest() {
  84.   // Перед отправкой нового запроса отключаем все соединения.
  85.   // Это освободит сокет на WiFi Shield:
  86.   client.stop();
  87.  
  88.   // Если подключение прошло успешно:
  89.   if (client.connect(server, 80)) {
  90.     Serial.println("connecting...");  //  "Подключение..."
  91.     // Отправляем HTTP-Запрос типа PUT:
  92.     client.println("GET /latest.txt HTTP/1.1");
  93.     client.println("Host: www.arduino.cc");
  94.     client.println("User-Agent: ArduinoWiFi/1.1");
  95.     client.println("Connection: close");
  96.     client.println();
  97.  
  98.     // Отмечаем время, было установлено когда подключение:
  99.     lastConnectionTime = millis();
  100.   } else {
  101.     // Если подключиться не удалось, сообщаем об это на Serial Monitor:
  102.     Serial.println("connection failed");  //  "Подключиться не удалось"
  103.   }
  104. }
  105.  
  106. //  Пользовательская функция для отображения информации о сети и сетевом оборудовании:
  107. void printWifiStatus() {
  108.   // Показываем на Serial Monitor название (SSID) сети, к которой подключились:
  109.   Serial.print("SSID: ");
  110.   Serial.println(WiFi.SSID());
  111.  
  112.   // Показываем IP-адрес WiFi Shield:
  113.   IPAddress ip = WiFi.localIP();
  114.   Serial.print("IP Address: ");  //  "IP-адрес: "
  115.   Serial.println(ip);
  116.  
  117.   // Показываем мощность приемного сигнала:
  118.   long rssi = WiFi.RSSI();
  119.   Serial.print("signal strength (RSSI):");  //  "Мощность сигнала: (RSSI):"
  120.   Serial.print(rssi);
  121.   Serial.println(" dBm");
  122. }

См.также

  1. WiFi library – Your reference for the WiFi101 Library.
  2. WiFi Shield – Product details for the WiFi 101 Shield.
  3. MKR1000 – Product details for the MKR1000 board.
  4. Connect No Encryption - Demonstrates how to connect to an open network.
  5. Connect With WEP - Demonstrates how to connect to a network that is encrypted with WEP.
  6. Connect With WPA - Demonstrates how to connect to a network that is encrypted with WPA2 Personal.
  7. Scan Networks - Displays all WiFi networks in range.
  8. Simple Web Server WiFi – Turn on and off an LED accessing this simple Web Server.
  9. UDP NTP Client - Query a Network Time Protocol (NTP) server using UDP.
  10. WiFi Chat Server - Set up a simple chat server.
  11. WiFi Web Client - Connect to a remote webserver.
  12. WiFi Web Server - Serve a webpage from the WiFi shield with Analog Input values.
  13. WiFi Send Receive UDP String - Send and receive a UDP string.

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

  1. Arduino.cc - Wifi101WiFiWebClientRepeating