Arduino:Примеры/wifi101WiFiWebClientRepeating
Поддержать проект | Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Содержание
Повторяющийся запрос с помощью 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, ключ и индекс ключа.
На картинке выше модуль 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 }
См.также
- WiFi library – Your reference for the WiFi101 Library.
- WiFi Shield – Product details for the WiFi 101 Shield.
- MKR1000 – Product details for the MKR1000 board.
- Connect No Encryption - Demonstrates how to connect to an open network.
- Connect With WEP - Demonstrates how to connect to a network that is encrypted with WEP.
- Connect With WPA - Demonstrates how to connect to a network that is encrypted with WPA2 Personal.
- Scan Networks - Displays all WiFi networks in range.
- Simple Web Server WiFi – Turn on and off an LED accessing this simple Web Server.
- UDP NTP Client - Query a Network Time Protocol (NTP) server using UDP.
- WiFi Chat Server - Set up a simple chat server.
- WiFi Web Client - Connect to a remote webserver.
- WiFi Web Server - Serve a webpage from the WiFi shield with Analog Input values.
- WiFi Send Receive UDP String - Send and receive a UDP string.
Внешние ссылки