Arduino:Примеры/WebClient

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

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


Веб-клиент на базе Arduino[1]

Этот пример показывает, как при помощи Ethernet Shield сделать HTTP-запрос к Google по слову «Arduino». Результаты запроса можно будет наблюдать в HTML-виде в окне Serial Monitor.

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

  • Сетевой модуль Arduino Ethernet Shield;
  • Плата Arduino, совместимая Ethernet Shield;

Цепь

Ethernet Shield позволяет вам подключить к плате Ethernet-контроллер WizNet (через SPI-шину). Для SPI-подключения к WizNet используются 10-ый, 11-ый, 12-ый и 13-ый контакты. У последних моделей Ethernet Shield имеется встроенный слот для SD-карты, а для управления SS-контактом этой SD-карты используется 4-ый цифровой контакт.

Ethernet Shield должен быть подключен к сети при помощи Ethernet-кабеля. Кроме того, сетевые настройки в скетче нужно будет поменять, чтобы они соответствовали характеристикам вашей сети.

Ethernet Shield устанавливается поверх платы Arduino.

Схема

Код

/*
Создание web-клиента на базе Arduino

Этот скетч при помощи Arduino Ethernet Shield на базе WizNet
подключается к вебсайту (http://www.google.com).

Цепь:
* Ethernet Shield, подключенный к 10-ому, 11-ому, 12-ому и 13-ому контактам

Создан 18 декабря 2009 Дэвидом А. Меллисом (David A. Mellis),
модифицирован 9 апреля 2012 Томом Иго (Tom Igoe),
основан на работе Эдриана Макивэна (Adrian McEwen).
*/

#include <SPI.h>
#include <Ethernet.h>

// Ниже вводим MAC-адрес контроллера. У последних моделей
// Ethernet Shield этот MAC-адрес напечатан на стикере: byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// Если не хотите использовать DNS (и тем самым сократить размер скетча),
// то вместо названия сайта воспользуйтесь цифровым IP:
//IPAddress server(74,125,232,128);  // цифровой IP для Google (без DNS)
char server[] = "www.google.com";    // название сервера Google (с DNS)

// Задаем статический IP-адрес (на тот случай, если у DHCP выдать IP-адрес не получится):
IPAddress ip(192,168,0,177);

// Создаем клиента, который будет подключаться 
// к необходимым для нас IP-адресу и порту 
// (портом по умолчанию для HTTP является 80):
EthernetClient client;

void setup() {
 // Инициализируем последовательную передачу данных и ждем открытия порта:
  Serial.begin(9600);
   while (!Serial) {
    ; // ждем подключения последовательного порта (нужно только для Leonardo)
  }

  // Запускаем Ethernet-соединение:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");  //  "Не удалось сконфигурировать Ethernet при помощи DHCP"
    // Продолжать дальше смысла нет, поэтому вместо DHCP
    // попытаемся сделать это при помощи IP-адреса:
    Ethernet.begin(mac, ip);
  }
  // Даем Ethernet Shield секунду на инициализацию:
  delay(1000);
  Serial.println("connecting...");  //  "Подключение..."

  // Если подключение установлено, сообщаем об этом на Serial Monitor:
  if (client.connect(server, 80)) {
    Serial.println("connected");  //  "Подключение установлено" 
    // Делаем HTTP-Запрос:
    client.println("GET /search?q=arduino HTTP/1.1");
    client.println("Host: www.google.com");
    client.println("Connection: close");
    client.println();
  } 
  else {
    // Если соединения с сервером нет, пишем об этом на Serial Monitor:
    Serial.println("connection failed");  //  "Подключиться не удалось"
  }
}

void loop()
{
  // Если от сервера есть какие-нибудь байты,
  // считываем их и выводим на Serial Monitor:
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  // Если сервер отключился, останавливаем работу клиента:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");  //  "Отключение..."
    client.stop();

    // Ничего не делаем:
    while(true);
  }
}

См.также

  1. Arduino Ethernet Shield
  2. Getting started with the ethernet shield
  3. Ethernet library
  4. ChatServer
  5. ChatClient
  6. WebClient
  7. WebServer
  8. PachubeClient?
  9. PachubeClientString?
  10. BarometricPressureWebServer
  11. UDPSendReceiveString
  12. UdpNtpClient

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