Node-RED с камерой Raspberry Pi (съёмка фотографий)

В этом проекте мы покажем вам, как делать фотографии с помощью Node-RED, используя модуль камеры Raspberry Pi Camera Module V2.

Node-RED с камерой Raspberry Pi — съёмка фотографий

Предварительные требования

Если вам нравится домашняя автоматизация и вы хотите узнать больше о Node-RED, Raspberry Pi, ESP8266 и Arduino, я рекомендую вам скачать мой курс: Создайте систему домашней автоматизации за $100.

Необходимые компоненты

Для этого проекта вам понадобятся следующие компоненты (нажмите на ссылки ниже, чтобы найти лучшую цену на Maker Advisor):

Вы можете использовать ссылки выше или перейти напрямую на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!

Подключение модуля камеры Raspberry Pi

При выключенном Pi подключите камеру к порту CSI на Pi, как показано на следующем рисунке. Убедитесь, что камера подключена в правильной ориентации, синими буквами на ленточном кабеле вверх.

Подключение модуля камеры к порту CSI Raspberry Pi

Включение камеры

Чтобы использовать модуль камеры Raspberry Pi, необходимо включить программное обеспечение камеры на вашем Raspberry Pi. В среде рабочего стола перейдите в окно Raspberry Pi Configuration в меню Preferences, откройте вкладку Interfaces и включите Camera, как показано на рисунке ниже.

Включение камеры в Raspberry Pi Configuration

Или в окне Terminal введите следующую команду:

pi@raspberry:~ $ sudo raspi-config

Вы должны увидеть инструмент настройки программного обеспечения Raspberry Pi. Выберите Interfacing Options:

Interfacing Options в raspi-config

Включите камеру и перезагрузите ваш Pi:

Включение камеры в raspi-config

Установка узла камеры 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/',
Настройка httpStatic в settings.js

Когда закончите, выйдите и сохраните изменения.

Запуск 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).

Вкладки и группы в Node-RED Dashboard

Вы можете редактировать имя вкладки и менять её иконку:

  • Name: вы можете назвать её как угодно

  • Icon: вы должны использовать имя в соответствии с именами иконок по этой ссылке: https://klarsys.github.io/angular-material-icons

Редактирование вкладки в Node-RED Dashboard

Создание потока Node-RED

Перед созданием потока убедитесь, что у вас есть узел camerapi takephoto, как показано на рисунке ниже. Если у вас нет этого узла, проверьте, что вы выполнили инструкции из раздела Установка узла камеры Raspberry Pi выше.

Узел camerapi takephoto установлен в Node-RED

Сначала перетащите 3 узла в поток: template, camerapi takephoto и debug.

Перетаскивание узлов template, camerapi takephoto и debug

Узел Template

Затем отредактируйте узел template, как показано на рисунке ниже — скопируйте и вставьте код шаблона, приведённый ниже рисунка.

Настройка узла template в Node-RED
<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 со следующими свойствами:

Настройка узла camerapi takephoto

Примечание 1: не забудьте добавить правильный File Path к вашему узлу, включая последнюю косую черту — /home/pi/Pictures /

Примечание 2: каждый раз, когда вы открываете узел camerapi takephoto, он будет менять путь файла по умолчанию на yes. Поэтому убедитесь, что вы выбрали правильные свойства каждый раз, когда открываете узел.

Примечание 3: когда вы делаете новую фотографию, она будет сохранена в выбранной вами директории с именем photo1.JPEG. Каждый раз, когда вы делаете новую фотографию, Node-RED перезаписывает существующую фотографию, потому что у них одинаковое имя.

Соединение узлов

Соедините узлы, как показано на рисунке ниже.

Соединённые узлы в Node-RED

Наконец, нажмите кнопку Deploy, чтобы сохранить все изменения.

Кнопка Deploy в Node-RED

Пользовательский интерфейс Node-RED

Ваше приложение Node-RED готово. Чтобы получить доступ к пользовательскому интерфейсу, вы можете использовать любой браузер в вашей локальной сети, введя:

http://Your_RPi_IP_address:1880/ui

На следующем рисунке показано, как выглядит пользовательский интерфейс Node-RED. Мы используем это приложение для мониторинга нашего 3D-принтера Creality CR-10. С помощью этой настройки мы можем быстро проверить статус печати из любой комнаты, нажав кнопку TAKE A PHOTO.

Пользовательский интерфейс Node-RED с фотографией камеры Pi

Устранение неполадок

  1. Если ваше изображение не отображается в пользовательском интерфейсе Node-RED, вы можете перейти по следующему URL-адресу и проверить, правильно ли установлен путь httpStatic:

http://Your_RPi_IP_address:1880/photo1.JPEG
Тестирование фотографии камеры Pi через браузер
  1. Если камера Pi не делает фотографии, дважды проверьте, что ленточный кабель камеры хорошо подключён к порту CSI вашего Pi. Также убедитесь, что камера включена в меню raspi-config вашего Pi.

  2. Откройте узел camerapi takephoto и убедитесь, что в нём указан правильный путь к файлу.

Демонстрация

Вот GIF-изображение, показывающее, как работает приложение. Когда вы нажимаете на кнопку, новая фотография автоматически обновляется в пользовательском интерфейсе Node-RED.

Демонстрация работы Node-RED с камерой Raspberry Pi

Заключение

В этом проекте мы показали вам, как можно использовать камеру Raspberry Pi с Node-RED для съёмки фотографий. Вы можете редактировать поток и шаблон, чтобы использовать камеру в своих собственных проектах, будь то мониторинг вашей лаборатории, двери или 3D-принтера.

Надеемся, что этот пост был вам полезен. Спасибо за чтение!