Изучаем Arduino: инструметы и методы технического волшебства - [83]

Шрифт
Интервал

C и SPI.

- 323 -

Добавление аналогового датчика температуры добавим простой аналоговый датчик температуры ТМР36 (см. главу 3), подсоединив его к аналоговому контакту 3, как показано на рис. 14.10.

Рис. 14.10. Добавление аналогового датчика температуры ТМР36

Добавление показаний датчика в поток

Теперь нужно вставить данные от нового датчика в поток данных, отправляемых на сервер Xively. По сути, в коде программы нужно просто прибавить дополнительный поток данных везде, где указан первый поток данных. Вы также можете переименовать потоки с идентификаторами datastream на более понятные, например light_reading и temp_reading. Код листинга 14.4 похож на предыдущий, но теперь у нас два потока данных. Параметры Xively API key, Feed ID и MAC-адрес такие же, как в предыдущей программе.

Листинг 14.4. Загрузка потока данных в Xively от нескоьких датчиков - xively2.ino

#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 и др.

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

• Как создать HTML-код для формы управления платой Arduino через Интернет.

• Как запустить веб-сервер на вашей плате Arduino.

• Как управлять контактами ввода-вывода на Arduino через Интернет.

• Как подключить Arduino к серверу Xively для построения графиков.

• Как отображать онлайн-данные, поступающие от нескольких датчиков.Основа всех плат Arduino - микроконтроллеры Atmel. Здесь мы не будем рассматривать особенности микроконтроллеров для всех плат Arduino, но приведем технический паспорт контроллера ATmega, чтобы получить представление, как он работает. Кроме того, мы опишем принципиальную схему платы Arduino Uno, чтобы лучше понять, как она функционирует.

Знакомство с технической документацией

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

Анализ технического описания

Рассмотрим, например, техническое описание для микроконтроллера ATmega 328Р.

Напомним, что микросхема ATmega 328 используется в Arduino Uno и во многих других платах. Найти технический паспорт бывает нелегко. Я рекомендую ввести в Google запрос "ATmega 328Р datasheet" и выбрать из перечня ссылок PDF-файл на сайте Atmel. Техническое описание микроконтроллеров, применяемых в Arduino, можно найти на сайте http://www.arduino.cc в разделах технических описаний плат. Начнем с рассмотрения первой страницы технического паспорта (рис. П.1 ).