
Ich bin neu bei Linux und arbeite an einem Bluetooth Low Energy-Projekt mit dem Intel Edison. Auf dem Edison läuft Yocto 1.6.1. Ich habe Bluz und gatttool verwendet, um meinen BLE-Sensor anzuschließen. Aber ich muss jedes Mal, wenn ich eine Verbindung herstellen möchte, denselben Befehl eingeben. Deshalb möchte ich ein Shell-Skript schreiben und es automatisch ausführen lassen, wenn ich die Platine hochfahre.
Im Terminalfenster gebe ich diesen Befehl ein:
rfkill unblock bluetooth
hciconfig hci0
export PATH=$PATH:~/bluez-5.24/attrib/
gatttool -b D2:AD:9F:B7:BB:60 -I -t random
Dann springt es zu [D2:AD:9F:B7:BB:60][LE]> und dann gebe ich "connect" ein.
[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
Wie kann ich "[D2:AD:9F:B7:BB:60][LE]>" in meinem Shell-Skript verarbeiten? Ich kann "connect" nicht direkt eingeben. Das funktioniert nicht.
#!/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
Antwort1
Das expect
Tool sollte tun, was Sie wollen.
Es wird mitgeliefert autoexpect
, das ein Expect-Skript erzeugt, indem es eine Ihrer interaktiven Sitzungen „beobachtet“. Führen Sie es aus autoexpect
, führen Sie dann alles aus, was Sie in Ihrer normalen Shell tun würden, und beim Beenden der Shell erhalten Sie eine Datei, script.exp
die Sie dann als Grundlage verwenden können.