eucalyのアイコン画像
eucaly 2021年05月16日作成
セットアップや使用方法 セットアップや使用方法 閲覧数 1164
eucaly 2021年05月16日作成 セットアップや使用方法 セットアップや使用方法 閲覧数 1164

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

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

おうちの消費電力がどれくらいか知りたい的な

まあ、いわゆるスマートメーター案件です。
詳しくは以下URL、まあそれなりに枯れた技術ですよ、と。
https://www.tepco.co.jp/pg/consignment/liberalization/smartmeter-broute.html

今回の目標

  • ROHMモジュールと、obnizの接続
  • ROHMモジュールの初期設定を、obnizで確認
    ・・・データ取得までは作りこめませんでした、ごめんなさい
    まあ、uart周りでかなり苦しめられたので、uart使うモジュールをjavascriptでアレする際は、ちょっとは参考になるかと思います。

キャプションを入力できます

無事動きました

初期化→登録→チャンネルスキャン→ターゲット発見!、までは、ね。
ほんとはここからサーバクライアント登録からの、データ取得を実装せねばなりませぬ。

ここに動画が表示されます

使用部品

  • ROHM BP35C0-T01
  • obniz board 1Y
  • SMAコネクタのアンテナ ( 900MHz帯で使えそうなもの )

キャプションを入力できます

まあ、Amazonとかに売っています。
適切にプログラミングしてあげれば、レベルシフタやリセットICなど、他の部品は要らないです。

回路

物理面はかなり簡単です。

  • 電源: obniz board 1Yの「3.3」を、VCCに接続
  • GND: GND同士を接続
  • UART: TXとRXをそれぞれ接続
  • リセット: VCCに接続

obniz javascript

ここで大ハマりしました。
とりあえずソースは以下です。

<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]); }

おわりに

キャプションを入力できます
いやあ、、、解析地獄に陥ってしまい。
時間が無くなっちゃいました・・・。
データ取得からのクラウドアップデートは、これからコツコツ作っていこうと思います・・・。

eucalyのアイコン画像
いつも、てきとうです
  • eucaly さんが 2021/05/16 に 編集 をしました。 (メッセージ: 初版)
ログインしてコメントを投稿する