Node-RED:Введение/Запуск на Raspberry Pi: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
 
Нет описания правки
 
(не показано 10 промежуточных версий 2 участников)
Строка 2: Строка 2:
{{Перевод от Сubewriter}}
{{Перевод от Сubewriter}}
{{Myagkij-редактор}}
{{Myagkij-редактор}}
{{Черновик}}


=Запуск на Raspberry Pi<ref>[https://nodered.org/docs/hardware/raspberrypi nodered.org - Running on Raspberry Pi]</ref>=
=Запуск на Raspberry Pi<ref>[https://nodered.org/docs/hardware/raspberrypi nodered.org - Running on Raspberry Pi]</ref>=
Строка 15: Строка 13:
Если у вас установлена [[Raspbian]] или другая [[ОС]] на базе [[Debian]] (вроде [[Ubuntu]] или [[Diet-Pi]]), на которую [[Node-RED]] еще не установлен, то его можно установить или обновить при помощи команды-скрипта ниже:
Если у вас установлена [[Raspbian]] или другая [[ОС]] на базе [[Debian]] (вроде [[Ubuntu]] или [[Diet-Pi]]), на которую [[Node-RED]] еще не установлен, то его можно установить или обновить при помощи команды-скрипта ниже:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
bash <(curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered)
bash <(curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered)
</syntaxhighlight>
</syntaxhighlight>
Строка 27: Строка 25:
* переместить все глобально установленные ноды в пользовательскую папку '''«~/.node-red»''', чтобы ими можно было управлять через меню '''Palette''';
* переместить все глобально установленные ноды в пользовательскую папку '''«~/.node-red»''', чтобы ими можно было управлять через меню '''Palette''';
* опционально (пере)установить дополнительные ноды, которые были предустановлены на полном образе [[Raspbian]];
* опционально (пере)установить дополнительные ноды, которые были предустановлены на полном образе [[Raspbian]];
* ''' Примечание:''' Этот скрипт не обновляет уже имеющиеся ноды, установленные пользователем. Пользователь должен сделать это вручную (см. ниже).
 
{{Примечание1|Этот скрипт не обновляет уже имеющиеся ноды, установленные пользователем. Пользователь должен сделать это вручную (см. ниже).}}


Этот скрипт предназначен для [[Pi]], но его можно запустить на любой ОС, основанной на [[Debian]] (вроде [[Ubuntu]]), а также на других аппаратных платформах (но тестировался он не очень широко).
Этот скрипт предназначен для [[Pi]], но его можно запустить на любой ОС, основанной на [[Debian]] (вроде [[Ubuntu]]), а также на других аппаратных платформах (но тестировался он не очень широко).
Строка 57: Строка 56:
Чтобы пересобрать ноды, воспользуйтесь следующими командами:
Чтобы пересобрать ноды, воспользуйтесь следующими командами:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
cd ~/.node-red
cd ~/.node-red
npm rebuild
npm rebuild
Строка 64: Строка 63:
Чтобы увидеть список уже установленных нод, воспользуйтесь следующими командами:
Чтобы увидеть список уже установленных нод, воспользуйтесь следующими командами:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
cd ~/.node-red
cd ~/.node-red
npm ls --depth=0
npm ls --depth=0
</syntaxhighlight>
</syntaxhighlight>


'''Примечание:''' Этот скрипт не обновляет ноды, установленные локально. Чтобы сделать это, перейдите в пользовательскую папку и запустите команды ниже. Если вам нужны строго определенные версии некоторых нодов, то это можно сделать с помощью ручного редактирования файла '''«package.json»''' (т.е. вам нужно будет указать нужные вам версии), который находится в этой директории. Это нужно делать до запуска команды '''«npm update»'''.
{{Примечание1|Этот скрипт не обновляет ноды, установленные локально. Чтобы сделать это, перейдите в пользовательскую папку и запустите команды ниже. Если вам нужны строго определенные версии некоторых нодов, то это можно сделать с помощью ручного редактирования файла '''«package.json»''' (т.е. вам нужно будет указать нужные вам версии), который находится в этой директории. Это нужно делать до запуска команды '''«npm update»'''.}}


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
cd ~/.node-red
cd ~/.node-red
npm outdated
npm outdated
Строка 87: Строка 86:
* В новом окне терминала запустите команду '''«node-red-start»'''
* В новом окне терминала запустите команду '''«node-red-start»'''


'''Примечание:''' Если закрыть окно (или нажать {{клавиша|Ctrl}}+{{клавиша|C}}), то [[Node-RED]] все равно продолжит работать, но в фоновом режиме.
{{Примечание1|1=Если закрыть окно (или нажать {{клавиша|Ctrl}}+{{клавиша|C}}), то [[Node-RED]] все равно продолжит работать, но в фоновом режиме.}}


Чтобы остановить [[Node-RED]], запустите команду '''«node-red-stop»'''.
Чтобы остановить [[Node-RED]], запустите команду '''«node-red-stop»'''.
Строка 97: Строка 96:
Если вам нужно, чтобы [[Node-RED]] запускался при загрузке [[Pi]], запустите следующую команду:
Если вам нужно, чтобы [[Node-RED]] запускался при загрузке [[Pi]], запустите следующую команду:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
sudo systemctl enable nodered.service
sudo systemctl enable nodered.service
</syntaxhighlight>
</syntaxhighlight>
Строка 103: Строка 102:
Чтобы отключить автозапуск при загрузке, воспользуйтесь следующей командой:
Чтобы отключить автозапуск при загрузке, воспользуйтесь следующей командой:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
sudo systemctl disable nodered.service
sudo systemctl disable nodered.service
</syntaxhighlight>
</syntaxhighlight>
Строка 113: Строка 112:
Команды ниже устанавливают '''«npm»''' и обновляют его до последней версии:
Команды ниже устанавливают '''«npm»''' и обновляют его до последней версии:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
sudo apt-get install npm
sudo apt-get install npm
sudo npm install -g npm
sudo npm install -g npm
Строка 125: Строка 124:
Вам нужно будет перезапустить [[Node-RED]]. Затем вы можете начать пользоваться редактором.
Вам нужно будет перезапустить [[Node-RED]]. Затем вы можете начать пользоваться редактором.


'''Примечание:''' В данный момент разработка [[Debian]]/[[Raspbian Wheezy]] почти не ведется, поэтому [[Node-RED]] их тоже не поддерживает. Эта документация ориентирована как минимум на [[Jessie]].
{{Примечание1|В данный момент разработка [[Debian]]/[[Raspbian Wheezy]] почти не ведется, поэтому [[Node-RED]] их тоже не поддерживает. Эта документация ориентирована как минимум на [[Jessie]].}}


== Доступ к GPIO-контактам ==
== Доступ к GPIO-контактам ==
Строка 133: Строка 132:
В комплекте с [[Node-RED]] идет RPi-скрипт '''«nrgpio»''', предназначенный для взаимодействия с аппаратными GPIO-контактами [[Raspberry Pi]]. Если вы установили глобальный [[npm-модуль]], то этот скрипт должен быть расположен либо здесь...
В комплекте с [[Node-RED]] идет RPi-скрипт '''«nrgpio»''', предназначенный для взаимодействия с аппаратными GPIO-контактами [[Raspberry Pi]]. Если вы установили глобальный [[npm-модуль]], то этот скрипт должен быть расположен либо здесь...


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
/usr/lib/node_modules/node-red/nodes/core/hardware/nrgpio ver
/usr/lib/node_modules/node-red/nodes/core/hardware/nrgpio ver
</syntaxhighlight>
</syntaxhighlight>
Строка 139: Строка 138:
...либо здесь...
...либо здесь...


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
/usr/local/lib/node_modules/node-red/nodes/core/hardware/nrgpio ver
/usr/local/lib/node_modules/node-red/nodes/core/hardware/nrgpio ver
</syntaxhighlight>
</syntaxhighlight>
Строка 145: Строка 144:
Если у вас [[Pi2]], то версия библиотеки [[RPi.GPIO]] должна быть как минимум 0.5.11, а если оригинальная Pi – как минимум 0.5.8. Если это не так, то воспользуйтесь командой ниже, чтобы установить самую последнюю версию библиотеки:
Если у вас [[Pi2]], то версия библиотеки [[RPi.GPIO]] должна быть как минимум 0.5.11, а если оригинальная Pi – как минимум 0.5.8. Если это не так, то воспользуйтесь командой ниже, чтобы установить самую последнюю версию библиотеки:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
sudo apt-get update && sudo apt-get install python-rpi.gpio
sudo apt-get update && sudo apt-get install python-rpi.gpio
</syntaxhighlight>
</syntaxhighlight>
Строка 151: Строка 150:
Кроме того, текущий пользователь должен быть членом группы '''«gpio»'''. Чтобы добавить текущего пользователя в эту группу, воспользуйтесь следующей командой:
Кроме того, текущий пользователь должен быть членом группы '''«gpio»'''. Чтобы добавить текущего пользователя в эту группу, воспользуйтесь следующей командой:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
sudo adduser $USER gpio
sudo adduser $USER gpio
</syntaxhighlight>
</syntaxhighlight>
Строка 157: Строка 156:
Если вы хотите запускать команды не только как пользователь '''«pi»''' или '''«root»''', то вам нужно будет либо добавить этого пользователя в [https://www.raspberrypi.org/documentation/linux/usage/users.md список «sudoers»], либо просто открыть [[Python]]. К примеру, при помощи команды ниже и '''«visudo»''' можно добавить в группу '''«sudoers»''' пользователя '''«NodeREDusername»''':
Если вы хотите запускать команды не только как пользователь '''«pi»''' или '''«root»''', то вам нужно будет либо добавить этого пользователя в [https://www.raspberrypi.org/documentation/linux/usage/users.md список «sudoers»], либо просто открыть [[Python]]. К примеру, при помощи команды ниже и '''«visudo»''' можно добавить в группу '''«sudoers»''' пользователя '''«NodeREDusername»''':


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
NodeREDusername ALL=(ALL) NOPASSWD: /usr/bin/python
NodeREDusername ALL=(ALL) NOPASSWD: /usr/bin/python
</syntaxhighlight>
</syntaxhighlight>
Строка 167: Строка 166:
То есть вместе с командой '''«node-red-pi»''' нужно указать флаг '''«--max-old-space-size»''':
То есть вместе с командой '''«node-red-pi»''' нужно указать флаг '''«--max-old-space-size»''':


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
node-red-pi --max-old-space-size=256
node-red-pi --max-old-space-size=256
</syntaxhighlight>
</syntaxhighlight>
Строка 173: Строка 172:
Если вы хотите запустить [[Node-RED]] напрямую – при помощи команды '''«node»''' – этот флаг нужно поместить между '''«node»''' и '''«red.js»''':
Если вы хотите запустить [[Node-RED]] напрямую – при помощи команды '''«node»''' – этот флаг нужно поместить между '''«node»''' и '''«red.js»''':


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
node --max-old-space-size=256 red.js
node --max-old-space-size=256 red.js
</syntaxhighlight>
</syntaxhighlight>
Строка 179: Строка 178:
Этот флаг задает размер памяти, который сможет использовать [[Node-RED]] до того, как [[Pi]] начнет ее очищать. Если на вашей [[Pi]] больше ничего не запущено, вы можете задать здесь 256 Мб или даже выше. О количестве доступной памяти можно узнать при помощи команды '''«free -h»'''.
Этот флаг задает размер памяти, который сможет использовать [[Node-RED]] до того, как [[Pi]] начнет ее очищать. Если на вашей [[Pi]] больше ничего не запущено, вы можете задать здесь 256 Мб или даже выше. О количестве доступной памяти можно узнать при помощи команды '''«free -h»'''.


'''Примечание:''' Предустановленная версия [[Node-RED]] на [[Raspbian]], использующая команду '''«node-red-start»''', тоже по умолчанию выставляет этот показатель на 256 Мб. Если вы хотите поменять его, то вам (через '''«sudo»''') нужно отредактировать файл '''«/lib/systemd/system/nodered.service»'''. О том, как задать эту настройку в установленной вручную версии [[Node-RED]], читайте ниже.
{{Примечание1|1=Предустановленная версия [[Node-RED]] на [[Raspbian]], использующая команду '''«node-red-start»''', тоже по умолчанию выставляет этот показатель на 256 Мб. Если вы хотите поменять его, то вам (через '''«sudo»''') нужно отредактировать файл '''«/lib/systemd/system/nodered.service»'''. О том, как задать эту настройку в установленной вручную версии [[Node-RED]], читайте ниже.}}


=== Автозапуск Node-RED при помощи SystemD ===
=== Автозапуск Node-RED при помощи SystemD ===
Строка 185: Строка 184:
Автозапуск [[Node-RED]] предпочтительней делать через при помощи встроенного демона [[systemd]]. Предустановленная версия делает это при помощи файла '''«nodered.service»''', а также при помощи скриптов запуска и остановки. Их можно установить с помощью следующих команд:
Автозапуск [[Node-RED]] предпочтительней делать через при помощи встроенного демона [[systemd]]. Предустановленная версия делает это при помощи файла '''«nodered.service»''', а также при помощи скриптов запуска и остановки. Их можно установить с помощью следующих команд:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/nodered.service -O /lib/systemd/system/nodered.service
sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/nodered.service -O /lib/systemd/system/nodered.service
sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-start -O /usr/bin/node-red-start
sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-start -O /usr/bin/node-red-start
Строка 193: Строка 192:
</syntaxhighlight>
</syntaxhighlight>


'''Примечание:''' Эти команды запускаются пользователем '''«root» («sudo»)'''. Они загружают три файла в корректные места, делают два скрипта исполняемыми, а затем перезагружают демона [[systemd]].
{{Примечание1|Эти команды запускаются пользователем '''«root» («sudo»)'''. Они загружают три файла в корректные места, делают два скрипта исполняемыми, а затем перезагружают демона [[systemd]].
После этого [[Node-RED]] можно будет запускать и останавливать с помощью команд '''«node-red-start»''' и '''«node-red-stop»'''.
После этого [[Node-RED]] можно будет запускать и останавливать с помощью команд '''«node-red-start»''' и '''«node-red-stop»'''.}}


Далее, чтобы настроить автозапуск [[Node-RED]] при каждой загрузке или краше, воспользуйтесь:
Далее, чтобы настроить автозапуск [[Node-RED]] при каждой загрузке или краше, воспользуйтесь:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
sudo systemctl enable nodered.service
sudo systemctl enable nodered.service
</syntaxhighlight>
</syntaxhighlight>
Строка 204: Строка 203:
Отключить автозапуск можно при помощи следующей команды:
Отключить автозапуск можно при помощи следующей команды:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
sudo systemctl disable nodered.service
sudo systemctl disable nodered.service
</syntaxhighlight>
</syntaxhighlight>
Строка 210: Строка 209:
Демон systemd использует для логов файл '''«/var/log/system.log»'''. Для фильтрации данных в этих логах воспользуйтесь следующей командой:
Демон systemd использует для логов файл '''«/var/log/system.log»'''. Для фильтрации данных в этих логах воспользуйтесь следующей командой:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
sudo journalctl -f -u nodered -o cat
sudo journalctl -f -u nodered -o cat
</syntaxhighlight>
</syntaxhighlight>
Строка 218: Строка 217:
Чтобы выполнить что-то не пользователем '''«pi»''', который используется по умолчанию, а другим пользователем, вам нужно при помощи «sudo» отредактировать файл '''«/lib/systemd/system/nodered.service»''', указав нужного пользователя вместо '''{ваш_пользователь}'''.
Чтобы выполнить что-то не пользователем '''«pi»''', который используется по умолчанию, а другим пользователем, вам нужно при помощи «sudo» отредактировать файл '''«/lib/systemd/system/nodered.service»''', указав нужного пользователя вместо '''{ваш_пользователь}'''.


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
...
...
[Service]
[Service]
Строка 235: Строка 234:
Сохраните файл, а потом запустите:
Сохраните файл, а потом запустите:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
sudo systemctl daemon-reload
sudo systemctl daemon-reload
</syntaxhighlight>
</syntaxhighlight>
Строка 243: Строка 242:
Если вам для [[HTTP-запрос]]ов необходимо использовать прокси, то вам нужно задать переменную окружения '''«HTTP_PROXY»'''. При использовании [[systemd]] это нужно делать с помощью редактирования (через '''«sudo»''') файла '''«/lib/systemd/system/nodered.service»''' – добавления еще одной строчки с '''«Environment=»'''. Например, вот так:
Если вам для [[HTTP-запрос]]ов необходимо использовать прокси, то вам нужно задать переменную окружения '''«HTTP_PROXY»'''. При использовании [[systemd]] это нужно делать с помощью редактирования (через '''«sudo»''') файла '''«/lib/systemd/system/nodered.service»''' – добавления еще одной строчки с '''«Environment=»'''. Например, вот так:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
...
...
Nice=5
Nice=5
Строка 253: Строка 252:
Сохраните файл и запустите следующую команду, чтобы перезапустить настройки:
Сохраните файл и запустите следующую команду, чтобы перезапустить настройки:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
sudo systemctl daemon-reload
sudo systemctl daemon-reload
</syntaxhighlight>
</syntaxhighlight>
Строка 263: Строка 262:
После запуска [[Node-RED]] вам нужно будет ввести в браузер [[IP-адрес]] устройства, на котором был запущен [[Node-RED]], а затем нажать на {{клавиша|Enter}}. [[IP-адрес]] выглядит примерно так:
После запуска [[Node-RED]] вам нужно будет ввести в браузер [[IP-адрес]] устройства, на котором был запущен [[Node-RED]], а затем нажать на {{клавиша|Enter}}. [[IP-адрес]] выглядит примерно так:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
http://{the-ip-address-returned}:1880/
http://{the-ip-address-returned}:1880/
</syntaxhighlight>
</syntaxhighlight>
Строка 269: Строка 268:
Один из способов найти [[IP-адрес]] [[Pi]] – это вот эта команда:
Один из способов найти [[IP-адрес]] [[Pi]] – это вот эта команда:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
hostname -I
hostname -I
</syntaxhighlight>
</syntaxhighlight>


'''Примечание:''' Браузером по умолчанию в [[Raspbian]], как правило, является [[Epiphany]]. Он немного чудит, поэтому некоторые горячие клавиши редактора [[Node-RED]] в нем почему-то не работают. Мы настоятельно рекомендуем установить вместо него [[Firefox-ESR]] или [[Chromium]]:
{{Примечание1|1=Браузером по умолчанию в [[Raspbian]], как правило, является [[Epiphany]]. Он немного чудит, поэтому некоторые горячие клавиши редактора [[Node-RED]] в нем почему-то не работают. Мы настоятельно рекомендуем установить вместо него [[Firefox-ESR]] или [[Chromium]]:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
sudo apt-get install firefox-esr
sudo apt-get install firefox-esr
</syntaxhighlight>
</syntaxhighlight>
}}


В более новых версиях [[Raspbian]] по умолчанию стоит [[Chromium]]. Он исправно работает, но подтормаживает на [[Pi1]] и [[Zero]].
В более новых версиях [[Raspbian]] по умолчанию стоит [[Chromium]]. Он исправно работает, но подтормаживает на [[Pi1]] и [[Zero]].
Строка 287: Строка 287:
Как правило, дополнительные ноды можно установить при помощи графического редактора [[Node-RED]], кликнув на кнопку с тремя полосками справа вверху, а затем на '''«Manage palette»'''. Чтобы установить дополнительные ноды вручную, сначала нужно перейти в пользовательскую директорию. По умолчанию это '''«~/.node-red»'''.
Как правило, дополнительные ноды можно установить при помощи графического редактора [[Node-RED]], кликнув на кнопку с тремя полосками справа вверху, а затем на '''«Manage palette»'''. Чтобы установить дополнительные ноды вручную, сначала нужно перейти в пользовательскую директорию. По умолчанию это '''«~/.node-red»'''.


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
cd ~/.node-red
cd ~/.node-red
</syntaxhighlight>
</syntaxhighlight>
Строка 293: Строка 293:
В [http://flows.nodered.org/ библиотеке потоков] [[Node-RED]] есть дополнительные ноды, предназначенные для работы с некоторыми устройствами (например, с Pi-модулями [[Pibrella]], [[PiFace]] и [[LEDBorg]], светодиодами [[Neopixel]], температурными датчиками и т.д.). Например, ноду '''«node-red-node-pi-gpiod»''', позволяющую получить удаленный доступ к GPIO-контактам [[Pi]] и управлять [[сервопривод]]ами, можно установить следующим образом:
В [http://flows.nodered.org/ библиотеке потоков] [[Node-RED]] есть дополнительные ноды, предназначенные для работы с некоторыми устройствами (например, с Pi-модулями [[Pibrella]], [[PiFace]] и [[LEDBorg]], светодиодами [[Neopixel]], температурными датчиками и т.д.). Например, ноду '''«node-red-node-pi-gpiod»''', позволяющую получить удаленный доступ к GPIO-контактам [[Pi]] и управлять [[сервопривод]]ами, можно установить следующим образом:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
cd ~/.node-red
cd ~/.node-red
npm install node-red-node-pi-gpiod
npm install node-red-node-pi-gpiod
Строка 300: Строка 300:
После этого вам нужно будет остановить и снова запустить [[Node-RED]], чтобы загрузить новые ноды, а затем обновить страницу редактора [[Node-RED]] в браузере:
После этого вам нужно будет остановить и снова запустить [[Node-RED]], чтобы загрузить новые ноды, а затем обновить страницу редактора [[Node-RED]] в браузере:


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
node-red-stop
node-red-stop
node-red-start
node-red-start
Строка 319: Строка 319:
Для работы с этими нодами используется [[Python]]-команда '''«nrgpio»''', установленная в [[Node-RED]] по умолчанию. Она позволяет управлять GPIO-контактами [[Pi]] при помощи нод из «палитры» [[Node-RED]]. Но для этого пользователь должен находиться в группе '''«gpio»'''.
Для работы с этими нодами используется [[Python]]-команда '''«nrgpio»''', установленная в [[Node-RED]] по умолчанию. Она позволяет управлять GPIO-контактами [[Pi]] при помощи нод из «палитры» [[Node-RED]]. Но для этого пользователь должен находиться в группе '''«gpio»'''.


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
sudo adduser $USER gpio
sudo adduser $USER gpio
</syntaxhighlight>
</syntaxhighlight>
Строка 329: Строка 329:
Скопируйте [[JSON-код]] ниже, кликните в редакторе [[Node-RED]] на кнопку с тремя полосками (она находится справа вверху), а затем на '''«Import» > «Clipboard»''' (или просто нажмите на {{клавиша|Ctrl}}+{{клавиша|I}}). Откроется новое окно, вставьте [[JSON-код]] в поле посередине этого окна, а затем нажмите на '''«Import»'''. Теперь разместите поток в рабочей области редактора и кликните левой кнопкой мыши.
Скопируйте [[JSON-код]] ниже, кликните в редакторе [[Node-RED]] на кнопку с тремя полосками (она находится справа вверху), а затем на '''«Import» > «Clipboard»''' (или просто нажмите на {{клавиша|Ctrl}}+{{клавиша|I}}). Откроется новое окно, вставьте [[JSON-код]] в поле посередине этого окна, а затем нажмите на '''«Import»'''. Теперь разместите поток в рабочей области редактора и кликните левой кнопкой мыши.


<syntaxhighlight lang="javascript" enclose="div">
<syntaxhighlight lang="javascript">
[{"id":"ae05f870.3bfc2","type":"function","name":"Toggle 0/1 on input","func":"\ncontext.state = context.state || 0;\n\n(context.state == 0) ? context.state = 1 : context.state = 0;\nmsg.payload = context.state;\n\nreturn msg;","outputs":1,"x":348.1666488647461,"y":146.16667652130127,"wires":[["1b0b73e9.14712c","b90e5005.a7c3b8"]]},{"id":"1b0b73e9.14712c","type":"debug","name":"","active":true,"x":587.1666488647461,"y":206.1666774749756,"wires":[]},{"id":"7aa75c69.fd5894","type":"inject","name":"tick every 1 sec","topic":"","payload":"","repeat":"1","crontab":"","once":false,"x":147.1666488647461,"y":146.1666774749756,"wires":[["ae05f870.3bfc2"]]},{"id":"b90e5005.a7c3b8","type":"rpi-gpio out","name":"","pin":"7","x":585.0000114440918,"y":146.00001049041748,"wires":[]}]
[{"id":"ae05f870.3bfc2","type":"function","name":"Toggle 0/1 on input","func":"\ncontext.state = context.state || 0;\n\n(context.state == 0) ? context.state = 1 : context.state = 0;\nmsg.payload = context.state;\n\nreturn msg;","outputs":1,"x":348.1666488647461,"y":146.16667652130127,"wires":[["1b0b73e9.14712c","b90e5005.a7c3b8"]]},{"id":"1b0b73e9.14712c","type":"debug","name":"","active":true,"x":587.1666488647461,"y":206.1666774749756,"wires":[]},{"id":"7aa75c69.fd5894","type":"inject","name":"tick every 1 sec","topic":"","payload":"","repeat":"1","crontab":"","once":false,"x":147.1666488647461,"y":146.1666774749756,"wires":[["ae05f870.3bfc2"]]},{"id":"b90e5005.a7c3b8","type":"rpi-gpio out","name":"","pin":"7","x":585.0000114440918,"y":146.00001049041748,"wires":[]}]
</syntaxhighlight>
</syntaxhighlight>
Строка 349: Строка 349:
Во-первых, npm-модуль '''«wiring-pi»''' должен быть установлен в ту же директорию, где находится файл '''«settings.js»'''.
Во-первых, npm-модуль '''«wiring-pi»''' должен быть установлен в ту же директорию, где находится файл '''«settings.js»'''.


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
cd ~/.node-red
cd ~/.node-red
npm install wiring-pi
npm install wiring-pi
Строка 358: Строка 358:
Для этого вам нужно отредактировать файл '''«settings.js»''', добавив в секцию '''«functionGlobalContext»''' модуль '''«wiring-pi»''':
Для этого вам нужно отредактировать файл '''«settings.js»''', добавив в секцию '''«functionGlobalContext»''' модуль '''«wiring-pi»''':


<syntaxhighlight lang="javascript" enclose="div">
<syntaxhighlight lang="javascript">
functionGlobalContext: {
functionGlobalContext: {
     wpi: require('wiring-pi')
     wpi: require('wiring-pi')
Строка 372: Строка 372:
Скопируйте [[JSON-код]] ниже, кликните в редакторе [[Node-RED]] на кнопку с тремя полосками (она находится справа вверху), а затем на '''«Import» > «Clipboard»''' (или просто нажмите {{клавиша|Ctrl}}+{{клавиша|I}}). Откроется новое окно – вставьте в него [[JSON-код]] и нажмите на '''«Import»'''. После этого разместите поток в рабочей области редактора [[Node-RED]] и нажмите на левую кнопку мыши.
Скопируйте [[JSON-код]] ниже, кликните в редакторе [[Node-RED]] на кнопку с тремя полосками (она находится справа вверху), а затем на '''«Import» > «Clipboard»''' (или просто нажмите {{клавиша|Ctrl}}+{{клавиша|I}}). Откроется новое окно – вставьте в него [[JSON-код]] и нажмите на '''«Import»'''. После этого разместите поток в рабочей области редактора [[Node-RED]] и нажмите на левую кнопку мыши.


<syntaxhighlight lang="javascript" enclose="div">
<syntaxhighlight lang="javascript">
[{"id":"860e0da9.98757","type":"function","name":"Toggle LED on input","func":"\n// select wpi pin 0 = pin 11 on header (for v2)\nvar pin = 0;\n\n// initialise the wpi to use the global context\nvar wpi = context.global.wpi;\n\n// use the default WiringPi pin number scheme...\nwpi.setup();\n\n// initialise the state of the pin if not already set\n// anything in context.  persists from one call to the function to the next\ncontext.state = context.state || wpi.LOW;\n\n// set the mode to output (just in case)\nwpi.pinMode(pin, wpi.modes.OUTPUT);\n\n// toggle the stored state of the pin\n(context.state == wpi.LOW) ? context.state = wpi.HIGH : context.state = wpi.LOW;\n\n// output the state to the pin\nwpi.digitalWrite(pin, context.state);\n\n// we don't \"need\" to return anything here but may help for debug\nreturn msg;","outputs":1,"x":333.16666412353516,"y":79.16666793823242,"wires":[["574f5131.36d0f8"]]},{"id":"14446ead.5aa501","type":"inject","name":"tick","topic":"","payload":"","repeat":"1","once":false,"x":113.16666412353516,"y":59.16666793823242,"wires":[["860e0da9.98757"]]},{"id":"574f5131.36d0f8","type":"debug","name":"","active":true,"x":553.1666641235352,"y":99.16666793823242,"wires":[]}]
[{"id":"860e0da9.98757","type":"function","name":"Toggle LED on input","func":"\n// select wpi pin 0 = pin 11 on header (for v2)\nvar pin = 0;\n\n// initialise the wpi to use the global context\nvar wpi = context.global.wpi;\n\n// use the default WiringPi pin number scheme...\nwpi.setup();\n\n// initialise the state of the pin if not already set\n// anything in context.  persists from one call to the function to the next\ncontext.state = context.state || wpi.LOW;\n\n// set the mode to output (just in case)\nwpi.pinMode(pin, wpi.modes.OUTPUT);\n\n// toggle the stored state of the pin\n(context.state == wpi.LOW) ? context.state = wpi.HIGH : context.state = wpi.LOW;\n\n// output the state to the pin\nwpi.digitalWrite(pin, context.state);\n\n// we don't \"need\" to return anything here but may help for debug\nreturn msg;","outputs":1,"x":333.16666412353516,"y":79.16666793823242,"wires":[["574f5131.36d0f8"]]},{"id":"14446ead.5aa501","type":"inject","name":"tick","topic":"","payload":"","repeat":"1","once":false,"x":113.16666412353516,"y":59.16666793823242,"wires":[["860e0da9.98757"]]},{"id":"574f5131.36d0f8","type":"debug","name":"","active":true,"x":553.1666641235352,"y":99.16666793823242,"wires":[]}]
</syntaxhighlight>
</syntaxhighlight>
Строка 383: Строка 383:


<references />
<references />
{{Навигационная таблица/Node-RED библиотеки}}
{{Навигационная таблица/Телепорт}}

Текущая версия от 22:50, 22 сентября 2023

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Запуск на Raspberry Pi[1]

Мы рекомендуем устанавливать Node-RED на Pi при помощи скрипта ниже, но Node-RED также можно установить из приложения Recommended Software, установленного на SD-образ Raspbian, который можно загрузить с RaspberryPi.org. Если вы воспользуетесь вторым способом, то рекомендуем также обновить Node-RED при помощи скрипта из первого способа.

Node-RED больше не поддерживает Node.js версии 4.x и старее. Последней версией Node-RED, поддерживающей 4.x, была 0.19.6.

Установка и обновление

Если у вас установлена Raspbian или другая ОС на базе Debian (вроде Ubuntu или Diet-Pi), на которую Node-RED еще не установлен, то его можно установить или обновить при помощи команды-скрипта ниже:

bash <(curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered)

Если у вас установлена мини-версия Debian, то вам перед этим скриптом, возможно, понадобится запустить команду «sudo apt-get install build-essential», чтобы собрать и установить «serialport». Но это опционально.

Описание скрипта

Нодами Node-RED теперь можно управлять при помощи меню Palette, встроенного в редактор. Однако на Pi-версию Node-RED, используемую по умолчанию, глобально предустановлено несколько нодов, что создает трудности в их управлении и обновлении. Этот скрипт предназначен для того, чтобы...

  • обновить текущего пользователя до Node.js LTS 8.x/10.x и последней версии Node-RED;
  • переместить все глобально установленные ноды в пользовательскую папку «~/.node-red», чтобы ими можно было управлять через меню Palette;
  • опционально (пере)установить дополнительные ноды, которые были предустановлены на полном образе Raspbian;
Примечание

Этот скрипт не обновляет уже имеющиеся ноды, установленные пользователем. Пользователь должен сделать это вручную (см. ниже).

Этот скрипт предназначен для Pi, но его можно запустить на любой ОС, основанной на Debian (вроде Ubuntu), а также на других аппаратных платформах (но тестировался он не очень широко).

Кроме того, этот скрипт запускает много команд через «sudo», а также удаляет текущий Node.js и основные директории Node-RED. Все команды скрипта можно посмотреть по этой ссылке.

Скрипт выполняет следующие действия:

  • Спрашивает, хотите ли вы (пере)установить дополнительные ноды Pi;
  • Сохраняет список всех глобально установленных нодов «node-red-», найденных в «/usr/lib/node_modules»;
  • Запускает «apt-get remove nodered»;
  • Удаляет все бинарные файлы Node-RED из «/usr/bin» и «/usr/local/bin»;
  • Удаляет все модули Node-RED из «/usr/lib/node_modules» и «/usr/local/lib/node_modules»;
  • Определяет, откуда был установлен Node.js – из пакета Node.js или Debian;
  • Удаляет (если необходимо) Node.js, если его версия – это не 8.x или старее, а затем устанавливает последнюю версию LTS v8 или v10 (не с помощью «apt»);
  • Очищает кэш «npm» и кэш «.node-gyp», чтобы удалить все прежние версии кода;
  • Устанавливает последнюю версию Node-RED;
  • Переустанавливает под аккаунтом пользователя все ноды, которые ранее были установлены глобально;
  • Переустанавливает дополнительные Pi-ноды (если необходимо);
  • Пересобирает все ноды (с целью перекомпиляции всех бинарных файлов, чтобы они соответствовали последней версии Node.js);
  • Добавляет в «/usr/bin» команды «node-red-start», «node-red-stop» и «node-red-log»;
  • Добавляет иконку и ярлык для меню;
  • Добавляет systemd-скрипт и задает пользователя;
  • Если это Pi, добавляет IoT-пример для измерения температуры CPU;

Дисклеймер

Этот скрипт тестировался только на версиях с небольшим количеством дополнительных нод. Он пытается пересобрать все ноды с нативными плагинами, которые вы установили в папку «~/.node-red». Этот процесс может пойти неудачно, поэтому вам, возможно, нужно будет вручную пересобрать или переустановить некоторые ноды, установленные вами ранее.

Чтобы пересобрать ноды, воспользуйтесь следующими командами:

cd ~/.node-red
npm rebuild

Чтобы увидеть список уже установленных нод, воспользуйтесь следующими командами:

cd ~/.node-red
npm ls --depth=0
Примечание

Этот скрипт не обновляет ноды, установленные локально. Чтобы сделать это, перейдите в пользовательскую папку и запустите команды ниже. Если вам нужны строго определенные версии некоторых нодов, то это можно сделать с помощью ручного редактирования файла «package.json» (т.е. вам нужно будет указать нужные вам версии), который находится в этой директории. Это нужно делать до запуска команды «npm update».

cd ~/.node-red
npm outdated
npm update

Смена SD-карт

Разные версии Raspberry Pi используют разные процессоры ARM, а бинарные файлы Node.js для ARM6 отличаются от бинарных файлов для ARM7. Впрочем, если вы переставите SD-карту с ARM6 на ARM7 (например, с Pi Zero на Pi 3), то ничего страшного. Но если вы переставите карту обратно, то ничего не выйдет. Вам нужно будет переустановить Node.js и перезапустить обновляющий скрипт, чтобы установить соответствующую версию Node.js.

Запуск Node-RED

Запустить Node-RED можно двумя способами:

  • В интерфейсе ОС кликните на «Menu» > «Programming» > «Node-RED»
  • В новом окне терминала запустите команду «node-red-start»
Примечание

Если закрыть окно (или нажать  Ctrl + C ), то Node-RED все равно продолжит работать, но в фоновом режиме.

Чтобы остановить Node-RED, запустите команду «node-red-stop».

Чтобы посмотреть логи, запустите команду «node-red-log».

Автозапуск при загрузке

Если вам нужно, чтобы Node-RED запускался при загрузке Pi, запустите следующую команду:

sudo systemctl enable nodered.service

Чтобы отключить автозапуск при загрузке, воспользуйтесь следующей командой:

sudo systemctl disable nodered.service

Добавление нод в предустановленную версию Raspbian

Если вы не обновили предустановленную версию Raspbian до последней версии при помощи скрипта выше, то для установки дополнительных нод вам сначала нужно будет установить менеджер пакетов «npm», т.к. его нет в версии Raspbian, устанавливаемой по умолчанию. Но это необязательно, если вы обновились при помощи скрипта выше.

Команды ниже устанавливают «npm» и обновляют его до последней версии:

sudo apt-get install npm
sudo npm install -g npm
hash -r
cd ~/.node-red
npm install node-red-{название-ноды}

Что дальше

Вам нужно будет перезапустить Node-RED. Затем вы можете начать пользоваться редактором.

Примечание

В данный момент разработка Debian/Raspbian Wheezy почти не ведется, поэтому Node-RED их тоже не поддерживает. Эта документация ориентирована как минимум на Jessie.

Доступ к GPIO-контактам

Если вы планируете с помощью Node-RED использовать GPIO-контакты Raspberry Pi, вам нужно проверить, какая у вас установлена версия Python-библиотеки RPi.GPIO.

В комплекте с Node-RED идет RPi-скрипт «nrgpio», предназначенный для взаимодействия с аппаратными GPIO-контактами Raspberry Pi. Если вы установили глобальный npm-модуль, то этот скрипт должен быть расположен либо здесь...

/usr/lib/node_modules/node-red/nodes/core/hardware/nrgpio ver

...либо здесь...

/usr/local/lib/node_modules/node-red/nodes/core/hardware/nrgpio ver

Если у вас Pi2, то версия библиотеки RPi.GPIO должна быть как минимум 0.5.11, а если оригинальная Pi – как минимум 0.5.8. Если это не так, то воспользуйтесь командой ниже, чтобы установить самую последнюю версию библиотеки:

sudo apt-get update && sudo apt-get install python-rpi.gpio

Кроме того, текущий пользователь должен быть членом группы «gpio». Чтобы добавить текущего пользователя в эту группу, воспользуйтесь следующей командой:

sudo adduser $USER gpio

Если вы хотите запускать команды не только как пользователь «pi» или «root», то вам нужно будет либо добавить этого пользователя в список «sudoers», либо просто открыть Python. К примеру, при помощи команды ниже и «visudo» можно добавить в группу «sudoers» пользователя «NodeREDusername»:

NodeREDusername ALL=(ALL) NOPASSWD: /usr/bin/python

Запуск Node-RED

Память Raspberry Pi относительно мала, поэтому Node-RED на этой платформе нужно запускать при помощи команды «node-red-pi». Она позволяет запустить Node-RED вместе с дополнительным аргументом, задающим, с какого момента Node.js начнет освобождать неиспользованную память.

То есть вместе с командой «node-red-pi» нужно указать флаг «--max-old-space-size»:

node-red-pi --max-old-space-size=256

Если вы хотите запустить Node-RED напрямую – при помощи команды «node» – этот флаг нужно поместить между «node» и «red.js»:

node --max-old-space-size=256 red.js

Этот флаг задает размер памяти, который сможет использовать Node-RED до того, как Pi начнет ее очищать. Если на вашей Pi больше ничего не запущено, вы можете задать здесь 256 Мб или даже выше. О количестве доступной памяти можно узнать при помощи команды «free -h».

Примечание

Предустановленная версия Node-RED на Raspbian, использующая команду «node-red-start», тоже по умолчанию выставляет этот показатель на 256 Мб. Если вы хотите поменять его, то вам (через «sudo») нужно отредактировать файл «/lib/systemd/system/nodered.service». О том, как задать эту настройку в установленной вручную версии Node-RED, читайте ниже.

Автозапуск Node-RED при помощи SystemD

Автозапуск Node-RED предпочтительней делать через при помощи встроенного демона systemd. Предустановленная версия делает это при помощи файла «nodered.service», а также при помощи скриптов запуска и остановки. Их можно установить с помощью следующих команд:

sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/nodered.service -O /lib/systemd/system/nodered.service
sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-start -O /usr/bin/node-red-start
sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-stop -O /usr/bin/node-red-stop
sudo chmod +x /usr/bin/node-red-st*
sudo systemctl daemon-reload
Примечание

Эти команды запускаются пользователем «root» («sudo»). Они загружают три файла в корректные места, делают два скрипта исполняемыми, а затем перезагружают демона systemd. После этого Node-RED можно будет запускать и останавливать с помощью команд «node-red-start» и «node-red-stop».

Далее, чтобы настроить автозапуск Node-RED при каждой загрузке или краше, воспользуйтесь:

sudo systemctl enable nodered.service

Отключить автозапуск можно при помощи следующей команды:

sudo systemctl disable nodered.service

Демон systemd использует для логов файл «/var/log/system.log». Для фильтрации данных в этих логах воспользуйтесь следующей командой:

sudo journalctl -f -u nodered -o cat

Установка переменной окружения (systemd) – при помощи не «pi», а другого пользователя

Чтобы выполнить что-то не пользователем «pi», который используется по умолчанию, а другим пользователем, вам нужно при помощи «sudo» отредактировать файл «/lib/systemd/system/nodered.service», указав нужного пользователя вместо {ваш_пользователь}.

...
[Service]
Type=simple
# Запустите, как обычно, от пользователя «pi»,
# но в строчках ниже укажите пользователя,
# с помощью которого вам нужно запустить Node-RED:
User={ваш_пользователь}
Group={ваш_пользователь}
WorkingDirectory=/home/{ваш_пользователь}
Nice=5
Environment="PI_NODE_OPTIONS=--max_old_space_size=256"
...

Сохраните файл, а потом запустите:

sudo systemctl daemon-reload

Установка переменной окружения (systemd) – использование прокси

Если вам для HTTP-запросов необходимо использовать прокси, то вам нужно задать переменную окружения «HTTP_PROXY». При использовании systemd это нужно делать с помощью редактирования (через «sudo») файла «/lib/systemd/system/nodered.service» – добавления еще одной строчки с «Environment=». Например, вот так:

...
Nice=5
Environment="NODE_OPTIONS=--max-old-space-size=128"
Environment="HTTP_PROXY=my-proxy-server-address"
...

Сохраните файл и запустите следующую команду, чтобы перезапустить настройки:

sudo systemctl daemon-reload

Затем остановите и перезапустите Node-RED.

Использование редактора

После запуска Node-RED вам нужно будет ввести в браузер IP-адрес устройства, на котором был запущен Node-RED, а затем нажать на  ↵ Enter . IP-адрес выглядит примерно так:

http://{the-ip-address-returned}:1880/

Один из способов найти IP-адрес Pi – это вот эта команда:

hostname -I
Примечание

Браузером по умолчанию в Raspbian, как правило, является Epiphany. Он немного чудит, поэтому некоторые горячие клавиши редактора Node-RED в нем почему-то не работают. Мы настоятельно рекомендуем установить вместо него Firefox-ESR или Chromium:

sudo apt-get install firefox-esr

В более новых версиях Raspbian по умолчанию стоит Chromium. Он исправно работает, но подтормаживает на Pi1 и Zero.

В принципе, после всех этих настроек вы можете приступить к созданию своего первого потока.

Дополнительные ноды

Как правило, дополнительные ноды можно установить при помощи графического редактора Node-RED, кликнув на кнопку с тремя полосками справа вверху, а затем на «Manage palette». Чтобы установить дополнительные ноды вручную, сначала нужно перейти в пользовательскую директорию. По умолчанию это «~/.node-red».

cd ~/.node-red

В библиотеке потоков Node-RED есть дополнительные ноды, предназначенные для работы с некоторыми устройствами (например, с Pi-модулями Pibrella, PiFace и LEDBorg, светодиодами Neopixel, температурными датчиками и т.д.). Например, ноду «node-red-node-pi-gpiod», позволяющую получить удаленный доступ к GPIO-контактам Pi и управлять сервоприводами, можно установить следующим образом:

cd ~/.node-red
npm install node-red-node-pi-gpiod

После этого вам нужно будет остановить и снова запустить Node-RED, чтобы загрузить новые ноды, а затем обновить страницу редактора Node-RED в браузере:

node-red-stop
node-red-start

Взаимодействие с GPIO-контактами Pi

Есть несколько способов взаимодействия с Raspberry Pi при помощи Node-RED.

  • Ноды «rpi-gpio» (по умолчанию)
    • Их можно найти в меню «Manage palette». Они предназначены для мониторинга и управления GPIO-контактами. Рекомендуем использовать именно этот метод, т.к. он самый простой.
  • Ноды «contrib-gpio» (опционально)
    • Дополнительные универсальные ноды от GitHub-пользователя @monteslu, предоставляющие доступ к GPIO-контактам Pi, BeagleBone, Arduino, Edison и т.д. Установить их можно отсюда.
  • Модуль «wiring-pi» (продвинутый метод)
    • Эта библиотека дает более полный доступ к GPIO-контактам Pi и другим устройствам при помощи нодов «function». Это дает больше контроля над возможностями Pi, которых нет в нодах, но программировать их нужно будет самостоятельно.

Ноды «rpi-gpio»

Для работы с этими нодами используется Python-команда «nrgpio», установленная в Node-RED по умолчанию. Она позволяет управлять GPIO-контактами Pi при помощи нод из «палитры» Node-RED. Но для этого пользователь должен находиться в группе «gpio».

sudo adduser $USER gpio

Управление GPIO-контактом – Поток для мигания светодиодом

В JSON-коде ниже представлен поток, включающий/выключающий светодиод, подключенный к 11-му GPIO-контакту Pi. О том, как собрать цепь для этого проекта, читайте тут.

Скопируйте JSON-код ниже, кликните в редакторе Node-RED на кнопку с тремя полосками (она находится справа вверху), а затем на «Import» > «Clipboard» (или просто нажмите на  Ctrl + I ). Откроется новое окно, вставьте JSON-код в поле посередине этого окна, а затем нажмите на «Import». Теперь разместите поток в рабочей области редактора и кликните левой кнопкой мыши.

[{"id":"ae05f870.3bfc2","type":"function","name":"Toggle 0/1 on input","func":"\ncontext.state = context.state || 0;\n\n(context.state == 0) ? context.state = 1 : context.state = 0;\nmsg.payload = context.state;\n\nreturn msg;","outputs":1,"x":348.1666488647461,"y":146.16667652130127,"wires":[["1b0b73e9.14712c","b90e5005.a7c3b8"]]},{"id":"1b0b73e9.14712c","type":"debug","name":"","active":true,"x":587.1666488647461,"y":206.1666774749756,"wires":[]},{"id":"7aa75c69.fd5894","type":"inject","name":"tick every 1 sec","topic":"","payload":"","repeat":"1","crontab":"","once":false,"x":147.1666488647461,"y":146.1666774749756,"wires":[["ae05f870.3bfc2"]]},{"id":"b90e5005.a7c3b8","type":"rpi-gpio out","name":"","pin":"7","x":585.0000114440918,"y":146.00001049041748,"wires":[]}]

Теперь кликните на красную кнопку «Deploy» (она находится справа вверху) – это запустит поток, а светодиод начнет мигать с периодичностью в одну секунду.

Модуль «wiring-pi»

Этот раздел – только для продвинутых пользователей. В целом большинству пользователей то, что здесь описывается, будет, скорее всего, не нужно.

RPi-версия Node-RED имеет Node.js-обертку для ранее установленной библиотеки WiringPi, что дает всем функциям, написанным вами, постоянный доступ к функциям Raspberry Pi. Благодаря этому вы сможете делать более сложные вещи, но для этого вам нужно будет писать код внутри нод «function», а не только перемещать и подсоединять друг к другу ноды в редакторе Node-RED.

Установка

После установки Node-RED установите библиотеку Wiring-Pi. О том, как это сделать, читайте тут.

Настройка Node-RED

Во-первых, npm-модуль «wiring-pi» должен быть установлен в ту же директорию, где находится файл «settings.js».

cd ~/.node-red
npm install wiring-pi

Это не добавляет в Node-RED никаких нод, но благодаря этому модуль «wiring-pi» теперь можно использовать в нодах «function».

Для этого вам нужно отредактировать файл «settings.js», добавив в секцию «functionGlobalContext» модуль «wiring-pi»:

functionGlobalContext: {
    wpi: require('wiring-pi')
}

Теперь этот модуль доступен всем функциям, написанными в контексте «context.global.wpi».

Поток для мигания светодиодом с помощью Wiring-Pi

В JSON-коде ниже представлен поток, включающий/выключающий светодиод, который подключен к 11-ому (в терминологии Wiring-Pi – 0-ому) GPIO-контакту Raspberry Pi. О том, как собрать цепь для этого проекта, читайте тут.

Скопируйте JSON-код ниже, кликните в редакторе Node-RED на кнопку с тремя полосками (она находится справа вверху), а затем на «Import» > «Clipboard» (или просто нажмите  Ctrl + I ). Откроется новое окно – вставьте в него JSON-код и нажмите на «Import». После этого разместите поток в рабочей области редактора Node-RED и нажмите на левую кнопку мыши.

[{"id":"860e0da9.98757","type":"function","name":"Toggle LED on input","func":"\n// select wpi pin 0 = pin 11 on header (for v2)\nvar pin = 0;\n\n// initialise the wpi to use the global context\nvar wpi = context.global.wpi;\n\n// use the default WiringPi pin number scheme...\nwpi.setup();\n\n// initialise the state of the pin if not already set\n// anything in context.  persists from one call to the function to the next\ncontext.state = context.state || wpi.LOW;\n\n// set the mode to output (just in case)\nwpi.pinMode(pin, wpi.modes.OUTPUT);\n\n// toggle the stored state of the pin\n(context.state == wpi.LOW) ? context.state = wpi.HIGH : context.state = wpi.LOW;\n\n// output the state to the pin\nwpi.digitalWrite(pin, context.state);\n\n// we don't \"need\" to return anything here but may help for debug\nreturn msg;","outputs":1,"x":333.16666412353516,"y":79.16666793823242,"wires":[["574f5131.36d0f8"]]},{"id":"14446ead.5aa501","type":"inject","name":"tick","topic":"","payload":"","repeat":"1","once":false,"x":113.16666412353516,"y":59.16666793823242,"wires":[["860e0da9.98757"]]},{"id":"574f5131.36d0f8","type":"debug","name":"","active":true,"x":553.1666641235352,"y":99.16666793823242,"wires":[]}]

Далее кликните на красную кнопку «Deploy» справа вверху – это должно запустить поток, а светодиод должен начать включаться/выключаться раз в секунду.

См.также

Внешние ссылки