Node-RED Laboratorios: Firmata, Serial e Ethernet

De Wiki Cursos IFPR Foz
Revisão de 19h05min de 23 de novembro de 2021 por Root (discussão | contribs)
Ir para navegaçãoIr para pesquisar

Node-RED: Laboratórios com comunicação Firmata, Serial e Ethernet

Node-RED e Arduino com protocolo Firmata

Referência: [1].

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

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.
Código para DHT22 adaptado do exemplo [2].
/*         
 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)) { //isnan (is not a number) retorna 1 se não for um número
      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.

Referências

Referências



Root (discussão) 16h05min de 23 de novembro de 2021 (-03)