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

Arduino:Примеры/wifi101WiFiWebServer

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

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

Контакты:

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


Веб-сервер при помощи WiFi Shield 101[1]

В этом примере вы при помощи модуля WiFi Shield 101 или платы MKR1000 создать простой веб-сервер. Также понадобится библиотека WiFi101, с помощью которой ваш девайс сможет отвечать на HTTP-запросы. Когда все будет готово, откройте браузер и введите в адресную строку IP-адрес вашего WiFi Shield 101, после чего Arduino ответит HTML-кодом, с помощью которого отобразит входные данные ото всех шести аналоговых контактов.

Этот пример написан для работы с сетями, использующими WPA-шифрование. Если вы используете WEP-зашифрованную сеть, соответствующим образом поменяйте функцию WiFi.begin().

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

  • Модуль Arduino WiFi Shield 101
  • Плата Arduino или Genuino Zero (или MKR1000)
  • 6 аналоговых датчиков, присоединенных к аналоговым контактам Arduino0-ого по 5-ый) – опционально

Цепь

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. Веб-сервер с помощью WiFi Shield
  3.  
  4. Простой веб-сервер, который при помощи модуля WiFi Shield показывает
  5. значения от входных аналоговых контактов.
  6.  
  7. Этот пример написан для работы с WPA-зашифрованными сетями.
  8. Если вы имеете дело с WEP-зашифрованной сетью, просто
  9. соответствующим образом поменяйте функцию Wifi.begin().
  10.  
  11. Цепь:
  12. * WiFi Shield, подключенный к Arduino
  13. * Аналоговые датчики, подключенные к контактам с A0 по A5 (опционально)
  14.  
  15. Создан 13 июля 2010 пользователем dlf (Metodo2 srl),
  16. модифицирован 31 мая 2012 Томом Иго (Tom Igoe).
  17. */
  18.  
  19. #include <SPI.h>
  20. #include <WiFi101.h>
  21.  
  22.  
  23. char ssid[] = "yourNetwork";      // название (SSID) вашей сети
  24. char pass[] = "secretPassword";   // пароль к вашей сети
  25. int keyIndex = 0;                 // индекс ключа к вашей сети (нужно только для WEP)
  26.  
  27. int status = WL_IDLE_STATUS;
  28.  
  29. WiFiServer server(80);
  30.  
  31. void setup() {
  32.   // Инициализируем последовательную передачу данных и ждем открытия порта:
  33.   Serial.begin(9600);
  34.   while (!Serial) {
  35.     ; // ждем подключения последовательного порта (нужно только для плат со штатным USB-портом)
  36.   }
  37.  
  38.   // Проверяем наличие WiFi Shield
  39.   if (WiFi.status() == WL_NO_SHIELD) {
  40.     Serial.println("WiFi shield not present");  //  "WiFi Shield не подключен"
  41.     // Дальше не продолжаем:
  42.     while(true);
  43.   }
  44.  
  45.   // Пробуем подключиться к WiFi-сети:
  46.   while ( status != WL_CONNECTED) {
  47.     Serial.print("Attempting to connect to SSID: ");  //  "Пытаемся подключиться к SSID: "
  48.     Serial.println(ssid);
  49.     // Подключаемся к сети зашифрованной через WPA или WPA2.  
  50.     // Если вы подключаетесь к WEP-зашифрованной сети, нижеследующую строчку кода надо будет подредактировать:    
  51.     status = WiFi.begin(ssid, pass);
  52.  
  53.     // Ждем подключения 10 секунд:
  54.     delay(10000);
  55.   }
  56.   server.begin();
  57.   // Итак, мы подключились, поэтому выводим на Serial Monitor
  58.   // информацию о сети и сетевом оборудовании:
  59.   printWifiStatus();
  60. }
  61.  
  62.  
  63. void loop() {
  64.   // Прослушиваем подключающихся клиентов:
  65.   WiFiClient client = server.available();
  66.   if (client) {
  67.     Serial.println("new client");    //  "Новый клиент"
  68.     // HTTP-запрос заканчивается пустой строкой:
  69.     boolean currentLineIsBlank = true;
  70.     while (client.connected()) {
  71.       if (client.available()) {
  72.         char c = client.read();
  73.         Serial.write(c);
  74.         // Если вы добрались до конца строки (получили символ новой строки),
  75.         // и эта строка – пустая, значит это конец HTTP-запроса,
  76.         // и, следовательно, мы можем приступить к отправке ответа:
  77.         if (c == '\n' && currentLineIsBlank) {
  78.           // Отправляем стандартный заголовок для HTTP-ответа:
  79.           client.println("HTTP/1.1 200 OK");
  80.           client.println("Content-Type: text/html");
  81.           client.println("Connection: close");  // после выполнения запроса соединение будет отключено
  82.           client.println("Refresh: 5");  // автоматически обновляем страницу каждые 5 секунд
  83.           client.println();
  84.           client.println("<!DOCTYPE HTML>");
  85.           client.println("<html>");
  86.           // Показываем данные от всех аналоговых датчиков:
  87.           for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
  88.             int sensorReading = analogRead(analogChannel);
  89.             client.print("analog input ");
  90.             client.print(analogChannel);
  91.             client.print(" is ");
  92.             client.print(sensorReading);
  93.             client.println("<br />");      
  94.           }
  95.           client.println("</html>");
  96.            break;
  97.         }
  98.         if (c == '\n') {
  99.           // Вы начинаете новую строчку:
  100.           currentLineIsBlank = true;
  101.         }
  102. else if (c != '\r') {
  103.           // В текущей строке еще есть символы:
  104.           currentLineIsBlank = false;
  105.         }
  106.       }
  107.     }
  108.     // Даем браузеру время, чтобы получить данные:
  109.     delay(1);
  110.    
  111.     // Отключаем соединение:
  112.     client.stop();
  113.     Serial.println("client disonnected"); //  "Клиент отключился"
  114.   }
  115. }
  116.  
  117. // Пользовательская функция для отображения на Serial Monitor
  118. // информации о сети и используемом сетевом оборудовании:
  119. void printWifiStatus() {
  120.   // Показываем SSID (название) сети, к которой подключились:
  121.   Serial.print("SSID: ");
  122.   Serial.println(WiFi.SSID());
  123.  
  124.   // Показываем IP-адрес WiFi Shield:
  125.   IPAddress ip = WiFi.localIP();
  126.   Serial.print("IP Address: ");  //  "IP-адрес: "
  127.   Serial.println(ip);
  128.  
  129.   // Показываем мощность приемного сигнала:
  130.   long rssi = WiFi.RSSI();
  131.   Serial.print("signal strength (RSSI):");  //  "Мощность сигнала (RSSI): "
  132.   Serial.print(rssi);
  133.   Serial.println(" dBm");
  134. }

См.также

  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 Client Repeating - Repeatedly make HTTP calls to a server.
  13. WiFi Send Receive UDP String - Send and receive a UDP string.

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

  1. Arduino.cc - Wifi101WiFiWebServer