ノートパソコンにArduino IDEがインストールされており、同じネットワーク上のリモートコンピュータに接続されているリモートArduino(Uno)をプログラムしたいと思います。たとえば、Raspberry Pi(Arduino UnoはUSBケーブルを使用して接続されています)がワイヤレスネットワークに接続されています。これを行うには何を設定する必要がありますか?
注:私はArduinoをSSHクライアントとして使用しようとしていません。私がやりたいことは、ラップトップのArduino IDEとRaspberry PIの間にある種のトンネル(好ましくはSSH)を設定することです。 ArduinoボードはUSBケーブルを介してRaspberry PIに接続されています。
理想的には、ボタンを押すと、ローカルにコンパイルされたUpload
ファームウェアがトンネルを介してリモートArduinoに送信されます。また、シリアルモニタを使用してリモート/dev/ttyACM0
Piのデバイスノードにリモートで接続します。
ベストアンサー1
USBデバイスエージェントが不足している(2016年2月現在、usbipは移植性が低下しているようです)、代替はavrdude
Arduinoが接続されているシステムに(リモートで)インストールすることです。これが可能な場合は、Arduino IDEランタイム(クライアント)にavrdude
REMOTEに接続されているプログラムを呼び出すように指示できます。欠点:Arduino IDE設定ファイルを操作する必要があり、脆弱性があり、この機能をサポートするには追加の作業が必要ですarduinoOTA
。
CLIENT (Arduino IDE) -> ssh -> REMOTE (avrdude) -> usb -> arduino
Arduino IDEには設定programmers.txt
ファイルが含まれている必要がありますplatform.txt
(たとえば、Arduino.app/Contents/Java/hardware/arduino/avr
Macバージョンの場合)。このファイルに必要なのは、REMOTEに接続してアップロードするデータを渡してから、avrdude
CLIENTシステムから渡されたデータを使用して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を使用できるディレクトリにあります。avrdude
avrrelay-remote
chmod +x
PATH
#!/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
。