
Sou novo no Linux e estou fazendo um projeto de Bluetooth de baixa energia usando o Intel Edison. O Edison tem um Yocto 1.6.1. Usei Bluz e gatttool para conectar meu sensor BLE. Mas preciso digitar o mesmo comando sempre que quiser uma conexão. Então, quero escrever um script de shell e deixá-lo rodar automaticamente quando eu inicializar a placa.
Na janela do terminal, eu insiro este comando:
rfkill unblock bluetooth
hciconfig hci0
export PATH=$PATH:~/bluez-5.24/attrib/
gatttool -b D2:AD:9F:B7:BB:60 -I -t random
Ele pula para [D2:AD:9F:B7:BB:60][LE]> e digito "connect"
[D2:AD:9F:B7:BB:60][LE]> connect
Attempting to connect to D2:AD:9F:B7:BB:60
Connection successful
[D2:AD:9F:B7:BB:60][LE]> char-write-req 0x000e 0100
Quando escrevo shell script, como posso lidar com "[D2:AD:9F:B7:BB:60][LE]>" no meu script? Não consigo colocar "conectar" diretamente. Não vai funcionar.
#!/bin/sh
rfkill unblock bluetooth
hciconfig hci0
export PATH=$PATH:~/bluez-5.24/attrib/
gatttool -b D2:AD:9F:B7:BB:60 -I -t random
conncet
char-write-req 0x000e 0100
Responder1
A expect
ferramenta deve fazer o que você deseja.
Ele vem com autoexpect
o qual produzirá um script esperado "assistindo" a uma sessão interativa sua. Execute autoexpect
e faça tudo o que faria em seu shell normal e, ao sair do shell, você obterá um arquivo script.exp
que poderá usar como base.