質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

2回答

1586閲覧

avrgirl-arduinoのhex書き込みコマンドをexec関数で実現したいです。

BOBUSON.com

総合スコア7

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2018/08/12 05:36

現在、Webアプリのボタンを押すとshellコマンドが実行されるプログラムを書いています。
node.jsからシェルコマンドを実行するためにexec関数を使っています。

arduinoにプログラムを書き込むCLIツールとしてavrgirlを使用しています。

avrgirl-arduino flash -f 〇〇.ino.hex -a unoという指定の命令をコマンドラインに直接打つと書き込めます。しかし、exec関数を介すと命令が無視されて書き込むことができません。
他のpwdやls等のshellコマンドはexecを介して問題なく動作しています。

詳しい方、いらっしゃったらご教授していただけたら幸いです。
よろしくお願いいたします。

<参考画像>
○ shareというフォルダにhexファイルが保存されており、そのファイルを書き込む命令をshellコマンドで実現したい次第です。

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

私はこんな形で記述してみましたよ。
あくまでも参考程度にしてみてくださいね!

本質問の意図としてはNode.jsライブラリのexec関数にavrgirl-arduinoコマンドを渡せるかどうかを吟味したいものと汲み取って解釈しました。実行結果はnode jsファイルの実行した時点でのカレントディレクトリから直下に位置するhexファイルを書き込みにいく処理になっています。今回は手元のターゲットボードがUnoだったので-a unoを指定しています。

JavaScript

1const cmd = 'avrgirl-arduino flash -f abc.ino.hex -a uno'; 2const childProcess = require('child_process'); 3 4childProcess.exec(cmd, (error, stdout, stderr) => { 5 if(error){ 6 console.log(stderr); 7 return; 8 } 9 else{ 10 console.log(stdout); 11 console.log('cmd execute success!'); 12 } 13});

投稿2018/08/14 07:34

kitsunexx

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BOBUSON.com

2018/08/14 13:12

こんばんは。 丁寧に解説いただきありがとうございました。 ご指導いただいたコードを記述してみたところ、[Error: Error Resource temporarily unavailable Cannot lock port]というエラーメッセージが表示され、if(error)の分岐に入っていると思われます。 エラーの理由として、現状ではserialportの設定がうまくいっていないと予想しています。 ですので、exec関数は機能していると考えています。 node-serialportのインストールを再度行い、トライしてみます。 ご親切に教えていただき、本当にありがとうございました。
kitsunexx

2018/08/15 02:02

こんにちは。 早速回答が参考になったみたいでよかったです。 そうですか、その点についてはテストしてみないと詳しいことはなんとも言えませんが、 更に外部のコード等(例えばUI部分等)も示してくれましたら、その他のエラー対処についても考えてみますね。
guest

0

恐らく、実行環境のパーミッションや設定の違いと思います。
まず知りたいのはOSは何ですか?

参考になるかもしれませんが、execの環境の設定のページを。
exec(),shell_exec()関数から sudoコマンドを実行するための設定 (CentOS5.6)

怪しいと思っているのが'sudo'の動作環境ですので。

投稿2018/08/13 13:48

MasahikoHirata

総合スコア3747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BOBUSON.com

2018/08/13 13:51

回答いただき感謝します。 参考ページの提示ありがとうございます。 OSはUbuntu16.04-LTSです。
MasahikoHirata

2018/08/13 13:53

了解です。少し時間をください。
BOBUSON.com

2018/08/13 14:04

返信いただきありがとうございます。 個人的に試したことを以下に示させていただきます。 ・avrgirl-arduinoフォルダのパスは通したこと ・(https://www.npmjs.com/package/avrgirl-arduino)に示されている「avrgirl-arduino boards」や「avrgirl-arduino list」といったコマンドはexec関数を介して実行されること お手すきのときに対応いただけたら幸いです。 よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問