Node-RED: mudanças entre as edições
Linha 95: | Linha 95: | ||
node-rede -v | node-rede -v | ||
== | ==Node_RED e Arduino com protocolo Firmata== | ||
Referência: <ref>https://nodered.org/docs/faq/interacting-with-arduino</ref>. | Referência: <ref>https://nodered.org/docs/faq/interacting-with-arduino</ref>. |
Edição das 00h04min de 4 de novembro de 2020
Node-RED
O Node-RED é uma ferramenta de programação Low Code, voltada para Internet das Coisas, que permite interligar dispositivos físicos, ambientes de desenvolvimento de software e serviços em nuvem.
Site: knolleary: Words and things by Nick O'Leary
Instalação
Instalação no Ubuntu
Instalando com npm (comando do node.js)[1]
sudo npm install -g --unsafe-perm node-red
Instalação de módulos no node-red
- Menu
Manage palette -> Install -> Search
- Módulos sugeridos para instalação para trabalho com IoT
Arduino -> node-red-node-arduino, node-red-node-serialport Firebase -> node-red-contrib-firebase
Instalação com Docker
Necessita instalação prévia do Docker [2].
docker run -it -p 1880:1880 --name node-red nodered/node-red
- Detalhando o comando [2]:
docker run - run this container... initially building locally if necessary -it - attach a terminal session so we can see what is going on -p 1880:1880 - connect local port 1880 to the exposed internal port 1880 --name node-red - give this machine a friendly local name nodered/node-red - the image to base it one
- Navegar normalmente:
http://{host-ip}:1880
- Para sair do terminal Docker:
Ctrl-p Ctrl-q - the container will keep running in the background.
- Voltar ao terminal:
docker attach node-red
- Parar o contêiner com Node-Red
docker stop node-red
- Reiniciar o contêiner:
docker start node-red
Acesso as portas seriais USB
Referência [3]
O acesso as portas seriais USB é necessário para integração com Arduíno, ou outros dispositivos, via serial usando o módulo node-red-node-serialport.
Por padrão as portas seriais são montadas pelo root, portanto com acesso privilegiado, e são efêmeras, existindo apenas quando o dispositivo está plugado no computador.
Para que outros usuários, e no caso o Docker, possam acessar as portas devemos incluir uma regra para acesso ao udev, criando um arquivo no diretório:
/etc/udev/rules.d/99-serial.rules
e adicionar as linhas:
KERNEL=="ttyUSB[0-9]*",MODE="0666" KERNEL=="ttyACM[0-9]*",MODE="0666"
Para que o Docker possa acessar os dispositivos conectados a serial, devemos montar todo o diretório /dev quando rodarmos o Docker, usando o parâmetro
-v /dev:/dev
e atribuir permissão para acesso com
--privileged
O comando completo para rodar o Docker é:
docker run -it -p 1880:1880 -v /dev:/dev --privileged --name node-red nodered/node-red
- Dispositivo permanentemente conectado
- Caso o dispositivo fique permanentemente conectado pode-se explicitar a porta serial usada pelo dispositivo. Por exemplo, o Arduíno UNO usa a porta /dev/ttyACM0:
docker run -it -p 1880:1880 --device=/dev/ttyACM0:/dev/ttyACM0 --user=root --name node-red nodered/node-red
- ou, para outro dispositivo, deve-se verificar a porta utilizada, por exemplo:
docker run -it -p 1880:1880 --device=/dev/ttyUSB0:/dev/ttyUSB0 --user=root --name node-red nodered/node-red
Instalação na AWS Amazon EC2 com Ubuntu
Procedimentos [4]:
- Criar conta na Amazom AWS.
- Logar no console AWS EC2
- Lançar uma instância
- Escolher uma máquina Ubuntu Server
- Selecionar o tipo de instância: t2.micro
- Na aba 'Configure Security Group', adicionar nova regra ‘Custom TCP Rule’ para acesso pela porta 1880
- Lançar a máquina.
- O console solicitará as chaves SSH. Deve-se criar um novo par de chaves, a qual deve ser baixada e salva com nome próprio e extensão .pem.
- Conectar-se a máquina usando SSH com o nome público DNS fornecido e a opção -i com a chave. Exemplo:
ssh -i ~/AWS-key.pem ubuntu@ec2-3-128-18-159.us-east-2.compute.amazonaws.com
- No exemplo o IP público da máquina é: 3.128.18.159 .
- Instalação no Node-RED
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - sudo apt-get install -y nodejs build-essential sudo npm install -g --unsafe-perm node-red
Rodar Node-RED:
node-rede -v
Node_RED e Arduino com protocolo Firmata
Referência: [5].
Para interação com Arduíno o módulo correspondente deve ser instalado no Node-RED:
node-red-node-arduino
O Node-RED se comunica com o Arduíno através da serial USB utilizando o protocolo Firmata. Para tal a biblioteca Firmata deve ser instalada no Arduíno e deve ser carregado o sketch StandardFirmata.
- Capacidades
- O Arduíno suporta os seguintes modos de operação:
- Entradas e saídas digitais: Valores 0 ou 1
- Entradas analógicas: Valores 0 a 1023
- Saídas PWM (analógicas): Valores 0 a 255
- Saídas servo: 0 a 180
No Node-RED os nós arduino in e arduino out permitem interação com um Arduíno conectado a serial e rodando o sketch StandardFirmata.
- arduino in
- Permite selecionar entradas digitais ou analógicas. Os valores são lidos em msg.payload e o número do pino como msg.topic.
- Quando uma entrada do Arduíno é modificada o Node-RED é imediatamente notificado.
- Este processo funciona bem para as entradas digitais.
- Para as entradas analógicas podem ser obtidos muitos valores, os quais devem ser manuseados. Por exemplo, pode-se usar um atraso para ajustar um tempo de amostragem e descartar valores intermediários. Outra opção é utilizar um nó rbe (Report by Exception node) e configurar para reportar mudanças somente a partir de um dado montante de variação.
- arduino out
- Permite selecionar saídas digitais, analógicas (PWM) ou tipo servo. Espera valores numéricos inteiros em msg.payload para transferir ao Arduíno.
- Programação em blocos no Node-RED
Interação do Node_RED e Arduino com comunicação serial
Para interação com Arduíno o módulo correspondente deve ser instalado no Node-RED:
node-red-node-serialport
Como exemplo foi utilizado um Arduino UNO ao qual foram acoplados um led para controle e um sensor de temperatura DHT22. A comunicação entre o Arduíno e o Node-RED é realizada via comunicação serial, com o Arduíno enviando periodicamente os dados de temperatura e umidade e esperando comandos para o led.
- Código fonte Arduino
- O código Arduino abaixo descreve o cenário da aplicação .
/*
Comunicação com Arduino via serial com NodeRED
Transmite: Medida de temperatura e umidade (DHT22)
Rebebe: Comandos para acionamento de led
*/
#include "DHT.h"
#define DHTPIN 2 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
const int ledPin = 13; // the pin that the LED is attached to
int incomingByte; // a variable to read incoming serial data into
unsigned long lastMsg;
void setup() {
Serial.begin(57600);
pinMode(ledPin, OUTPUT);
dht.begin();
}
void loop() {
//Verifica se há dados chegando na porta serial para controle do led
if (Serial.available() > 0) {
incomingByte = Serial.read();
if (incomingByte == 'H') {
digitalWrite(ledPin, HIGH);
}
if (incomingByte == 'L') {
digitalWrite(ledPin, LOW);
}
}
//A cada 2s realiza leitura do sensor DHT22 e imprime dados na serial
unsigned long now = millis();
if (now - lastMsg > 2000) {
lastMsg = now;
//Lê sensor DHT22
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
//Dados de umidade e temperatura são impressos separados por ","
Serial.print(h);
Serial.print(F(","));
Serial.print(t);
}
}
- Programação em blocos no Node-RED
Os dados de umidade e temperatura recebidos pela entrada serial são separados na forma de vetor pelo nó split, convertidos para números pelo nó to number e separados em duas saídas pelo nó switch.
Os comandos para acionamento do led enviam pela serial os caracteres H ou L.
Interação do Node_RED e Arduino via brocker Moquitto
Veja exemplo descrito em Experimento: MQTT e Arduino
- Programação em blocos no Node-RED
Interação do Node_RED e ESP8266 via brocker Moquitto
Veja exemplo descrito em Experimento: MQTT e ESP8266
- Programação em blocos no Node-RED
Interação do Node-RED e Raspberry Pi
Com um Raspberry Pi rodando o Node-RED e fácil de interagir com sensores e atuadores conectados as portas GPIO através da Web.
Este laboratório foi inspirado no post [6], que mostra coletar dados de umidade e temperatura através do sensor DHT11 conectados a um Raspberry Pi através do Node-RED.
- Instalação do Node-RED
- Pode ser instalado diretamente pela interface gráfica do Raspberry Pi no caminho:
Preferências/Recommended Software/Programming/Node-RED
- ou via terminal de comandos, como sugerido em [7]
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
- este comando instala o Node.js, npm e Node-RED no Raspberry Pi e também pode ser usado para realizar a atualização de uma instalação existente.
- Inicialização do Node-RED
- O Node-RED é iniciado no Raspberry Pi diretamente pelo terminal com o comando:
node-red-start
- e pode ser parado com CTRL-C.
- Acesso via Web do Node-RED
- Através de um navegador pode-se acessar diretamente o Node-RED rodando no Raspberry Pi através da URL:
<Endereço IP>:1880
Acionamento de led
- Hardware
- Para acionamento de um led, ou outro dispositivo comandado por saída digital, conectar o dispositivo na porta GPIO escolhida, utilizando um resistor limitador de corrente no caso do led.
- Node-RED
- Utilizar blocos inject para enviar os comandos ao led, um configurado para enviar o comando numérico 0 e o outro 1, pois as saídas digitais aceitam somente comandos numéricos 0 e 1.
- Conectar ambos os blocos inject em um bloco rpi gpio out e configurar com a porta na qual o led for conectado.
Sensor de temperatura e umidade DHT22
- Hardware
- Conectar os pinos do sensor DHT22 ao Raspberry Pi conforme a figura. Conectar um resistor de 10 KΩ entre a saída de dados do sensor e a alimentação 5 V (resistor pull up).
________ | | | DHT 22 | |________| | | | | (5 V) ----+ | +---- (terra) +---(gpio)
- Node-RED
- Instalar blocos para interação com sensor DHT22:
Manage Palette/Install/node-red-contrib-dht-sensor
- Utilizar um bloco inject configurado para enviar timestamp em intervalos de 15 segundos ao sensor.
- Conectar a saída do bloco inject a um bloco rpi dht22 e configurar com a porta na qual o sensor for conectado.
- Conectar a saída do bloco rpi dht22 a um bloco debug para acompanhar as informações enviadas pelo sensor.
Programação em blocos no Node-RED
Interação do Node_RED e Firebase
Permite a interação do Node-RED com a plataforma de computação em nuvem Firebase mantida pela Google. Para tal o módulo correspondente deve ser instalado no Node-RED:
node-red-contrib-firebase
Dados manuseados pelo Node-RED podem ser salvos no Firebase Realtime database, o qual implementa um banco de dados NoSQL que fornece as aplicações clientes atualizações em tempo real (“realtime” updates) quando os dados mudam na base de dados. As operações básicas no banco de dados são:
- set() - Salva dado em uma referência específica, substituindo o valor anterior.
- push() - Adiciona dado em uma lista de valores.
- once() - Lê dado de uma referência e acompanha qualquer mudança no mesmo.
O nó firebase modify permite modificar ou adicionar dados no banco de dados do Firebase.
- Exemplos de uso
- Interação do Node_RED e ESP8266 via brocker Moquitto
- Interação do Node_RED e Arduino via brocker Moquitto
- Interação do Node-RED e Raspberry Pi
Referências
- ↑ https://nodered.org/docs/getting-started/local
- ↑ 2,0 2,1 https://nodered.org/docs/getting-started/docker
- ↑ https://www.losant.com/blog/how-to-access-serial-devices-in-docker
- ↑ https://nodered.org/docs/getting-started/aws#running-on-elastic-beanstalk-with-high-availabilty
- ↑ https://nodered.org/docs/faq/interacting-with-arduino
- ↑ https://www.filipeflop.com/blog/sensor-dht11-com-node-red-e-raspberry-pi/
- ↑ https://nodered.org/docs/getting-started/raspberrypi
Evandro.cantu (discussão) 13h47min de 1 de junho de 2020 (-03)