×
Traktatov.net » Изучаем Arduino: инструметы и методы технического волшебства » Читать онлайн
Страница 135 из 138 Настройки

#include

#include

#include

#include


- 324 -

// MAC-адрес вашего адаптера Ethernet

byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x4A, 0xE0 };

// Your Xively key to let you upload data

char xivelyKey[] = "qkjXSloUKqbCG-hqh3fw4WisdvOSAKx4ZXZYSWhGUWdxcz0g";

// Аналоговые датчики подключения устройств (0 и 1 уже задействованы

// адаптером Ethernet)

int lightPin = 2; // Датчик температуры

int tempPin = 3; // Фоторезистор

// Строки для идентификаторов потока

char lightid[] = "light_reading";

char tempid[] = "temp_reading";

XivelyDatastream datastreams[] = {

XivelyDatastream(lightid, strlen(lightid), DATASTREAM_FLOAT),

XivelyDatastream(tempid, strlen(tempid), DATASTREAM_FLOAT),

};

// Feed ID

XivelyFeed feed(1242622121, datastreams, 2 /* number of datastreams */);

EthernetClient client;

XivelyClient xivelyclient(client);


void setup()

{

// Запуск последовательного порта

Serial.begin(9600);

Serial.println("Starting double datastream upload to Xively... ");

Serial.println();

while (Ethernet.begin(mac) != 1)

{

Serial.println("Error getting IP address via DHCP, trying again... ");

delay(15000);

}

}

void loop()

{

int lightValue = analogRead(lightPin);

datastreams[O].setFloat(lightValue);

Serial.print("Read light value ");

Serial.println(datastreams[O].getFloat());

int tempValue = analogRead(tempPin);

datastreams[1].setFloat(tempValue);

Serial.print("Read temp value ");

Serial.println(datastreams[1].getFloat());

Serial.println("Uploading it to Xively");

- 325 -

int ret = xivelyclient.put(feed, xivelyKey);

Serial.print("xivelyclient.put returned ");

Serial.println(ret);

Serial.println();

delay(15000);

}

Прежде всего, заметим, что предыдущие ссылки на датчик (фоторезистор) были обновлены. Теперь, когда информация поступает от двух датчиков, их необходимо различать. Поток данных tempid[] добавлен в объект datastreams[]. Определение объекта xivelyFeed было обновлено, чтобы показать, что у нас не один, а два потока данных. В цикле loop() строки кода вывода данных фоторезистора продублированы для датчика температуры. Обратите внимание, что поток для фоторезистора представлен в объекте datastreams первым, и на него ссылка задана как datastreams [0]. Поток для датчика температуры в объекте datastreams представлен вторым, и ссылка на него datastreams [1]. При запуске программы на плате Arduino веб-интерфейс автоматически обновляет отображение потоков данных. Возможно, вы захотите удалить старый поток данных sensor_reading, т. к. он заменен потоком light reading. После нескольких минут работы Arduino графики должны выглядеть примерно так, как показано на рис. 14.11.


Рис. 14.11. Отображение на сайте Xively данных от нескольких датчиков

Итак, из платы Arduino вы успешно создали как веб-сервер, так и клиент удаленной веб-службы. Попробуйте теперь добавить цифровые датчики и визуальную обратную связь, чтобы сделать вашу систему по-настоящему интерактивной.

- 326 -

Резюме

В этой главе вы узнали следующее:

• Каков смысл параметров IP, DHCP, DNS, MAC и др.

• В чем состоят различия между клиентами и серверами.