ノートパソコンに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
。
答え2
最も簡単な設定は、リモートコンピュータにArduino IDLEをインストールしてからSSHを使用してアクセスすることです。
SSH経由でグラフィックを送信するには、最後に-Xフラグを追加します。
$ ssh username@ip-adress -X
答え3
基本的な目標は、既存のUSB接続(ROSシステムのノードなど)から切断せずにArduinoをプログラムすることですが、ケーブルを接続できるほどArduinoに近い場合はICSPを使用できます。ポートコンピュータのシステム内プログラマ(私はOlimex AVI-ISP-MK2を使用しています)。
Arduino IDEでは、スケッチ>プログラマーを使用してアップロードまたはCtrl + Shift + Uです。この方法は、ISPが接続されているUSBポートに/ dev割り当てを設定する必要がないため、USB経由の方法よりも簡単です。
〜ジャスティン
答え4
thrigの答えは非常に詳細ですが、非常に一般的です。ほとんどカットして貼り付ける答えが役に立つと思いました。 Arduino IDE 1.8.12を使用してWindows 10 1903でテストされていますが、独自のscpとsshを提供している場合は、以前のバージョンのWindowsにも簡単に適用できます。
これを行うには、SSH経由で接続できるように何かを設定する必要があります。地元の到着離れてコマンドラインからパスワードやパスフレーズを要求する必要はありません。
また、リモートシステムで avrdude を使用して Arduino IDE を正常に設定して構成したとします。
下記***で示される内容は全て修正が必要です。
最終免責事項:パスにスペースが含まれている場合に何が起こるかをテストしませんでした。また、ファイルの上書きなどを防ぐチェックもありません。
ローカルシステムではArduinoインストールディレクトリ\hardware\arduino\avr次の名前のファイルを作成または編集します。
platform.local.txtコンテンツとして追加します。
tools.remoteavrdude.path={runtime.tools.avrdude.path}
tools.remoteavrdude.cmd.path={path}\bin\avrrelay.bat
tools.remoteavrdude.remote.host=***user***@***host***
tools.remoteavrdude.remote.cmd.path=***how to invoke avrdude on the remote system. could be sudo avrdude***
tools.remoteavrdude.remote.config.path=***which config file on the remote system to use. could be /etc/avrdude.conf***
tools.remoteavrdude.remote.file.path=***to which filename the compiled code should be copied to on the remote system***
tools.remoteavrdude.upload.params.verbose=-v
tools.remoteavrdude.upload.params.quiet=-q -q
# tools.remoteavrdude.upload.verify is needed for backwards compatibility with IDE 1.6.8 or older, IDE 1.6.9 or newer overrides this value
tools.remoteavrdude.upload.verify=
tools.remoteavrdude.upload.params.noverify=-V
tools.remoteavrdude.upload.pattern="{cmd.path}" {remote.host} "{remote.cmd.path} -C{remote.config.path} {upload.verbose} {upload.verify} ***the board-specific options*** -Uflash:w:{remote.file.path}:i" {build.path}\{build.project_name}.hex {remote.file.path}
tools.remoteavrdude.program.params.verbose=-v
tools.remoteavrdude.program.params.quiet=-q -q
# tools.remoteavrdude.program.verify is needed for backwards compatibility with IDE 1.6.8 or older, IDE 1.6.9 or newer overrides this value
tools.remoteavrdude.program.verify=
tools.remoteavrdude.program.params.noverify=-V
tools.remoteavrdude.program.pattern="{cmd.path}" {remote.host} "{remote.cmd.path} -C{remote.config.path} {program.verbose} {program.verify} ***the board-specific options*** -Uflash:w:{remote.file.path}:i" {build.path}\{build.project_name}.hex {remote.file.path}
tools.remoteavrdude.erase.params.verbose=-v
tools.remoteavrdude.erase.params.quiet=-q -q
tools.remoteavrdude.erase.pattern="{cmd.path}" {remote.host} "{remote.cmd.path} -C{config.path} {erase.verbose} {program.extra_params} -e ***the board-specific options*** -Ulock:w:{bootloader.unlock_bits}:m -Uefuse:w:{bootloader.extended_fuses}:m -Uhfuse:w:{bootloader.high_fuses}:m -Ulfuse:w:{bootloader.low_fuses}:m"
tools.remoteavrdude.bootloader.params.verbose=-v
tools.remoteavrdude.bootloader.params.quiet=-q -q
tools.remoteavrdude.bootloader.pattern="{cmd.path}" {remote.host} "{remote.cmd.path} -C{config.path} {bootloader.verbose} ***the board-specific options*** {program.extra_params} -Uflash:w:{remote.file.path}:i -Ulock:w:{bootloader.lock_bits}:m {runtime.platform.path}\bootloaders\{bootloader.file} {remote.file.path}
~のためボード固有のオプション、確認するプラットフォーム.txtリモートシステムから。通常は-p{build.mcu} -c{upload.protocol} -D
アップロード-p{build.mcu} -c{protocol} {program.extra_params}
などのようなものです。
また、このディレクトリで編集してください。
プログラマー.txtそして、以下を追加してください:
remoteavrdude.name=remote avrdude
remoteavrdude.protocol=***what your board needs***
remoteavrdude.program.tool=remoteavrdude
***any other options for your board and programmer, check programmers.txt on the remote system***
それからArduinoインストールディレクトリ\ハードウェア\ツール\avr\binというファイルを作成します。
avrrelay.batコンテンツとして追加します。
IF "%~3" == "" GOTO execute
C:\Windows\Sysnative\OpenSSH\scp.exe "%3" %1:%4
:execute
C:\Windows\Sysnative\OpenSSH\ssh.exe %1 %2
他のscp / sshを使用している場合は、上記のパスを変更してください。