kuroの覚え書き

96の個人的覚え書き

SDI-12コマンド

SDI-12インターフェースで接続した機器とのコミュニケーションについて

SDI-12の規格では
Bits per second: 1200
Data bits: 7
Parity: 1
Stop bits: 1
Flow Control: 反転(active LOW)
で通信することになっている。

Arduino,ESP32,M5stack等で接続するなら

Serial1.begin(1200, SERIAL_7E1, RX_pin, TX_pin);

のように起動する。

基本コマンドをホストから送って、センサーから情報を返して貰うというスタイルで通信する。

コマンドをインプットし最後に!をタイプするとコマンドがそこで終わることを示し、コマンドが送信される。
センサーには固有のアドレス(0-9,a-z,A-Zのいずれか)が設定されている(変更も可能)以下コマンド中に'a'となっていたら実際はそこにアドレスの英数字を入れてコマンド入力することを表す。
またアドレスのワイルドカードとして'?'を使う事ができる。

a!
と送るとアドレス'a'のセンサーが応答しているか確認される。

?!
と送ると接続されているセンサーのアドレスがどのように設定されているかが返される。

aI! (エルではなく大文字アイ)
SDI-12互換性レベル、モデル番号、およびファームウェアバージョン番号などを返す。
例: 1I! 113METER TER12 117631800001
この場合センサーアドレス:1, ターゲットセンサーがSDI-12 specification v1.3をサポート, ベンダー:METER, センサーモデル:TER12, センサーバージョン:107, センサーシリアル番号:631800001であることを示す。
基本的に項目間にスペースなく詰めて表示されるらしい。METERの後ろにスペースが3つあるのはMETERがそのように入力したからということ。

aAB!
アドレスaのセンサーをアドレスBに変更するコマンド

aM!
測定
応答例: 00013
センサーアドレス:0, 応答にかかった時間:001, センサーが返す計測値の数:3

aD0!
データ送信を要求する
応答例: 0+2574.15+13.3+51
この場合、アドレス0から3つのデータが返ってきている


続く