Мы уже говорили об относительных достоинствах Arduino и Raspberry Pi — у каждого из них есть свои сильные стороны. Они не должны быть ни тем, ни другим — комбинируйте их, чтобы получить лучшее из обоих миров. Домашняя автоматизация является идеальным кандидатом для этого. Рынок домашней автоматизации наводнен дорогими потребительскими системами, несовместимыми друг с другом и дорогостоящими в установке. Если у вас есть Raspberry Pi
и Arduino, вы в основном можете достичь того же за доли цены, если вы готовы потратить время и усилия.
Обновление: с тех пор как была написана эта статья, я обнаружил OpenHAB, бесплатную платформу домашней автоматизации с открытым исходным кодом, которая работает на Raspberry Pi и может быть интегрирована с огромным набором готовых комплектов умного дома, а также с Arduino. Посмотрите видео ниже, чтобы узнать о пике возможностей, а затем перейдите к разделу Начало работы с OpenHAB на Raspberry Pi
руководство, чтобы узнать больше.
Heimcontrol.js — это приложение Node.js, созданное для работы на Raspberry Pi. В сочетании с Arduino и некоторыми стандартными розетками для дистанционного управления это упрощает управление устройствами переменного тока. Вы можете добавить температурные датчики и даже управлять своим телевизором — но сегодня мы будем придерживаться основных принципов и расширим проект в следующем уроке.
Вот разбивка проекта:
- Raspberry Pi будет действовать как мозг и шлюз операций — он будет запускать приложение Node, привязанное к базе данных Mongo, и предоставлять интерфейсный интерфейс для любого веб-браузера.
- Arduino, работающий от Pi, будет взаимодействовать между электроникой — переключателями питания радиоуправления.
Для этого вам понадобится:
- Ардуино и малиновый пи
- Некоторые розетки и контроллер с дистанционным управлением (я использовал их)
- USB-концентратор с питанием
Прежде чем мы начнем, вот демонстрационное видео от самого создателя проекта.
Начать заново
Мы собираемся использовать Raspian для этого проекта
и я настоятельно рекомендую начать с новой установки, если вы ранее выполняли другие хаки и тому подобное. Загрузите последний образ Raspian, скопируйте его на SD-карту и обязательно расширьте файловую систему и включите SSH. В оставшейся части этого руководства предполагается, что вы это сделали и подключаетесь через SSH, используя пользователя по умолчанию.
Если вы этого не делали раньше, в этом видео объясняется процесс подготовки вашей SD-карты в OS X:
И этот для пользователей Windows:
подготовка
Процесс установки довольно трудоемкий, и вытекает из инструкций здесь. К сожалению, они были устаревшими или не предназначены для Raspian, поэтому я значительно скорректировал их ниже. Приведенные ниже коды в основном можно вставлять в блоки — не нужно вставлять один за другим. Поскольку мы собираем несколько вещей на самом Pi, имейте в виду, что весь этот процесс займет много времени. Я бы сказал, иди, сделай себе чашку чая — но когда я говорю «долго», я имею в виду лучшую часть дня — так что 178 чашек будет более подходящим.
Все команды должны быть введены в Терминал, и вам может понадобиться нажать Enter в некоторых точках. Эти первые несколько команд обновят систему и установят предварительные требования:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install git-core git scons build-essential scons libpcre++-dev xulrunner-dev libboost-dev libboost-program-options-dev libboost-thread-dev libboost-filesystem-dev
Далее нам нужно установить Node:
sudo mkdir /opt/node
wget http://nodejs.org/dist/v0.10.2/node-v0.10.2-linux-arm-pi.tar.gz
tar xvzf node-v0.10.2-linux-arm-pi.tar.gz
sudo cp -r node-v0.10.2-linux-arm-pi/* /opt/node
sudo ln -s /opt/node/bin/node /usr/local/bin/node
sudo ln -s /opt/node/bin/npm /usr/local/bin/npm
Добавьте переменную PATH в свой профиль, чтобы ОС знала, где находится Node. Используйте текстовый редактор nano следующим образом:
sudo nano /etc/profile
Найдите строку, которая говорит экспортный путь и заменить его на:
NODE_JS_HOME="/opt/node"
PATH="$PATH:$NODE_JS_HOME/bin"
export PATH
Нажмите Ctrl-X, чтобы выйти, и Y, чтобы сохранить.
Возможно, вам придется выйти и снова войти, чтобы изменения пути вступили в силу, но вы можете проверить с помощью команды:
which node
Если вы не получили никакого вывода, указывающего на двоичный файл Node, что-то пошло не так.
Монго
Следующая задача — установить Mongo. Mongo — это база данных No-SQL на основе документов, которая все чаще используется веб-приложениями. К сожалению, это займет целую вечность, так как мы должны скомпилировать ее. При выполнении следующих команд вы получите много ошибок, таких как:
{standard input}:13085: Warning: swp{b} use is deprecated for this architecture
Не беспокойся об этом. Итак, запустите эти команды для установки Mongo:
git clone git://github.com/RickP/mongopi.git
cd mongopi
scons
sudo scons --prefix=/opt/mongo install
scons -c
Когда это закончится, нам нужно немного больше настройки, чтобы исправить проблемы с разрешениями и убедиться, что он работает при запуске.
sudo useradd mongodb
sudo mkdir /data/dbb
sudo chown $USER /data/db
cd /etc/init.d
sudo wget -O mongodb https://gist.github.com/ni-c/fd4df404bda6e87fb718/raw/36d45897cd943fbd6d071c096eb4b71b37d0fcbb/mongodb.sh
sudo chmod +x mongodb
sudo update-rc.d mongodb defaults
mongod
Эта последняя команда запустит сервер Mongo, и вам нужно будет открыть новый терминал, чтобы продолжить работу с другими командами. Я не совсем уверен в этом шаге, поэтому, если кто-то сможет исправить это в комментариях о том, как автоматически запускать mongod при запуске, это было бы очень полезно. Пока это работает, но не элегантно.
sudo shutdown -r now
Наконец, пришло время установить приложение Heimcontrol.js Node.
cd ~pi
git clone git://github.com/ni-c/heimcontrol.js.git
cd heimcontrol.js
npm install
Вы можете запустить приложение, набрав
node heimcontrol.js
На этом этапе вы должны иметь доступ к интерфейсу управления с HTTP: // локальный: 8080 от Pi, или замените localhost IP-адресом, если вы обращаетесь к нему с другого компьютера (и вы также можете настроить переадресацию портов
чтобы получить к нему доступ из любой точки мира), поэтому я бы посоветовал вам осмотреться и проверить, что все работает с базой данных, прежде чем подключать Arduino.
аппаратные средства
В конце концов, мне бы хотелось использовать проводное реле, но сейчас я буду использовать более безопасный вариант радиоуправляемых переключателей.
Я использовал несколько недорогих наборов стоимостью 20 фунтов стерлингов от Maplin, которые поставляются с 3 разъемами, и открыл пульт дистанционного управления, чтобы я мог напрямую взаимодействовать с микросхемой 433 МГц внутри. Я нашел инструкции для этого здесь.
Вы также можете приобрести отдельные передатчики 433 МГц, готовые к использованию на eBay или у поставщиков электроники для хобби. Все, что вам нужно, это подключить VCC к 5 В на Arduino, GND и один управляющий контакт — помните, какой из них вы использовали. (Схема Вилли Тиля)
Плагин работает, отправляя «трехсторонние коды», но они будут различаться в зависимости от производителя. Обратитесь к документации RCSwitch, чтобы найти ваши точные коды. Это руководство вики может также помочь.
Связь с Arduino осуществляется с помощью библиотеки Node под названием duino. Остановите приложение Heimcontrol, если оно запущено, и установите мост Arduino с помощью следующей команды.
npm install duino
Arduino должен загрузить этот код — я предлагаю вам скопировать и вставить его, чтобы установить его с другого компьютера. По сути, это программа-слушатель, которая реагирует на последовательные команды от Pi, но ничто не помешает вам расширить ее с помощью собственных функций.
Запустив веб-приложение, перейдите к настройки меню> Arduino.
Оттуда вы можете добавить новый элемент, выбрав метод RCSwitch, контакт вашего передатчика и адресный код Tristate. Не забудьте сохранить, а затем вернитесь к экрану основного экрана для новой кнопки.
ошибки:
После многих часов отладки кода я обнаружил, что однозначные номера контактов не работают — убедитесь, что ваш передатчик установлен на контакты 10 чтобы быть уверенным.
Я также обнаружил, что плагин Arduino был жестко запрограммирован с неверными конечными битами для кодов с тремя состояниями, которые нужны моим получателям. Сначала небольшое пояснение: трехсторонние коды состоят из 3 байтов информации. Первый определяет нам номер сети (1-4), а второй предоставляет адрес приемопередатчика (опять же 1-4, создавая максимум 16 адресуемых сокетов). Последний байт состоит из двух битов заполнения, плюс 2 бита для включения / выключения. К сожалению, последний байт жестко запрограммирован в плагине Arduino — и в моем случае код включения / выключения был неверным.
Я должен был вручную редактировать плагины / Arduino / index.js использовать правильные коды. Если вы используете те же разъемы для пульта дистанционного управления, что и у меня, измените строки 80 и далее на:
// Send RC code
if (item.value) {
return that.pins[item.pin].triState(item.code + "FFFF");//change from FF0F
} else {
return that.pins[item.pin].triState(item.code + "FFF0");//change from FF00
}
Вот демонстрационное видео о том, как все работает:
Я собираюсь оставить это здесь, но показания датчиков и ИК-пульты также поддерживаются. Я, вероятно, вернусь к ним позже, с некоторыми улучшениями. Если все это было слишком сложно для вас, возможно, посмотрите эти проекты Arduino для начинающих
,