Arduino:Примеры/wifi101WiFiWebClientRepeating

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

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


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

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