Node-RED с камерой Raspberry Pi (съёмка фотографий)
В этом проекте мы покажем вам, как делать фотографии с помощью Node-RED, используя модуль камеры Raspberry Pi Camera Module V2.
Предварительные требования
Вы должны быть знакомы с Raspberry Pi — читайте «Начало работы с Raspberry Pi».
У вас должна быть установлена операционная система Raspbian или Raspbian Lite на вашем Raspberry Pi — читайте «Установка Raspbian Lite, включение и подключение по SSH».
Вам нужен Node-RED, установленный на вашем Pi и Node-RED Dashboard.
Мы также рекомендуем прочитать наше: Руководство по модулю камеры Raspberry Pi Camera V2.
Если вам нравится домашняя автоматизация и вы хотите узнать больше о Node-RED, Raspberry Pi, ESP8266 и Arduino, я рекомендую вам скачать мой курс: Создайте систему домашней автоматизации за $100.
Необходимые компоненты
Для этого проекта вам понадобятся следующие компоненты (нажмите на ссылки ниже, чтобы найти лучшую цену на Maker Advisor):
Вы можете использовать ссылки выше или перейти напрямую на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!
Подключение модуля камеры Raspberry Pi
При выключенном Pi подключите камеру к порту CSI на Pi, как показано на следующем рисунке. Убедитесь, что камера подключена в правильной ориентации, синими буквами на ленточном кабеле вверх.
Включение камеры
Чтобы использовать модуль камеры Raspberry Pi, необходимо включить программное обеспечение камеры на вашем Raspberry Pi. В среде рабочего стола перейдите в окно Raspberry Pi Configuration в меню Preferences, откройте вкладку Interfaces и включите Camera, как показано на рисунке ниже.
Или в окне Terminal введите следующую команду:
pi@raspberry:~ $ sudo raspi-config
Вы должны увидеть инструмент настройки программного обеспечения Raspberry Pi. Выберите Interfacing Options:
Включите камеру и перезагрузите ваш Pi:
Установка узла камеры Raspberry Pi
Чтобы установить узел камеры Raspberry Pi в Node-RED, введите следующую команду:
pi@raspberry:~ $ sudo npm install -g node-red-contrib-camerapi
Выбор директории для фотографий
Вам нужно выбрать директорию, в которой фотографии будут временно сохраняться. Для этого вам нужно отредактировать файл settings.js. Попробуйте одну из следующих команд, потому что директория установки Node-RED может отличаться.
pi@raspberry:~ $ sudo nano /root/.node-red/settings.js
или
pi@raspberry:~ $ sudo nano ~/.node-red/settings.js
Затем прокрутите файл вниз, найдите настройку httpStatic, раскомментируйте её и введите желаемую директорию для хранения фотографий камеры Raspberry Pi. Посмотрите на рисунок ниже.
httpStatic: '/home/pi/Pictures/',
Когда закончите, выйдите и сохраните изменения.
Запуск Node-RED
Чтобы запустить Node-RED, введите следующее в окне Terminal:
pi@raspberry:~ $ sudo node-red start
Чтобы получить доступ к Node-RED, откройте вкладку в любом браузере в локальной сети и введите следующее:
http://Your_RPi_IP_address:1880
Вы должны заменить Your_RPi_IP_address на IP-адрес вашего Raspberry Pi. Если вы не знаете IP-адрес вашего Raspberry Pi, введите в терминале:
pi@raspberry:~ $ hostname -I
Node-RED Dashboard
Вам нужно создать вкладку и группу в Node-RED, чтобы добавить виджеты панели управления. Следуйте приведённым ниже инструкциям для создания вкладки и группы (см. рисунок ниже):
В правом верхнем углу окна Node-RED у вас есть вкладка dashboard.
Выберите эту вкладку (1). Чтобы добавить вкладку в пользовательский интерфейс, нажмите кнопку +tab (2).
После создания вы можете редактировать вкладку, нажав кнопку edit (3).
Вы можете редактировать имя вкладки и менять её иконку:
Name: вы можете назвать её как угодно
Icon: вы должны использовать имя в соответствии с именами иконок по этой ссылке: https://klarsys.github.io/angular-material-icons
Создание потока Node-RED
Перед созданием потока убедитесь, что у вас есть узел camerapi takephoto, как показано на рисунке ниже. Если у вас нет этого узла, проверьте, что вы выполнили инструкции из раздела Установка узла камеры Raspberry Pi выше.
Сначала перетащите 3 узла в поток: template, camerapi takephoto и debug.
Узел Template
Затем отредактируйте узел template, как показано на рисунке ниже — скопируйте и вставьте код шаблона, приведённый ниже рисунка.
<script>
var value = "1";
// or overwrite value in your callback function ...
this.scope.action = function() { return value; }
function updateF() {
var source = '/photo1.JPEG',
timestamp = (new Date()).getTime(),
newUrl = source + '?_=' + timestamp;
document.getElementById("photo").src = newUrl;
}
</script>
<md-button ng-click="send({payload:action()})" onclick="setTimeout(updateF, 2500);" style="padding:40px; margin-bottom: 40px;" >
<ui-icon icon="camera"></ui-icon>
Take a photo<br>
</md-button>
<div style="margin-bottom:40px;">
<img src="/photo1.JPEG" id="photo" width="100%" height="100%">
</div>
Этот код JavaScript автоматически обновляет страницу Node-RED при создании новой фотографии.
Узел Camerapi Takephoto
Наконец, отредактируйте узел camerapi takephoto со следующими свойствами:
Примечание 1: не забудьте добавить правильный File Path к вашему узлу, включая последнюю косую черту — /home/pi/Pictures /
Примечание 2: каждый раз, когда вы открываете узел camerapi takephoto, он будет менять путь файла по умолчанию на yes. Поэтому убедитесь, что вы выбрали правильные свойства каждый раз, когда открываете узел.
Примечание 3: когда вы делаете новую фотографию, она будет сохранена в выбранной вами директории с именем photo1.JPEG. Каждый раз, когда вы делаете новую фотографию, Node-RED перезаписывает существующую фотографию, потому что у них одинаковое имя.
Соединение узлов
Соедините узлы, как показано на рисунке ниже.
Наконец, нажмите кнопку Deploy, чтобы сохранить все изменения.
Пользовательский интерфейс Node-RED
Ваше приложение Node-RED готово. Чтобы получить доступ к пользовательскому интерфейсу, вы можете использовать любой браузер в вашей локальной сети, введя:
http://Your_RPi_IP_address:1880/ui
На следующем рисунке показано, как выглядит пользовательский интерфейс Node-RED. Мы используем это приложение для мониторинга нашего 3D-принтера Creality CR-10. С помощью этой настройки мы можем быстро проверить статус печати из любой комнаты, нажав кнопку TAKE A PHOTO.
Устранение неполадок
Если ваше изображение не отображается в пользовательском интерфейсе Node-RED, вы можете перейти по следующему URL-адресу и проверить, правильно ли установлен путь httpStatic:
http://Your_RPi_IP_address:1880/photo1.JPEG
Если камера Pi не делает фотографии, дважды проверьте, что ленточный кабель камеры хорошо подключён к порту CSI вашего Pi. Также убедитесь, что камера включена в меню raspi-config вашего Pi.
Откройте узел camerapi takephoto и убедитесь, что в нём указан правильный путь к файлу.
Демонстрация
Вот GIF-изображение, показывающее, как работает приложение. Когда вы нажимаете на кнопку, новая фотография автоматически обновляется в пользовательском интерфейсе Node-RED.
Заключение
В этом проекте мы показали вам, как можно использовать камеру Raspberry Pi с Node-RED для съёмки фотографий. Вы можете редактировать поток и шаблон, чтобы использовать камеру в своих собственных проектах, будь то мониторинг вашей лаборатории, двери или 3D-принтера.
Надеемся, что этот пост был вам полезен. Спасибо за чтение!