Изучаем Arduino: инструметы и методы технического волшебства - [79]
Листинг 14.2. Код веб-сервера - control_led_speaker.ino
// Arduino веб-сервер
// Часть адаптированного кода под лицензией MIT License от
// http://bildr.org/2011/06/arduino-ethernet-pin-control/
#include
#include
const int BLUE =5;
const int GREEN =6;
- 310 -
const int RED =7;
const int SPEAKER =3;
// Для управления RGB-светодиодом и динамиком
// Если вы хотите использовать дополнительные устройства,
// добавляйте переменные сюда
int freq = 0;
int pin;
// MAC-адрес устройства
// Должен быть написан на этикетке вашего устройства
// или можете использовать этот
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x4A, 0xE0 };
// Сервер на порту 80
EthernetServer server = EthernetServer(80); //Порт 80
boolean receiving = false; // Отслеживание данных GET
void setup()
{
Serial.begin(9600);
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
// Соединение с DHCP
if ( !Ethernet.begin (mac))
{
Serial.println("Could not Configure Ethernet with DHCP.");
return;
}
else
{
Serial.println("Ethernet Configured!");
}
// Запуск сервера
server.begin();
Serial.print("Server Started.\nLocal IP: ");
Serial.println(Ethernet.localIP());
}
void loop()
{
EthernetClient client
server.available();
if (client)
{
// Запрос НТТР заканчивается пустой строкой
boolean currentLineisBlank
true;
boolean sentHeader = false;
- 311 -
while (client.connected())
{
if (client.available())
{
char с = client.read(); // Чтение из буфера
if(receiving && с == ' ') receiving = false;
//Окончание передачи
if(c == '?') receiving = true; // Поиск символа?
// Ожидание данных GET
if(receiving)
// Данные управления светодиодом (переменная L)
if (с == 'L')
Serial.print ( "Toggling Pin ");
pin = client.parseInt();
Serial.println(pin);
digitalWrite(pin, !digitalRead(pin));
break;
}
// Команда управления динамиком (переменная S)
else if (с == 'S')
{
Serial.print("Setting Frequency to ");
freq = client.parseInt();
Serial.println(freq);
if (freq == 0)
noTone(SPEAKER);
else
tone(SPEAKER, freq);
break;
}
// Код для управления дополнительными устройствами
// добавляем сюда
}
// Отправка заголовка ответа
if ( ! sentHeader)
{
// Отправить стандартный заголовок НТТР ответа
client.println("HTTP/1.1 200 ОК");
client.println ( "Content-Type: text/html \n");
// Кнопка переключения красного для RGB
client.println ( "
");- 312 -
// кнопка переключения зеленого для RGB
client.println ( "
");// кнопка переключения синего для RGB
client.println ( "
");// Ползунок для выбора частоты динамика
client.println("
");// Добавить формы для управления
// дополнительными устройствами
sentHeader = true;
}
if (с=='\n' && currentLineisBlank) break;
if (с=='\n')
{
currentLineisBlank=true;
}
else if (с ! = '\r')
{
currentLineisBlank=false;
}
}
}
// Дать время веб-браузеру на получение данных
delay(5);
client.stop(); // Закрыть соединение
}
}
Приведенная программа выполняет все функции, описанные в предыдущих разделах. Измените MAC-адрес на значение, указанное на этикетке вашего Ethemet-адаптера. Если вы не найдете этот адрес, возьмите значение из листинга 14.2. Загрузите программу на плату Arduino и запустите монитор последовательного порта.
Убедитесь, что плата Arduino подключена к сети и в маршрутизаторе включен
DHCP. Через несколько секунд в мониторе последовательного порта появится сообщение о назначенном IP-адресе (рис. 14.4).
В случае, показанном на рис. 14.4, Arduino был назначен локальный IP-адрес 192.168.0.9. В вашей сети почти наверняка будет другой адрес. Зная IP-адрес, можно использовать его для доступа к веб-интерфейсу.
- 313 -
Рис. 14.4. Вывод в последовательный порт полученного по DHCP IP-адреса
14.3. Управление платой Arduino по сети
Теперь, когда код сервера работает, и ваша плата Arduino подключена к сети с действительным IP-адресом, вы можете с помощью браузера получить к ней доступ и осуществлять управление. Сначала сделаем это по локальной сети, а затем воспользуемся переадресацией портов на вашем роутере для доступа к плате Arduino из внешней сети.
Чтобы убедиться, что веб-интерфейс работает должным образом, проверьте, что ваш компьютер подключен к той же сети, что и плата Arduino (через Wi-Fi или Ethemet). Откройте ваш браузер и введите в адресную строку IP-адрес из предыдущего раздела. В результате должна открыться HTML-страница, созданная ранее.