Arduino:Примеры/Веб-сервер из платы Arduino и шилда Arduino Ethernet, управляющий реле
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Веб-сервер из платы Arduino и шилда Arduino Ethernet, управляющий реле[1]
Это руководство рассказывает, как при помощи платы Arduino и шилда Arduino Ethernet создать веб-сервер, управляющий реле, к которому подключена к лампе.
Доступ к веб-серверу можно получить с любого устройства, на котором установлен браузер и которое подключено к той же сети.
СОБЛЮДАЙТЕ ТЕХНИКУ БЕЗОПАСНОСТИ! При работе с проектами, использующими сетевое напряжение, вы должны действительно разбираться в том, что делаете. В противном случае можно получить удар электрическим током. Это очень серьезно, и я не хочу, чтобы работа над этим проектом принесла вред вашему здоровью. Если вы не на 100% уверены в том, что делаете, сделайте себе одолжение и ничего не трогайте. Попросите того, кто знает!
Примечание: Если вам не хочется иметь дело с сетевым напряжением, но вы по-прежнему хотите поработать над проектом, то реле-модуль можно заменить, к примеру, на светодиод. Для этого придется изменить код и схему, но эти изменения будут незначительными.
Шилд Arduino Ethernet Shield
Сначала подключите шилд к плате Arduino, а затем подсоедините его к сети при помощи кабеля RJ45. Ethernet-кабель, идущий от роутера к шилду Ethernet, должен быть подключен следующим образом:
Использование контактов
Когда шилд Ethernet подключен к плате Arduino, вы не можете использовать цифровые контакты 10, 11, 12 и 13, потому что они используются для коммуникации между платой и шилдом.
Реле-модуль
Реле – это переключатель с электрическим приводом. Это значит, что его можно включать и выключать, управляя тем, может ли проходить через него электрический ток. Как выглядит реле-модуль, показано на картинке ниже:
В частности, модуль на картинке выше состоит из двух реле (это синие кубы).
Что касается сетевого напряжения, то у каждого реле для работы с ним имеется три выходных контакта.
- COM (от «common») – общий контакт.
- NO (от «normally open») – нормально разомкнутый контакт. Общий контакт и нормально разомкнутый контакт между собой не соединены. Но когда вы включаете реле, эти контакты замыкаются и потребитель (в нашем случае – лампа) начинает получать питание.
- NC (от «normally closed») – нормально замкнутый контакт. Общий контакт и нормально замкнутый контакт соединены друг с другом, даже если реле выключено. Но если включить реле, цепь размыкается и питание перестает идти потребителю.
Хотя это зависит от проекта, но в нашем случае лучше использовать нормально разомкнутый контакт, потому что мы будем включать лампу время от времени. Более подробно об использовании реле-модуля с платой Arduino можно почитать тут.
Реле и плата Arduino подключаются друг к другу очень просто:
- GND – к «земле»
- IN1 – к цифровому контакту Arduino (используется для управления первым реле)
- IN2 – к цифровому контакту Arduino (используется для управления вторым реле)
- VCC – к 5 вольтам
Необходимое оборудование
Ниже – полный список компонентов, необходимых для этого проекта:
- Плата Arduino Uno – на eBay
- Шилд Arduino Ethernet Shield – на eBay
- Реле-модуль – на eBay
- Шнур-соединитель для лампы – на eBay
- Макетная плата – на eBay
- Провода-перемычки – на eBay
Код
Скопируйте код, показанный ниже, в IDE Arduino, но перед тем, как загружать его на плату Arduino, прочитайте раздел «Настройка сети», расположенный еще ниже.
/*
* Руи Сантос (Rui Santos)
* Более подробно о проекте здесь:
* http://randomnerdtutorials.com
*/
#include <SPI.h>
#include <Ethernet.h>
// введите ниже MAC-адрес и IP-адрес вашего контроллера;
// IP-адрес будет зависеть от вашей локальной сети:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1, 111);
// инициализируем библиотеку Ethernet Server, указывая нужный порт
// (по умолчанию порт для HTTP – это «80»):
EthernetServer server(80);
// задаем контакт и начальное состояние для реле:
String relay1State = "Off";
const int relay = 7;
// задаем переменные для клиента:
char linebuf[80];
int charcount=0;
void setup() {
// подготавливаем реле-модуль:
pinMode(relay, OUTPUT);
digitalWrite(relay, HIGH);
// открываем последовательную коммуникацию на скорости 9600 бод:
Serial.begin(9600);
// запускаем Ethernet-коммуникацию и сервер:
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server is at "); // "сервер на "
Serial.println(Ethernet.localIP());
}
// Показываем веб-страницу с кнопкой «вкл/выкл» для реле:
void dashboardPage(EthernetClient &client) {
client.println("<!DOCTYPE HTML><html><head>");
client.println("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"></head><body>");
client.println("<h3>Arduino Web Server - <a href=\"/\">Refresh</a></h3>");
// генерируем кнопку для управления реле:
client.println("<h4>Relay 1 - State: " + relay1State + "</h4>");
// если реле выключено, показываем кнопку «вкл»:
if(relay1State == "Off"){
client.println("<a href=\"/relay1on\"><button>ON</button></a>");
}
// если реле включено, показываем кнопку «выкл»:
else if(relay1State == "On"){
client.println("<a href=\"/relay1off\"><button>OFF</button></a>");
}
client.println("</body></html>");
}
void loop() {
// прослушиваем входящих клиентов:
EthernetClient client = server.available();
if (client) {
Serial.println("new client"); // "новый клиент"
memset(linebuf,0,sizeof(linebuf));
charcount=0;
// HTTP-запрос заканчивается пустой строкой:
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
// считываем HTTP-запрос, символ за символом:
linebuf[charcount]=c;
if (charcount<sizeof(linebuf)-1) charcount++;
// если вы дошли до конца строки (т.е. если получили
// символ новой строки), это значит,
// что HTTP-запрос завершен, и вы можете отправить ответ:
if (c == '\n' && currentLineIsBlank) {
dashboardPage(client);
break;
}
if (c == '\n') {
if (strstr(linebuf,"GET /relay1off") > 0){
digitalWrite(relay, HIGH);
relay1State = "Off";
}
else if (strstr(linebuf,"GET /relay1on") > 0){
digitalWrite(relay, LOW);
relay1State = "On";
}
// если получили символ новой строки...
currentLineIsBlank = true;
memset(linebuf,0,sizeof(linebuf));
charcount=0;
}
else if (c != '\r') {
// если получили какой-то другой символ...
currentLineIsBlank = false;
}
}
}
// даем веб-браузеру время на получение данных:
delay(1);
// закрываем соединение:
client.stop();
Serial.println("client disonnected"); // "Клиент отключен"
}
}
Настройка сети
Обратите внимание на фрагмент в коде выше, где находятся данные для подключения к сети:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,XXX);
Важно: Возможно, понадобится заменить переменную XXX в конце этого кода на значение, соответствующее вашей сети. В противном случае Arduino не сможет установить соединение с сетью.
Кроме того, возможно, придется заменить все значения в строчке для IP-адреса:
IPAddress ip(X, X, X, X);
В моем случае IP-адрес был в диапазоне «192.168.1.X», и при помощи программы Angry IP Scanner я узнал, что в моей сети доступен IP-адрес «192.168.1.111». То есть в моей сети не было активных устройств, использующих тот же самый адрес.
IPAddress ip(192, 168, 1, 111);
Схема
Соберите цепь, как показано на картинке ниже:
Демонстрация
Страница созданного вами веб-сервера будет выглядеть в браузере следующим образом:
А вот демонстрация того, как проект выглядит вживую:
См.также
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino