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.