Fixar nome de dispositivo e script de aquisição de dados

O udev é um gerenciador dinâmico de dispositivos, cujos nós estão presentes no diretório “/dev”. Quando o computador inicia, o udev pode direcionar o dispositivo para algo do tipo “/dev/ttyUSB”. No entanto, o sistema pode referenciar com outro código e pode haver a necessidade de atualizar scripts de leitura dessa porta. Nesse caso, deve-se verificar o novo código através do comando “dmesg | grep tty” e realizar a alteração no código.

Para fixar um número (ou um novo nome qualquer, personalizado), entre no diretório “/etc/udev/rules.d/” e edite (ou crie um novo) arquivo “99-usb-serial.rules”, que possui uma (ou mais) linha(s) com regras “persistent” para cada dispositivo USB.

A nova linha deve conter o parâmetro SYMLINK=”ttyUSB1″ (por exemplo) para fazer a ligação com o dispositivo e a sua indicação. As outras informações podem ser obtidas por algum dos seguintes comandos:

1ª opção: dmesg | grep tty

A saída para dois dispositivos em duas entradas USB ficaria assim:

Dá pra saber o “tty” e o nome de cada dispositivo.

2ª opção: lsusb

A saída para o mesmo caso de cima, tem vários itens, mas pelo nome de cada um, é possível selecionar as linhas que interessam:

Os caracteres antes do dois pontos (067b, por exemplo) é o “idVendor” e o depois (2303) é o “idProduct”. Com eles, já é possível identificar o dispositivo.

3ª opção: udevadm info –name=/dev/ttyUSB1 –attribute-walk ou lsusb -v | more

Mostra todos os atributos de uma lista de dispositivos USB – caso precise do serial number (iSerial), ele será listado aí se o possuir.

Por fim, a linha (desse exemplo) a constar do arquivo é a seguinte:

Obs.: SYSFS{}= foi removido do udev, sendo utilizado atualmente ATTR{}= (para combinar com o dispositivo de evento) ou ATTRS{}= (para combinar com um dispositivo pai).

Para carregar as novas regras e testá-las, use os seguintes comandos respectivamente:

Script em python

Segue script para ler e gravar dados recebidos através da conexão “ttyUSB1”, a ser executado como “sudo” – o loop “while 1” é usado para ficar infinitamente realizando a leitura:

Veja mais sobre interface serial como configurar a aquisição de dados usando o minicom (para testes) clicando no link.

Fontes