Arduino:Примеры/WebClientRepeating

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

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


Веб-клиент на базе Arduino, делающий повторяющиеся запросы[1]

Этот пример демонстрирует, как при помощи Ethernet Shield делать повторяющиеся HTTP-запросы. Мы будем использовать DNS, присваивая Ethernet-клиенту MAC-, IP- и DNS-адрес. Скетч будет подключаться к странице http://www.arduino.cc/latest.txt, а ее содержание будет отображаться через Serial Monitor.

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

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

Цепь

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

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

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

Схема

Код

/*
Веб-клиент на базе Arduino, делающий повторяющиеся запросы

Этот скетч подключается к веб-серверу, а затем при помощи
Ethernet Shield делает HTTP-запрос.
Для этого примера подойдет и Arduino Ethernet Shield, 
и Adafruit Ethernet Shield (если у него будет модуль WizNet Ethernet).

Кроме того, этот скетч использует DNS, присваивая Ethernet-клиенту
MAC-адрес, IP-адрес и DNS-адрес. 

Цепь:
* Ethernet Shield, подключенный к 10-ому, 11-ому, 12-ому и 13-ому контактам 
 
Создан 19 апреля 2012 Томом Иго (Tom Igoe)
 
http://arduino.cc/en/Tutorial/WebClientRepeating

Этот код не защищен авторским правом.
*/

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

// Присваиваем Ethernet-контроллеру MAC-адрес.
// Свой адрес вставьте здесь:
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
// Вписываем IP-адрес, доступный для вашей сети (для ручной настройки):
IPAddress ip(10,0,0,20);

// Здесь вписываем ваш DNS-адрес:
IPAddress myDns(1,1,1,1);

// Создаем экземпляр класса:
EthernetClient client;

char server[] = "www.arduino.cc";

unsigned long lastConnectionTime = 0;          // время, когда вы в последний раз подключались к серверу (в миллисекундах)
boolean lastConnected = false;                 // статус подключения при последнем проходе через главный цикл
const unsigned long postingInterval = 60*1000;  // задержка между апдейтами (в миллисекундах)

void setup() {
  // Запускаем последовательную передачу данных:
  Serial.begin(9600);
  // Даем Ethernet-модулю время для загрузки:
  delay(1000);
  // Запускаем Ethernet-соединение при помощи фиксированного IP-адреса и DNS-адреса:
  Ethernet.begin(mac, ip, myDns);
  // Выводим IP-адрес Ethernet Shield:
  Serial.print("My IP address: ");  //  "Мой IP-адрес: "
  Serial.println(Ethernet.localIP());
}

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

  // Если интернет-соединения нет, но при последнем проходе через цикл оно было,
  // то останавливаем работу клиента:
  if (!client.connected() && lastConnected) {
    Serial.println();
    Serial.println("disconnecting.");  //  "Отключение..."
    client.stop();
  }

  // Если вы не подключены, а с момента последнего подключения прошло 10 секунд,
  // подключаемся снова и отсылаем данные:
  if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) {
    httpRequest();
  }
  // Сохраняем статус соединения для следующего прохода через цикл:
  lastConnected = client.connected();
}

// Эта функция будет осуществлять HTTP-соединение к серверу:
void httpRequest() {
  // Если подключение прошло успешно:
  if (client.connect(server, 80)) {
    Serial.println("connecting...");  //  "Подключение..."
    // Отсылаем HTTP PUT запрос:
    client.println("GET /latest.txt HTTP/1.1");
    client.println("Host: www.arduino.cc");
    client.println("User-Agent: arduino-ethernet");
    client.println("Connection: close");
    client.println();

    // Отмечаем время, когда было сделано соединение:
    lastConnectionTime = millis();
  } 
  else {
    // Если подключиться не удалось:
    Serial.println("connection failed");  //  "Подключиться не удалось"
    Serial.println("disconnecting.");  //  "Отключение."
    client.stop();
  }
}

См.также

  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

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