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 ).
В большинстве случае, на первой странице говорится об особенностях данного микроконтроллера.
Даже беглый взгляд на первую страницу дает много информации о микроконтроллере. Мы видим, что микроконтроллер имеет 32 Кбайт программируемой флэшпамяти, может быть перепрограммирован примерно 10 000 раз, напряжение питания составляет от 1,8 до 5,5 В (в случае Arduino 5 В). Здесь также можно найти сведения о числе входов-выходов, поддержке специальных интерфейсов (SPI, I 2C), разрядности аналого-цифрового преобразователя (АЦП).
Читать дальше