Arduino:Примеры/wifi101WiFiChatServer

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

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


Чат-сервер с помощью WiFi Shield 101[1]

С помощью этого примера мы создадим простой чат-сервер, который будет рассылать все входящие сообщения (даже те, что будете печатать вы сами через серверную часть системы) всем подключенным клиентам. Чтобы использовать его, откройте монитор порта, подключитесь к IP-адресу вашего WiFi Shield 101, а затем начинайте печатать. Кроме того, в мониторе порта можно будет наблюдать входящие сообщения всех остальных клиентов.

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

  • Модуль 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 Чат-сервер с помощью WiFi Shield
  3  
  4 Простой сервер, рассылающий все входящие сообщения всем 
  5 подключенным клиентам. Чтобы использовать, подключитесь к IP-адресу
  6 своего девайса и начинайте печатать. Кроме того в мониторе порта можно
  7 будет наблюдать и все сообщения, отправляемые клиентами.
  8 
  9 Этот пример написан таким образом, чтобы его можно было использовать 
 10 для сетей с шифрованием через WPA. Если в вашем случае
 11 используется сеть с WEP-шифрованием, просто поменяйте соответствующим 
 12 образом функцию Wifi.begin().
 13 
 14 Цепь:
 15 * WiFi Shield, подключенный к Arduino
 16  
 17 Создан 18 декабря 2009 Дэвидом А. Меллисом (David A. Mellis),
 18 модифицирован 31 мая 2012 Томом Иго (Tom Igoe).
 19 */
 20 
 21 #include <SPI.h>
 22 #include <WiFi101.h>
 23 
 24 char ssid[] = "yourNetwork";       // SSID (название) вашей сети 
 25 char pass[] = "secretPassword";    // пароль к вашей сети (он нужен для WPA, а для WEP используйте ключ)
 26 
 27 int keyIndex = 0;            // индекс ключа к вашей сети (нужен только для WEP)
 28 
 29 int status = WL_IDLE_STATUS;
 30 
 31 WiFiServer server(23);
 32 
 33 boolean alreadyConnected = false; // переменная, которая будет давать понять, подключился или клиент в прошлый раз или нет
 34 
 35 void setup() {
 36   // Инициализируем последовательную передачу данных и ждем открытия порта:
 37   Serial.begin(9600); 
 38   while (!Serial) {
 39     ; // ждем подключения последовательного порта (нужно только для плат со штатным USB-портом)
 40   }
 41 
 42   // Проверяем наличие WiFi Shield:
 43   if (WiFi.status() == WL_NO_SHIELD) {
 44     Serial.println("WiFi shield not present");  //  "WiFi Shield не подключен"
 45     // Дальше не продолжаем:
 46     while(true);
 47   } 
 48   
 49   // Пытаемся подключиться к WiFi-сети:
 50   while ( status != WL_CONNECTED) { 
 51     Serial.print("Attempting to connect to SSID: ");  //  "Пробуем подключиться к SSID: "
 52     Serial.println(ssid);
 53     // Подключаемся к сети с шифрованием WPA или WPA2.
 54     // Если используете открытую или WEP-зашифрованную сеть, измените эту строчку:    
 55     status = WiFi.begin(ssid, pass);
 56 
 57     // Ждем подключения 10 секунд:
 58     delay(10000);
 59   } 
 60   // Запускаем сервер:
 61   server.begin();
 62   // Мы подключились, поэтому выводим на Serial Monitor информацию о сети, к которой подключились:
 63   printWifiStatus();
 64  }
 65 
 66 
 67 void loop() {
 68   // Ждем нового клиента:
 69   WiFiClient client = server.available();
 70 
 71 
 72   // Когда клиент отправит первый байт, здороваемся с ним:
 73   if (client) {
 74     if (!alreadyConnected) {
 75       // Очищаем буфер для входящих данных:
 76       client.flush();    
 77       Serial.println("We have a new client");      //  "У нас новый клиент"
 78       client.println("Hello, client!");  //  "Привет, клиент!"
 79       alreadyConnected = true;
 80     } 
 81 
 82     if (client.available() > 0) {
 83       // Считываем байты, пришедшие от клиента:
 84       char thisChar = client.read();
 85       // Отражаем эти байты обратно клиенту:
 86       server.write(thisChar);
 87       // После этого отражаем их самому серверу:
 88       Serial.write(thisChar);
 89     }
 90   }
 91 }
 92 
 93 //  Пользовательская функция для отображения информации о сети, к которой мы подключились:
 94 void printWifiStatus() {
 95   // Показываем на Serial Monitor название (т.е. SSID) сети, к которой подключились:
 96   Serial.print("SSID: ");
 97   Serial.println(WiFi.SSID());
 98 
 99   // Показываем IP-адрес WiFi Shield:
100   IPAddress ip = WiFi.localIP();
101   Serial.print("IP Address: ");  //  "IP-адрес: "
102   Serial.println(ip);
103 
104   // Показываем мощность приемного сигнала:
105   long rssi = WiFi.RSSI();
106   Serial.print("signal strength (RSSI):");  //  "Мощность сигнала (RSSI):"
107   Serial.print(rssi);
108   Serial.println(" dBm");
109 }

См.также

  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 Web Client - Connect to a remote webserver.
  11. WiFi Web Client Repeating - Repeatedly make HTTP calls to a server.
  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.

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