BashによるGPIOボードの読み書き

BashによるGPIOボードの読み書き

GPIOボードを操作するには、スクリプトからアクセスする必要があります。私が使用する方法は次のとおりです。

stty -F /dev/ttyACM1 115200 raw -echo   #CONFIGURE SERIAL PORT
exec 3</dev/ttyACM1                     #REDIRECT SERIAL OUTPUT TO FD 3
cat <&3 > /tmp/ttyDump.dat &            #REDIRECT SERIAL OUTPUT TO FILE
PID=$!                                  #SAVE PID TO KILL CAT
echo "gpio readall" > /dev/ttyACM1      #SEND COMMAND STRING TO SERIAL PORT
sleep 5s                                #WAIT FOR RESPONSE
kill $PID                               #KILL CAT PROCESS
exec 3<&-                               #FREE FD 3
cat /tmp/ttyDump.dat                    #DUMP CAPTURED DATA

ボードが動作しています。画面からアクセスし、同じコマンドを入力して結果を得ることができ、それが壊れたスクリプトであることがわかります。私は何が間違っていましたか?

注 - このスクリプトはstackexchangeの他の場所からコピーされました。

ベストアンサー1

私の問題を発見しました。まず、私のtty共通設定が間違っています。第二に、私がコマンドを送った方法は、GPIOボードが何をすべきかわかりませんでした。これは働きます:

stty -F /dev/ttyACM1 -cstopb -crtscts cs8 9600 #CONFIGURE SERIAL PORT
exec 3</dev/ttyACM1                            #REDIRECT SERIAL OUTPUT TO FD 3
cat <&3 > /tmp/ttyDump.dat &                   #REDIRECT SERIAL OUTPUT TO FILE
PID=$!                                         #SAVE PID TO KILL CAT
#  echo "Process ID is $PID"
printf "gpio read 0\r" > /dev/ttyACM1          #SEND COMMAND STRING TO SERIAL PORT
sleep .2s                                      #WAIT FOR RESPONSE
kill $PID                                      #KILL CAT PROCESS
exec 3<&-                                      #FREE FD 3
cat /tmp/ttyDump.dat                           #DUMP CAPTURED DATA

おすすめ記事