serial - escribiendo en el puerto serie desde la línea de comandos de Linux
ver dispositivos serial linux (3)
Si desea usar códigos hexadecimales, debe agregar -e
opción para habilitar la interpretación de escapes de barra invertida por eco (pero el resultado es el mismo que con echo
Ctrl R Ctrl B ). Y como dijo wallyk, es probable que desee agregar -n
para evitar el resultado de una nueva línea:
echo -en ''/x12/x02'' > /dev/ttyS0
También asegúrese de que /dev/ttyS0
sea el puerto que desee.
Desde Windows, puedo comunicarme con un dispositivo de puerto serie usando los siguientes comandos:
mode com1: baud=9600 data=8 parity=n stop=1
copy con com1
alt+18alt+2ctrl+z
El dispositivo inicia la operación solicitada.
Cuando trato de realizar la misma operación desde un buzón de debian autónomo o desde una instancia de Debian virtualbox de la misma máquina de Windows, hasta ahora no he tenido suerte.
Aquí hay comandos de Linux equivalentes (al menos eso creo)
stty -F /dev/ttyS0 speed 9600 cs8 -cstopb -parenb
echo ''/x12/x02'' > /dev/ttyS0
No pasa nada.
¿Puede alguien por favor dirigirme en la dirección correcta?
PANTALLA:
NOTA : por lo que yo sé, la pantalla en realidad no puede enviar hexadecimal. Para hacer eso, usa echo
o printf
Estaba usando las sugerencias en esta publicación para escribir en un puerto serie, y luego usar la información de otra post para leer desde el puerto, con resultados mixtos. Descubrí que usar la pantalla es una solución "más fácil", ya que abre una sesión de terminal directamente con ese puerto. (Pongo más fácil entre comillas, porque la pantalla tiene una interfaz realmente extraña, IMO, y necesita más lecturas para resolverlo).
Puede emitir este comando para abrir una sesión de pantalla, y todo lo que escriba se enviará al puerto, más los valores de retorno se imprimirán debajo de él:
screen /dev/ttyS0 19200,cs8
(Cambie lo anterior para que se adapte a sus necesidades de velocidad, paridad, bits de parada, etc.). Me doy cuenta de que la pantalla no es la "línea de comando de Linux" como lo pide específicamente la publicación, pero creo que tiene el mismo espíritu. Además, no tiene que escribir eco y comillas todo el tiempo.
ECO:
Sigue la respuesta del droide pretoriano. SIN EMBARGO, esto no funcionó para mí hasta que también usé el comando cat < /dev/ttyS0
( cat < /dev/ttyS0
) mientras estaba enviando el comando echo.
PRINTF:
Descubrí que también se puede usar el comando ''% x'' de printf:
c="/x"$(printf ''%x'' 0x12)
printf $c >> $SERIAL_COMM_PORT
De nuevo, para printf, inicie cat < /dev/ttyS0
antes de enviar el comando.
echo ''/x12/x02''
no se interpretará, y literalmente escribirá la cadena /x12/x02
(y anexará una nueva línea) al puerto serie especificado. En su lugar use
echo -n ^R^B
que puedes construir en la línea de comando al presionar Ctrl V Ctrl R y Ctrl V Ctrl B. O es más fácil usar un editor para escribir en un archivo de script.
El comando stty
debería funcionar, a menos que otro programa esté interfiriendo. Un culpable común es gpsd
que busca dispositivos GPS enchufados.