編集履歴一覧に戻る
kitazakiのアイコン画像

kitazaki が 2021年04月12日11時56分35秒 に編集

初版

タイトルの変更

+

obniz 1Yを使用して外出先から自宅のラズパイとJetson Nanoを操作してみた

タグの変更

+

obniz

+

jetson

+

RaspberryPi

メイン画像の変更

メイン画像が設定されました

本文の変更

+

**デモ動画** @[youtube](https://www.youtube.com/watch?v=SlcRASPwLU8) **背景** リモートから自宅のラズパイやJetson Nanoを操作する場合、自宅のネットワークにポートを開ける必要があります。 ![キャプションを入力できます](https://camo.elchika.com/6a7e686637b321bdc40e6fe99e5fbe9f9c536f1a/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32666362316330662d646265352d346565302d613733632d3766353634316438613163352f38373566393932352d313865382d346435302d613230372d653234386537656136333731/) 自宅のネットワークにポートを開けるのはセキュリティのリスクがあるため、ポートを開けない代替手段手段として、ngrok、または、ARGO TUNNEL (cloudflared) などのサービスを使用して、自宅のネットワークからインターネットのサーバへアクセスすることで、リモートからの操作が可能になります。 しかし、ラズパイやJetson Nanoからアクセスする必要があり、また、サービスによって利用時間に制限があったり、リモートからのアクセス先(URL)が変わるので、不便な場合があります。 ![キャプションを入力できます](https://camo.elchika.com/6dcf22c1c8428926d6741ff5b53c2d1cb972edc7/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32666362316330662d646265352d346565302d613733632d3766353634316438613163352f37333961333438332d396464322d346264612d393933372d613666643364393632383636/) そこで、obnizを使用することで、obniz Cloud経由でリモートからのアクセスが可能になり、また、GPIOを使用してラズパイやJetson Nanoの電源を操作することもできるので、電気代を節約することができます。 ![キャプションを入力できます](https://camo.elchika.com/8f2ad8aa038551424c46672ffc590a3d693e9074/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32666362316330662d646265352d346565302d613733632d3766353634316438613163352f36663139396234332d316533632d343031612d623930632d633236643430613533306433/) **材料** obniz、ラズパイ、Jetson Nano以外に必要になる材料はジャンパワイヤのみで、obniz 1台でラズパイ、Jetson Nanoを2台まで操作可能です。 Grove - ジャンパワイヤ変換基盤と変換ケーブルを使用すると、操作する機器を変更する際にケーブルを間違えて挿すリスクを減らしたり、ケーブルの抜き差しを楽にすることができます。 ![キャプションを入力できます](https://camo.elchika.com/ed6c232716d761eacc71addf85fa1d0c01112472/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32666362316330662d646265352d346565302d613733632d3766353634316438613163352f64353362306239392d343534632d346265352d626465302d613438373234623934626236/) **構成 (配線と接続)** ![キャプションを入力できます](https://camo.elchika.com/396dd5b7183b7d7a7c1d25865a8aa3d9080d7f8f/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32666362316330662d646265352d346565302d613733632d3766353634316438613163352f64623962613661322d383838322d346336392d616164322d303536343837333038363765/) **Jetson Nano** Jetson Nanoは電源を入れても自動的に電源が入らないようにAUTO ON機能を無効にします。 AUTO ON機能を無効にするためには、AUTO ONとDISABLEのピンをジャンパーピンでショートします。 そして、UART RXD、UART TXD、PWR BTN、GNDをジャンパワイヤでobnizと接続します。 ![キャプションを入力できます](https://camo.elchika.com/57e772b1ca02e44b9f396277b801dc28654d3af4/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32666362316330662d646265352d346565302d613733632d3766353634316438613163352f30666532383466362d376435642d346661622d613236612d396439393032663466656561/) **ラズパイ** ラズパイはGPIO3、GND、GPIO14、GPIO15をジャンパワイヤでobnizと接続します。 ラズパイはAUTO ON機能を無効にできませんので、一度起動した後にシャットダウンをして待機状態にします。 また、raspi-configコマンド(CLI)、または、Raspberry Piの設定(GUI)でシリアルコンソール機能を有効にする必要があります。 ![キャプションを入力できます](https://camo.elchika.com/6bfe79e37d3bed154e8cd3c486995b1f51eea4ba/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32666362316330662d646265352d346565302d613733632d3766353634316438613163352f33623834326239382d626633302d343365612d386338312d313462306230616137343062/) **obniz Cloud開発画面** obnizの開発者コンソールへログインして、HTMLプログラムからソースコードを入力します。 入力したソースコードはリポジトリに保存することができ、2回目以降はこちらから実行することが可能です。 ![キャプションを入力できます](https://camo.elchika.com/2b8919b06dcd5be9e96b4439bf85929db4789e7d/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32666362316330662d646265352d346565302d613733632d3766353634316438613163352f38356436633538372d633763372d343065612d623136662d626532643065666235643035/) ソースコードを入力したあと、実行ボタンを押すと操作画面が表示されます。 ![キャプションを入力できます](https://camo.elchika.com/ffbb8cdd372fd81bdf99de0c8548fa71ad7ec1ca/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32666362316330662d646265352d346565302d613733632d3766353634316438613163352f37663537666632382d313934332d343639382d613630362d386662643964353166363431/) 操作画面のコマンド入力フォームと電源操作ボタンは2台に分けて表示しています。 コンソール出力の表示は1つですが、2台の区別は出力行の先頭の番号で分かるようにしています。 ![キャプションを入力できます](https://camo.elchika.com/751eb8c197fc6652541ccd04643e1e951bd95153/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32666362316330662d646265352d346565302d613733632d3766353634316438613163352f66363761623330312d386435642d343965312d616336652d623136373836356363376535/) **ソースコード** obniz ID(ソースコードのobniz = new Obniz('XXXX-XXXX');のXXXX-XXXX部分)はご自身のobniz 1YボードのIDを使用してください。 ```html:HTML <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" /> <link rel="stylesheet" href="/css/starter-sample.css" /> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script src="https://unpkg.com/obniz@3.14.0/obniz.js" crossorigin="anonymous" ></script> </head> <body> <div id="obniz-debug"></div> <div id="print"></div> <br /> <form id="messageform1" class="text-center row"> <div class="col-xs-4 col-md-3"></div> <div id="formarea" class="text-center col-xs-4 col-md-6"> コンソール 1 <textarea id="textarea1" name="text" rows="1" cols="40"></textarea> <div class="text-center"> <button id="send" class="btn btn-success" style="margin:20px">Send</button> </div> </div> <div class="col-xs-4 col-md-3"></div> </form> <div class="text-center"> <button id="reset1" type="button" class="btn btn-primary">POWER ON</button> </div> <br /> <form id="messageform2" class="text-center row"> <div class="col-xs-4 col-md-3"></div> <div id="formarea" class="text-center col-xs-4 col-md-6"> コンソール 2 <textarea id="textarea2" name="text" rows="1" cols="40"></textarea> <div class="text-center"> <button id="send" class="btn btn-success" style="margin:20px">Send</button> </div> </div> <div class="col-xs-4 col-md-3"></div> </form> <div class="text-center"> <button id="reset2" type="button" class="btn btn-primary">POWER ON</button> </div> <script> (async function(){ var obniz; obniz = new Obniz('XXXX-XXXX'); await obniz.connectWait(); obniz.uart0.start({rx:2, tx:3, gnd:0}); obniz.uart0.onreceive=function(data,text){ console.log("1 > "+text); } obniz.uart1.start({rx:6, tx:7, gnd:4}); obniz.uart1.onreceive=function(data,text){ console.log("2 > "+text); } $("#messageform1").submit(async e => { await e.preventDefault(); let message = $("#textarea1").val(); await obniz.uart0.send(message + "\n"); console.log("1 < "+message); $("#textarea1").val(""); }); $("#messageform2").submit(async e => { await e.preventDefault(); let message = $("#textarea2").val(); await obniz.uart1.send(message + "\n"); console.log("2 < "+message); $("#textarea2").val(""); }); $("#reset1").click(e => { obniz.io1.output(true); // 出力 obniz.io1.pull("5v"); // => pull-up; obniz.wait(500); // デバイスにだけ待機の指示を送り、プログラム側は動作を続ける obniz.io1.output(false); // output(false)では「0vを出力する」という出力が行われる obniz.io1.end(); // 出力の停止 console.log("1 < RESET"); }); $("#reset2").click(e => { obniz.io5.output(true); // 出力 obniz.io5.pull("5v"); // => pull-up; obniz.wait(500); // デバイスにだけ待機の指示を送り、プログラム側は動作を続ける obniz.io5.output(false); // output(false)では「0vを出力する」という出力が行われる obniz.io5.end(); // 出力の停止 console.log("2 < RESET"); }); $(window).on("beforeunload", async e => { await obniz.uart0.end(); await obniz.uart1.end(); await obniz.io1.end(); await obniz.io5.end(); await obniz.close(); return; }); })(); </script> </body> </html> ```