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

eucaly が 2021年05月16日18時26分46秒 に編集

初版

タイトルの変更

+

obnizでスマートメーターにちょっかいを出してみる

タグの変更

+

obniz

+

HEMS

+

スマートメーター

+

Wi-SUN

メイン画像の変更

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

記事種類の変更

+

セットアップや使用方法

本文の変更

+

# おうちの消費電力がどれくらいか知りたい的な まあ、いわゆるスマートメーター案件です。 詳しくは以下URL、まあそれなりに枯れた技術ですよ、と。 https://www.tepco.co.jp/pg/consignment/liberalization/smartmeter-broute.html # 今回の目標 - ROHMモジュールと、obnizの接続 - ROHMモジュールの初期設定を、obnizで確認 ・・・データ取得までは作りこめませんでした、ごめんなさい まあ、uart周りでかなり苦しめられたので、uart使うモジュールをjavascriptでアレする際は、ちょっとは参考になるかと思います。 ![キャプションを入力できます](https://camo.elchika.com/3c37e11871c413e4d2e2e3447cc722045550b1dd/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38666637633237372d646465642d343333632d393736342d6162303436346433326631302f32316530306464632d626538302d343664352d393739382d333438656238353033303039/) # 無事動きました 初期化→登録→チャンネルスキャン→ターゲット発見!、までは、ね。 ほんとはここからサーバクライアント登録からの、データ取得を実装せねばなりませぬ。 @[youtube](https://www.youtube.com/watch?v=GsECQXSDrEY) # 使用部品 - ROHM BP35C0-T01 - obniz board 1Y - SMAコネクタのアンテナ ( 900MHz帯で使えそうなもの ) ![キャプションを入力できます](https://camo.elchika.com/700d8101ec633f6569f668fdaddef86bb9e52115/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38666637633237372d646465642d343333632d393736342d6162303436346433326631302f30323332346362352d333036352d346465652d623663662d353462383163356139656535/) まあ、Amazonとかに売っています。 適切にプログラミングしてあげれば、レベルシフタやリセットICなど、他の部品は要らないです。 # 回路 物理面はかなり簡単です。 - 電源: obniz board 1Yの「3.3」を、VCCに接続 - GND: GND同士を接続 - UART: TXとRXをそれぞれ接続 - リセット: VCCに接続 # obniz javascript ここで大ハマりしました。 とりあえずソースは以下です。 ```uarttest.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" /> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script src="https://unpkg.com/obniz@3.x/obniz.js" crossorigin="anonymous" ></script> </head> <body> <div id="obniz-debug"></div> <div class="container text-center"> <h3 style="margin-bottom:20px;">Web Uart Console</h3> <div class="row"> <div class="form-group col-sm-6"> <h4>Send Messages</h4> <!--<textarea class="form-control" id="textToSend" rows="5" style="margin-bottom:10px;"></textarea>--> <button id="skver" class="btn btn-info">Version</button>&nbsp; <button id="skinfo" class="btn btn-info">Information</button>&nbsp; <button id="skreset" class="btn btn-info">Reset</button><br><br> <button id="sksetidpass" class="btn btn-info">Set RBID/Password</button>&nbsp; <button id="skscan" class="btn btn-info">Channel Scan</button> </div> <div class="form-group col-sm-6"> <h4>Receive Messages</h4> <textarea class="form-control" id="receivedText" rows="20" style="margin-bottom:10px;"></textarea> <button id="clear" class="btn btn-info">Clear</button> </div> </div> </div> <script> $(function(){ //put your obniz ID var obniz = new Obniz("OBNIZ_ID_HERE"); var RBID = "NAISHO" var PWD = "NAISHO" //during obniz connection obniz.onconnect = async function() { var uart = obniz.getFreeUart(); //wire cable to obniz //tx: 0 //rx: 1 uart.start({ tx: 0, rx: 1, gnd: 11,baud:115200, drive:'3v', pull:'0v'}); //if the "Send" button is clicked $("#send").on('click', async function(){ //send messages on UART var message = $("#textToSend").val(); senddata(message); // uart.send(message); // uart.send([0x0d]); // $("#textToSend").val(""); }); //show received messages in the left textarea uart.onreceive = function(data, text){ console.log(text, data); $('#receivedText').append(text); var psconsole = $('#receivedText'); psconsole.scrollTop( psconsole[0].scrollHeight - psconsole.height() ); } //if the "Clear" button is clickex $("#clear").on('click', async function(){ //clear recieved messages // $("#receivedText").val(""); }); $("#reset").on('click', async function(){ //clear recieved messages obniz.io2.drive("3v"); obniz.io2.output(false); await obniz.wait(1000); obniz.io2.output(true); }); $("#skver").on('click', async function(){ senddata("SKVER"); }); $("#skinfo").on('click', async function(){ senddata("SKINFO"); }); $("#skreset").on('click', async function(){ senddata("SKRESET"); }); $("#sksetidpass").on('click', async function(){ senddata("SKSETRBID " + RBID); await obniz.wait(500); senddata("SKSETPWD C " + PWD); }); $("#skscan").on('click', async function(){ senddata("SKSCAN 0 FFFFFFFF 6 0"); }); function senddata(message){ uart.send(message); uart.send([0x0d]); } } }); </script> </body> </html> ``` # uart のハマりポイント ## 相手が3.3V系のCPUな場合 - 相手側がプルアップしている場合がある - GNDピンを定義してあげないといまいち安定しない - pull「null」はプルアップしてしまう、プルダウンで今回は何とかなった なので、初期化コマンドは、以下な感じになります。 ちなみにdrive 3V は、実際は3.4V弱ドライブします。 ``` uart.start({ tx: 0, rx: 1, gnd: 11,baud:115200, drive:'3v', pull:'0v'}); ``` ## お手本スクリプト、SENDしてもなんか変 どうやらテキスト文字のみに制限されていて、改行送らない仕様っぽいです。 別途、sendにバイナリ文字列「0x0d」、つまりCRを渡して、改行を送り込むことで誤魔化しました。 ``` $("#skscan").on('click', async function(){ senddata("SKSCAN 0 FFFFFFFF 6 0"); }); function senddata(message){ uart.send(message); uart.send([0x0d]); } ``` # おわりに ![キャプションを入力できます](https://camo.elchika.com/598affb7f5832b69e1d5561d6dae81175f7a994b/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38666637633237372d646465642d343333632d393736342d6162303436346433326631302f62643037636538312d626431302d343265372d393730642d306630383135356539343565/) いやあ、、、解析地獄に陥ってしまい。 時間が無くなっちゃいました・・・。 データ取得からのクラウドアップデートは、これからコツコツ作っていこうと思います・・・。