Exemplos de códigos para você executar e enviar para o arduino

Fazer um led piscar:

require 'rubygems'

require 'arduino_firmata'


arduino = ArduinoFirmata.connect "/dev/ttyUSB0"


#ACENDER E DESLIGAR O LED


arduino.pin_mode 2, ArduinoFirmata::OUTPUT

stat = true

loop do

puts stat

arduino.digital_write 10, stat

stat = !stat

sleep 1

end

Explicação do código: Primeiramente, é importado a biblioteca 'rubygems' e 'arduino_firmata'. Após isso, é feito a conexão do arduino através da porta ttyUSB0. Logo em seguida é declarado que o pino 2 do arduino, irá ser um pino de saída. Então, uma variável state é declarada e inicializada para assumir o estado do led(HIGH or LOW). O programa entra no loop que fica trocando o estado do led a cada 1 segundo.

Acender um led pressionando um botão:

require 'rubygems'

require 'arduino_firmata'


arduino = ArduinoFirmata.connect "/dev/ttyUSB0"


#ACENDER E DESLIGAR O LED COM BOTÃO


arduino.pin_mode 7, ArduinoFirmata::INPUT

arduino.pin_mode 2, ArduinoFirmata::OUTPUT

loop do

if arduino.digital_read 7

arduino.digital_write 2, true

else

arduino.digital_write 2, false

end

sleep 0.5

end

Explicação do código: Primeiramente, é importado a biblioteca 'rubygems' e 'arduino_firmata'. Após isso, é feito a conexão do arduino através da porta ttyUSB0. Logo em seguida, é declarado que o pino 7 do arduino irá ser um pino de entrada e o pino 2 irá ser um de saída. Então o programa entra em um loop, onde a condição que testa se o botão foi apertado é verificada. Se ela retornar true, então o pino 2 é setado como true(HIGH), senão, ele fica setado como false(LOW).

Controlar o brilho do led através de um potenciômetro

require 'rubygems'

require 'arduino_firmata'


arduino = ArduinoFirmata.connect "/dev/ttyUSB0"


#LIGAR O LED E AJUSTAR O SEU BRILHO COM O POTENCIÔMETRO


loop do

an = arduino.analog_read 0 #Retorna entre 0 e 1023 (10bist)

puts an

arduino.analog_write 10, an/4 #Ajusta para a escala de 0 a 255 (8bits) do pwm

sleep 0.1

end

Explicação do código: Primeiramente, é importado a biblioteca 'rubygems' e 'arduino_firmata'. Após isso, é feito a conexão do arduino através da porta ttyUSB0. Então o programa entra em um loop, onde uma variável que recebe o valor de acordo com a movimentação do eixo do potenciômetro é printada no terminal a cada 0.1s. No pino 10, onde o led está ligado, é aceso o led com o valor ajustado para uma escala de 8 bits, visto que o valor recebido está em uma escala de 10 bits.

Exemplos de códigos para você executar e enviar para o ESP32

Fazer um led piscar:

#!/usr/bin/env ruby

$:.unshift File.expand_path '../../lib', File.dirname(__FILE__)

require 'rubygems'

require 'arduino_firmata'


arduino = ArduinoFirmata.connect "/dev/ttyUSB0"

puts "firmata version #{arduino.version}"


#ACENDER E DESLIGAR O LED


## regist event

arduino.on :sysex do |command, data|

puts "command : #{command}"

puts "data : #{data.inspect}"

end

## send sysex command

arduino.sysex 0x01, [13, 5, 2] # pin13, blink 5 times, 200 msec interval

arduino.sysex 0x01, [11, 3, 10] # pin11, blink 3 times, 1000 msec interval

loop do

sleep 1

end

Explicação do código: Primeiramente, é importado a biblioteca 'rubygems' e 'arduino_firmata'. Após isso, é feito a conexão do arduino através da porta ttyUSB0. Logo em seguida é printado a versão do firmata. Em seguida, a rotina de listener da sysex é chamada para ficar monitorando e printando os comandos e os valores a ser passado para a sysex do StandardFirmataESP32 via a sysex do ruby. Então, os comandos são passados, definindo o case de tratamento do StandardFirmata para esta rotina sysex, o 0x01. Os comandos passados pelo parâmetro da primeira chamada sysex são o pino (13), quantas vezes vai ser piscado o led (5) e o tempo (2). Na segunda chamada sysex, são passados o pino (11), a quantidade de vezes que o led vai piscar (3) e o tempo (10). Esses parâmetros são tratados na sysexCallBack, no StandardFirmataESP32. Lá, ela recebe os parâmetros no argv em c++ e, dentro da função, ela realiza o tratamento da ação que será realizada com base nesses parâmetros recebidos através do ruby.

Leitura e escrita digital:

#!/usr/bin/env ruby

$:.unshift File.expand_path '../../lib', File.dirname(__FILE__)

require 'rubygems'

require 'arduino_firmata'


arduino = ArduinoFirmata.connect "/dev/ttyUSB0"

puts "firmata version #{arduino.version}"


## regist event


arduino.on :sysex do |command, data|

if command == 0x02

puts "command : #{command}"

puts "data : #{data.inspect}"

end

end

loop

## send sysex command at the digital tratament case 0x02.

arduino.sysex 0x02, [22, 23] #read at pin 22 and write at pin 23

sleep 1

end

Explicação do código: Primeiramente, é importado a biblioteca 'rubygems' e 'arduino_firmata'. Após isso, é feito a conexão do arduino através da porta ttyUSB0. Logo em seguida é printado a versão do firmata. Em seguida, a rotina de listener da sysex é chamada para ficar monitorando e printando os comandos e os valores a ser passado para a sysex do StandardFirmataESP32 via a sysex do ruby. Então, os comandos são passados, definindo o case de tratamento digital do StandardFirmata para esta rotina sysex, o 0x02. Os comandos passados pelo parâmetro da primeira chamada sysex são o pino de leitura (22), o pino de escrita (23). Na função sysex do StandardFirmataESP32, esses pinos são setados e tratados com comandos DIRETO do arduino.

Leitura e escrita analógica:

#!/usr/bin/env ruby

$:.unshift File.expand_path '../../lib', File.dirname(__FILE__)

require 'rubygems'

require 'arduino_firmata'


arduino = ArduinoFirmata.connect "/dev/ttyUSB0"

puts "firmata version #{arduino.version}"


## regist event


arduino.on :sysex do |command, data|

if command == 0x03

puts "command : #{command}"

puts "data : #{data.inspect}"

end

end

loop

## send sysex command at the analog tratament case 0x03.

arduino.sysex 0x03, [32, 33] #read at pin 32 and write at pin 33

sleep 1

end

Explicação do código: Primeiramente, é importado a biblioteca 'rubygems' e 'arduino_firmata'. Após isso, é feito a conexão do arduino através da porta ttyUSB0. Logo em seguida é printado a versão do firmata. Em seguida, a rotina de listener da sysex é chamada para ficar monitorando e printando os comandos e os valores a ser passado para a sysex do StandardFirmataESP32 via a sysex do ruby. Então, os comandos são passados, definindo o case de tratamento analógico do StandardFirmata para esta rotina sysex, o 0x03. Os comandos passados pelo parâmetro da primeira chamada sysex são o pino de leitura (32), o pino de escrita (33). Na função sysex do StandardFirmataESP32, esses pinos são setados e tratados com comandos DIRETO do arduino.

Leitura e escrita analógica em um canal específico:

#!/usr/bin/env ruby

$:.unshift File.expand_path '../../lib', File.dirname(__FILE__)

require 'rubygems'

require 'arduino_firmata'


arduino = ArduinoFirmata.connect "/dev/ttyUSB0"

puts "firmata version #{arduino.version}"


## regist event


arduino.on :sysex do |command, data|

if command == 0x03

puts "command : #{command}"

puts "data : #{data.inspect}"

end

end

loop

## send sysex command at the analog tratament case 0x03.

arduino.sysex 0x03, [32, 33, 1] #read at pin 32, write at pin 33 and set channel 1

sleep 1

end

Explicação do código: Primeiramente, é importado a biblioteca 'rubygems' e 'arduino_firmata'. Após isso, é feito a conexão do arduino através da porta ttyUSB0. Logo em seguida é printado a versão do firmata. Em seguida, a rotina de listener da sysex é chamada para ficar monitorando e printando os comandos e os valores a ser passado para a sysex do StandardFirmataESP32 via a sysex do ruby. Então, os comandos são passados, definindo o case de tratamento analógico do StandardFirmata para esta rotina sysex, o 0x03. Os comandos passados pelo parâmetro da primeira chamada sysex são o pino de leitura (32), o pino de escrita (33) e o canal (1). Na função sysex do StandardFirmataESP32, esses pinos são setados e tratados com comandos DIRETO do arduino.

Gostou desses exemplos?

Se você gostou desses exemplos, com certeza vai gostar de saber o que esse framework é capaz de fazer. Visite o Github de Gustavo Pereira para ter acesso a esses exemplos simples e todo o material de conexão e códigos com o ESP32 e arduino, ou acesse o Github oficial do framework para obter mais exemplos simples com o Arduino.