Автоматизация розеток дома: Windows 10 IoT Core, Raspberry Pi и Arduino
Компоненты и материалы
| Raspberry Pi 2 Model B | 1 шт. |
| XBee (ZigBee) | 2 шт. |
| Arduino UNO | 1 шт. |
| FTDI-адаптер (кабель) | 2 шт. |
| Релейный щит 4-канальный для Arduino | 1 шт. |
| XBee Shield для Arduino | 1 шт. |
Инструменты и ПО
- XCTU (настройка XBee)
- Visual Studio 2015+ (UWP-приложение)
- Arduino IDE
- Microsoft Azure (облако, SQL, Storage)
- Windows 10 IoT Core на Raspberry Pi
О проекте
Введение
Проект демонстрирует управление бытовыми розетками локально и через облако. Raspberry Pi на Windows 10 IoT Core выступает шлюзом: принимает команды (локально — через веб-интерфейс, из облака — через Azure) и передаёт их по радиоканалу XBee на Arduino, который переключает реле. Примеры: вентилятор и лампа.
Почему автоматизировать розетки?
Управляя питанием розетки, можно включать/выключать любые приборы без модификации самих приборов.
Работа с XBee (ZigBee)
Два модуля XBee: Coordinator (координатор) — подключён к Raspberry Pi через FTDI-USB; Router (маршрутизатор) — на стороне Arduino с реле. Координатор отправляет команды маршрутизатору.
Настройка XBee в AT-режиме
- Скачайте и установите XCTU.
- Для прошивки использовался FTDI-адаптер Adafruit.
- Смотрите видеоурок по настройке XBee в AT-режиме.
Убедитесь, что модули «видят» друг друга перед дальнейшей работой.
Настройка приёмника (Router + Arduino)
Необходимо: XBee Router, Arduino UNO, XBee Shield, релейный щит.
Скетч для Arduino
Получает команды по Serial от XBee: ON1 / OFF1 — реле 1, ON2 / OFF2 — реле 2.
#define RELAY1 7
#define RELAY2 5
String state = "OFF";
void setup() {
Serial.begin(9600);
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
state = Serial.readString();
Serial.println(state);
}
if (state == "ON1\r\n") digitalWrite(RELAY1, HIGH);
else if (state == "ON2\r\n") digitalWrite(RELAY2, HIGH);
else if (state == "OFF1\r\n") digitalWrite(RELAY1, LOW);
else if (state == "OFF2\r\n") digitalWrite(RELAY2, LOW);
else {
digitalWrite(RELAY1, LOW);
digitalWrite(RELAY2, LOW);
}
}
Подключение реле к розетке (ВЫСОКОЕ НАПРЯЖЕНИЕ — ОСТОРОЖНО!)

Реле — электромеханический переключатель. Управляющий сигнал (5В от Arduino) замыкает/размыкает силовую цепь (110–240 В).
Техника безопасности: работа с сетью 220В опасна для жизни. Действуйте на свой страх и риск. Автор использовал удлинитель: один провод разрезан, концы подключены к контактам COM (общий) и NO (нормально открытый) реле.

Соберите сэндвич: Arduino → релейный щит → XBee Shield → XBee (Router). Питание Arduino — от внешнего источника.

Настройка сервера (Raspberry Pi + Coordinator)
Raspberry Pi 2 с Windows 10 IoT Core. Coordinator XBee подключён через FTDI-USB кабель.
На Pi развёртывается UWP-веб-сервер. Он ждёт пользовательский ввод, записывает команду в виртуальный COM-порт FTDI — Coordinator передаёт её по радиоканалу Router'у.
Для работы FTDI на Windows 10 IoT см. github.com/jark/ftdisample.

Интеграция с Microsoft Azure
Для управления из любой точки мира:
- Создайте веб-сайт в Azure (ASP.NET Core).
- Azure SQL Database — для авторизации пользователей.
- Azure Table Storage — для хранения команд от веба.
- Приложение на Raspberry Pi (Blinky App) опрашивает хранилище и отправляет команды на XBee.
Ссылки по созданию таблиц в Azure Storage и SQL DB даны в оригинале.
Демонстрация
Управление двумя способами:
- Локально — через веб-интерфейс Raspberry Pi в домашней сети.
- Извне — через веб-приложение в Azure.
Заключение: возможности расширения
- Добавьте датчики света/движения — автоотключение для экономии энергии.
- Пульт для пожилых (требуется RFID).
- Расписание включения/выключения.
- Включение всего света при обнаружении вторжения.
- Удалённое отключение всего дома в отпуске.
- Поддержание температуры только при необходимости.
Код
Скетч для реле (C/C++)
#define RELAY1 7
#define RELAY2 5
String state = "OFF";
void setup() {
Serial.begin(9600);
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
state = Serial.readString();
Serial.println(state);
}
if (state == "ON1\r\n") digitalWrite(RELAY1, HIGH);
else if (state == "ON2\r\n") digitalWrite(RELAY2, HIGH);
else if (state == "OFF1\r\n") digitalWrite(RELAY1, LOW);
else if (state == "OFF2\r\n") digitalWrite(RELAY2, LOW);
else {
digitalWrite(RELAY1, LOW);
digitalWrite(RELAY2, LOW);
}
}
Примеры кода (GitHub)
https://github.com/syediddi/hacksterio
Схемы

Производственный процесс
- Построение доступной беспроводной сети датчиков для дома
- Создание безопасной двери с распознаванием лиц на Windows IoT и Raspberry Pi
- Точный мониторинг температуры и влажности с SHT15 на Windows 10 IoT Core
- Установка Windows 10 IoT Core на Raspberry Pi 3 Model B+: Пошаговое руководство
- Построение робота с голосовым управлением на Windows 10 IoT Core на Raspberry Pi 2
- Расширение GoPiGo v2 на Windows 10 IoT Core для Raspberry Pi 3
- Использование IoT: Ускорение цифровой трансформации сегодня
- IoT-монитор пульса в реальном времени на Arduino и MAX30100
- Система управления бассейном на Azure IoT: умные датчики и удаленный мониторинг
- Создание дашбордов Power BI из облачных данных PLCnext