Skip to content

Instantly share code, notes, and snippets.

@cpfarher
Created December 13, 2017 18:33
Show Gist options
  • Select an option

  • Save cpfarher/cf8e84a447960ee346a3d6351c0225fa to your computer and use it in GitHub Desktop.

Select an option

Save cpfarher/cf8e84a447960ee346a3d6351c0225fa to your computer and use it in GitHub Desktop.
Conexión a puerto serial con ruby serialport gem y simulación de puerto en linux
===================== Documentación ================================
Gema serialport: http://www.rubydoc.info/gems/serialport/SerialPort
IO: http://www.rubydoc.info/stdlib/core/IO
===================== Documentación ================================
1- Simulación puerto serial en linux:
sudo apt-get install socat
#en una consola:
socat -d -d pty,raw,mode=777 pty,raw,mode=777
2017/12/13 14:19:54 socat[3641] N PTY is /dev/pts/**21**
2017/12/13 14:19:54 socat[3641] N PTY is /dev/pts/**22**
2017/12/13 14:19:54 socat[3641] N starting data transfer loop with FDs [5,5] and [7,7]
los parámetros indican:
-d son para que el output sea verbose (puede ser un -d solo o hasta cuatro, depende el grado de "verbosidad")
-v -x, para que muestre la version y la cantidad de datos transferidos.
-PTY, es porque vamos a crear una Pseudo Terminal
-link Sirve para linkear el objeto que estamos creando a un archivo que ya existe.
- el mode=777 para acceder al puerto sin ser root
- echo=0 para no tener echo local
#en otra consola: # el 21 debe coinicidir con el numero marcado en ** ** arriba
cat < /dev/pts/21
#en otra consola: prueba escribiendo desde bash
echo "Test438+" > /dev/pts/25
===================== Script ejemplo para lectura/escritura con ruby ================================
require 'rubygems'
require 'serialport'
sp = SerialPort.new "/dev/pts/25"
sp.write "AT\r"
sp.write "Escribiendo al puerto pts 21"
puts "Baud: #{sp.baud}"
puts "Data Bits: #{sp.data_bits}"
puts sp.read 10
#while true do
# puts sp.getc
#end
sp.close
@cpfarher
Copy link
Copy Markdown
Author

Algunos parámetros que se ejecutan en el socat no están pasados. Simplemente los puse a modo de resumen para no tener que leer toda la doc.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment