中間コンピュータを介してSSH経由でリモートArduinoにどのようにアクセス/プログラミングしますか?

中間コンピュータを介してSSH経由でリモートArduinoにどのようにアクセス/プログラミングしますか?

ノートパソコンにArduino IDEがインストールされており、同じネットワーク上のリモートコンピュータに接続されているリモートArduino(Uno)をプログラムしたいと思います。たとえば、Raspberry Pi(Arduino UnoはUSBケーブルを使用して接続されています)がワイヤレスネットワークに接続されています。これを行うには何を設定する必要がありますか?

注:私はArduinoをSSHクライアントとして使用しようとしていません。私がやりたいことは、ラップトップのArduino IDEとRaspberry PIの間にある種のトンネル(好ましくはSSH)を設定することです。 ArduinoボードはUSBケーブルを介してRaspberry PIに接続されています。

理想的には、ボタンを押すと、ローカルにコンパイルされたUploadファームウェアがトンネルを介してリモートArduinoに送信されます。また、シリアルモニタを使用してリモート/dev/ttyACM0Piのデバイスノードにリモートで接続します。

ベストアンサー1

USBデバイスエージェントが不足している(2016年2月現在、usbipは移植性が低下しているようです)、代替はavrdudeArduinoが接続されているシステムに(リモートで)インストールすることです。これが可能な場合は、Arduino IDEランタイム(クライアント)にavrdudeREMOTEに接続されているプログラムを呼び出すように指示できます。欠点:Arduino IDE設定ファイルを操作する必要があり、脆弱性があり、この機能をサポートするには追加の作業が必要ですarduinoOTA

CLIENT (Arduino IDE) -> ssh -> REMOTE (avrdude) -> usb -> arduino

Arduino IDEには設定programmers.txtファイルが含まれている必要がありますplatform.txt(たとえば、Arduino.app/Contents/Java/hardware/arduino/avrMacバージョンの場合)。このファイルに必要なのは、REMOTEに接続してアップロードするデータを渡してから、avrdudeCLIENTシステムから渡されたデータを使用してREMOTEで実際のプログラマーコマンドを発行する新しいプログラマーです。

クライアントプログラマ

Java/hardware/arduino/avr/programmers.txt次のものを追加

avrrelay.name=AVR RELAY
avrrelay.protocol=stk500v2
avrrelay.program.tool=avrrelay
avrrelay.program.extra_params=

より複雑にするには、含まれているJava/hardware/arduino/avr/platform.txtすべての行をコピーしtools.avrdude.て調整して名前を付け、必要にtools.avrrelay.応じて呼び出しますavrrelay-client(この行のほとんどは不要ですが、すべてを含める必要がある行を特定するよりも簡単です)。

tools.avrrelay.path={runtime.tools.avrdude.path}
tools.avrrelay.cmd.path={path}/bin/avrrelay-client
tools.avrrelay.config.path={path}/etc/avrdude.conf
... many more of these not shown, e.g. the verbose one ...
tools.avrrelay.upload.pattern="{cmd.path}" "{build.path}/{build.project_name}.hex"
tools.avrrelay.program.pattern="{cmd.path}" "{build.path}/{build.project_name}.hex"

その後、Java/hardware/tools/avr/binディレクトリで作成して実行可能にします(設定runtime.tools.avrdude.pathオプションと同じである必要があります)。avrrelay-client

#!/bin/sh
# send the only argument (which should be the *.hex file) to avrrelay-remote
# this will need to use public key auth, or expect to automatically fill
# in any password promptes
ssh theremotehost avrrelay-remote < "$1"

リモートスクリプト

Arduino IDEには、アップロード中に実行中のコマンドを表示する詳細な出力を表示する機能があります。

/Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avrdude \
-C/Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf \
-v -patmega328p -cstk500v2 -Pusb \
-Uflash:w:/blablabla.../Blink.ino.hex:i 

このコマンドはREMOTEのコードにコピーして適用できますが、コピーされたデータをtmpファイルに配置し、クライアントが呼び出す必要があるプログラムに供給するようにavrdude(1)ファイル名を指定する必要があると指定されています。フルパスまたはSSHを使用できるディレクトリにあります。avrdudeavrrelay-remotechmod +xPATH

#!/bin/sh
FLASH=`mktemp /tmp/avrrelay.XXXXXXXXXX` || exit 1
# assume data passed via standard input
cat > "$FLASH"
# these flags will vary depending on programmer, etc
avrdude -C /path/to/avrdude.conf -v -patmega328p -cstk500v2 -Pusb \
"-Uflash:w:$FLASH:i"

理論的にはArduino IDEを再起動し、新しい「AVR RELAY」プログラマーを試してみてください。クレイジーデバッグ技術を使用して、何が間違っているのかを見つけてください。繰り返してください。

リモートシリアルモニタ

シリアルモニタをリモートで操作するための可能なオプションの1つは、以下を介して転送することですsocat

リモートコンピュータのシリアルポートに接続してデータを記録するためのバッファされていないsocatコマンド

おすすめ記事