Existe uma maneira de conectar-se a um terminal serial como você faria com o SSH? Deve haver uma maneira mais simples do que ferramentas como Minicom, como esta
$ serial /dev/ttyS0
Eu sei que consigo cat
a saída, /dev/ttyS0
mas apenas uma maneira de comunicação é possível dessa maneira, da porta para o console. E echo
sair para o porto é o mesmo, mas o contrário, para o porto.
Como posso realizar a comunicação bidirecional com uma porta serial da maneira mais simples possível no Unix / Linux?
command-line
terminal
tty
serial-port
serial-console
ihatetoregister
fonte
fonte
Respostas:
Acho
screen
o programa mais útil para comunicação serial, já que eu o uso para outras coisas. Geralmente é apenasscreen /dev/ttyS0 <speed>
, embora as configurações padrão possam ser diferentes para o seu dispositivo. Também permite canalizar qualquer coisa para a sessão, entrando no modo de comando e executandoexec !! <run some program that generates output>
.fonte
screen
é incrível, mas não acho que seja mais simples do queminicom
:-)fundo
A principal razão pela qual você precisa de algum programa como
minicom
se comunicar através de uma porta serial é que a porta precisa ser configurada antes de iniciar uma conexão. Se não foram configurados adequadamente, os comandoscat
eecho
não farão por você o que você poderia esperar. Observe que quando você executa um programa como ominicom
, a porta fica com as configuraçõesminicom
usadas. Você pode consultar as configurações de comunicação usando ostty
programa como este:Se você fez certo; depois de inicializar o computador e antes de executar qualquer outro programa, como
minicom,
as configurações de comunicação, elas estarão nas configurações padrão. Provavelmente, são diferentes do que você precisará para fazer sua conexão. Nessa situação, o envio dos comandoscat
ouecho
para a porta produzirá lixo ou não funcionará.Execute
stty
novamente após o usominicom
e você notará que as configurações estão definidas para o que o programa estava usando.Comunicação serial mínima
Basicamente, são necessárias duas coisas para se ter uma comunicação bidirecional por meio de uma porta serial: 1) configurar a porta serial e 2) abrir a pseudo-tty leitura / gravação.
O programa mais básico que eu sei que faz isso é
picocom
. Você também pode usar uma ferramenta comosetserial
configurar a porta e interagir com ela diretamente a partir do shell.fonte
picocom
também permitirá que você se conecte a uma porta serial sem reconfigurá-la (--noinit
) e permitirá que você saia sem restaurar a configuração da porta serial (--noreset
ou useCtrl-A
/Ctrl-Q
para sairpicocom
). Eu acheipicocom
muito mais fácil de usar do queminicom
. Por razões que ainda não descobri, o minicom simplesmente não envia nem recebe dados em uma porta que funcionou momentos antes ou com a qual a picocom não tem problemas. Provavelmente é alguma opção de configuração misteriosa, mas, seja o que for, não consigo descobrir (e esse comportamento aconteceu em mais de uma máquina).--omap crcrlf --echo
opçõesSe o UUCP estiver instalado no sistema, você pode usar o comando cu , por exemplo
fonte
~^D
ou~.
para sair.Eu encontrei uma maneira de usar um script de shell aqui que coloca
cat
como um processo em segundo plano e um loop while que lê a entrada do usuário eecho
a envia para a porta. Eu o modifiquei para ser mais geral e se encaixou perfeitamente no meu propósito.fonte
$?
expande para o código de saída do último comando que não é de segundo plano (nesse casostty -F $1 $2
); portanto, expande para 0 quando não houve erro. Assim, torna-se a última linhakill 0
que, por sua vez, parece matar a concha atual e todos os seus filhos (ela se comporta de maneira diferente em conchas interativas, acredito). Para todos os detalhes, consulte a seguinte explicação: unix.stackexchange.com/questions/67532/…while
loop de maneira limpa. Se você matá-lo com Ctrl + C ou com okill
comando, ocat
processo permanece ativo. Para corrigir isso, você precisaria usar otrap
comando para executarkill $bgPid
quando o shell sair, como meu script abaixo . Honestamente, eu nem me importaria se você tivesse adicionado todo o meu script à sua postagem. Eu tentei fazer isso, mas a edição foi rejeitada.Tente http://tio.github.io
"tio" é um aplicativo de terminal TTY simples, que possui uma interface direta de linha de comando para conectar-se facilmente a dispositivos TTY para entrada / saída básica.
O uso típico é sem opções. Por exemplo:
Que corresponde às opções mais usadas:
Ele vem com suporte completo para preenchimento automático de shell para todas as opções.
fonte
msys2
no Windows e você pode instalartio
compacman -S tio
porque é entre os pacotes disponíveis por padrão.screen
,picocom
etc. não são. Obrigado!Esse script é baseado em outra resposta , mas envia tudo pela porta serial (exceto Ctrl + Q), não apenas comandos únicos seguidos por Enter. Isso permite que você use Ctrl + C ou Ctrl + Z no host remoto e use programas interativos de "GUI", como aptitude ou alsamixer. Para sair, pressione Ctrl + Q.
fonte
BTW, o pacote putty (que é executado no Linux) inclui suporte serial.
fonte
Outro problema que pode ocorrer é que sua conta de usuário pode precisar ser configurada para o grupo "discagem" para acessar a porta serial.
fonte
O Putty funciona bem no Linux e oferece alguma comodidade, especialmente para comunicações seriais. Ele tem uma desvantagem que não consegui resolver diretamente: nenhuma cópia-pasta da própria janela do Putty. A versão do Windows possui uma adorável cópia automática para a área de transferência em destaque, clique com o botão direito do mouse para colar o comportamento (e existem excelentes plugins para o chrome e o firefox para permitir o mesmo comportamento), mas no Linux, nenhuma cópia ama o AFAIK.
Se a falta de cópia for um problema (é para mim), ative o logon no putty e abra uma janela de terminal padrão
# tail -f putty.log
e o texto bidirecional estará disponível para a ação padrão do copypasta.fonte
Como mencionado antes, você pode tentar picocom. A versão mais recente (2.0) também pode ser usada (com segurança) para configurar um "servidor de terminal", já que não permite mais a injeção de comandos do shell. Vejo:
https://github.com/npat-efault/picocom/releases
fonte
Depende do que você quer fazer. Deseja executar um shell ou aplicativo interativamente a partir do terminal, conectar-se a outro computador através da linha serial, automatizar a comunicação com um dispositivo através de uma porta serial?
Se você deseja comunicação bidirecional, presumo que deseja algo interativo com um ser humano no terminal. Você pode configurar o sistema para permitir logins de um terminal através de uma porta serial configurando uma sessão getty (1) na porta serial - getty é a ferramenta para configurar um terminal e permitir logins nele. Coloque uma entrada no seu arquivo inittab (5) para executá-lo na porta serial apropriada
respawn
.Se você deseja se conectar a um dispositivo e iniciar conversas bidirecionais automatizadas, poderá ver se o esperado obterá o que deseja. Use stty (1) para configurar a porta com a paridade correta, taxa de transmissão e outras configurações relevantes.
Se você deseja se comunicar interativamente com outro computador pela porta serial, precisará de um software de emulação de terminal. Isso faz bastante - ele configura a porta, interpreta o ANSI ou outras seqüências de comando do terminal (o ANSI estava longe de ser o único padrão suportado pelos terminais seriais). Muitos emuladores de terminal também suportam protocolos de transferência de arquivos, como kermit ou zmodem.
Os meandros das comunicações seriais e da E / S do terminal são bastante complexos; você pode ler mais do que você sempre quis saber sobre o assunto no tutorial em série.
fonte
Você pode querer dar uma olhada
http://serialconsole.sourceforge.net
Pro: não tem problemas de segurança óbvias, como o minicom ou picocom (se você não tem um problema dando aos usuários desembolsar acesso, não há problema, mas você provavelmente fazer ter um se você quiser configurar um servidor de terminal ... )
fonte
Você precisa ter as permissões de gravação e leitura corretas no dispositivo. Você pode vê-lo com:
Eu confio no script que você encontrou e fez algumas modificações.
Para os sistemas de desenvolvimento que eu usei até agora, eles precisavam:
Esses valores são os padrão no script.
Portanto, para conectar-se, você pode usá-lo da seguinte maneira:
Exemplo:
Roteiro:
PS: Você precisa saber que tipo de alimentação de linha está usando o sistema receptor, pois isso determinará como você precisará enviar os comandos no meu caso. Eu precisava de um Windows como LF, significa que preciso enviar
Valores ASCII para:
fonte
#!/bin/sh
é ignorado se não for a primeira linha do arquivo. (2) Sério? Você está usando1
para especificar paridade par e2
especificar ímpar ? (3) É convencional ter uma mensagem de "uso" ou "ajuda" que documenta todos os parâmetros, não apenas os obrigatórios. (4) Você deve sempre citar suas referências de variáveis do shell (por exemplo,"$1"
,"$2"
,"$3"
,"$4"
,"$stopb"
,"$par"
,"$bgPid"
, e até mesmo"$?"
e"$!"
) a menos que você tenha uma boa razão para não, e você tem certeza de que sabe o que está fazendo.Como ainda não foi mencionado aqui, eu também mencionaria
socat
- mais informações em https://stackoverflow.com/questions/2899180/how-can-i-use-com-and-usb-ports-within-cygwin :ou
(no entanto, tive o problema de interrompê-lo quando ele começar a ser executado, no MSYS2 no Windows)
fonte
Eu me pergunto por que ninguém mencionou ser2net .
Exemplo
/etc/ser2net.conf
:Você pode conectar à porta serial tão fácil quanto:
Ou remotamente:
Ou até mesmo configurar o encaminhamento de porta no seu roteador e expô-lo à Internet, para que você possa se conectar a ele de qualquer lugar (vamos pular questões de segurança, estou falando de flexibilidade).
fonte
Outra opção fácil é acessar a máquina pelo ssh com a
-X
flag e executar um programa como putty ou gtkterm.Assim:
Ele deve iniciar a interface gráfica no PC do cliente e a partir daí você pode acessar a porta serial como se estivesse no host.
Disclaimer: Só tentei isso com máquinas ubuntu. Estou supondo que não funcionará com máquinas sem interfaces gráficas.
No manual ssh:
Portanto, use
-Y
se a segurança for um problema.fonte