ゆるく楽しむプログラミング

TWELITE DIP

TWELITEは『超省電力で簡単に使える!!』 触れ込みのマイコンです。
本体はコインサイズのチップです。
REDとBLUEの2種類があり、REDの方が高出力品となっています。
詳しいスペックはTWELITEの製品情報を参照。

TWELITE BLUE
(標準出力タイプ)
TEWLITE RED
(高出力タイプ)
    TWELITE DIP
(標準出力タイプ)
  TEWLITE DIP
(高出力タイプ)
       
同軸コネク・タタイプ         
           
この本体を電子工作で扱いやすいように、DIP変換基盤に搭載したのがTOWELITE DIPです。
他にも、各種用途向けに特化したバリエーションがありますが、本体は同じものです。

RST(21番ピン)をGNDに接続するとリセットが掛かります。
リセットスイッチを付けておくと便利です。

TWELITE DIP 「標準アプリ」

TWELITE DIPに初期インストールされている「標準アプリ」で使用できるシンクロモードでの使用方法は
添付されている「TWELIGHT DIP クイックマニュアル」に記載されています。

1台を親機に設定(M1:13番ピン:をGNDに接続)し、他をモード設定に従って子機に設定(M1:13番ピン、M2::26番ピン、M3:27番ピンを解放、またはGNDに接続)します。





シンクロ動作

DI1(15番ピン) / DI2(16番ピン) / DI3(17番ピン) / DI4(18番ピン) の 解放 or プルダウン の状態が通信しているTOWELITEの
DO1(5番ピン) / DO2(8番ピン) / DO3(9番ピン) / DO4(12番ピン) に反映されます。

AI1(22番ピン) / AI2(23番ピン) / AI3(24番ピン) / AI4(25番ピン) の入力電圧レベル(Vccに対する相対値:解像度10Bit)に対応して
PWM1(4番ピン) / PWM2(6番ピン) / PWM3(7番ピン) / PWM4(11番ピン)に PWM(解像度12Bit)パルスで出力されます。

TWELITEの出力電流は4mAしかないので、LED等を接続する際には出力電流に注意。
クイックマニュアルでは660Ωになっていますが、300Ω位でも大丈夫そうです。

UART通信

UARTシリアル通信によって、TWELITEの状態(電圧、電波強度、DI1~4/AI1~4の状態)を取得できます。
また、UARTシリアル通信を使用してコマンドを送る事でIO(DO1~4/AO1~4)の操作、I2Cデバイスの操作が行えます。

パソコンに接続するにはUSB-シリアル変換アダプタを使用します。
M5Stamp PICO用のESP32 ダウンローダーキットを利用しました。
USB-シリアル変換アダプタは何でも良いですが、電圧と信号レベルには注意してください。


TWELITE専用のTWELITE-Rを使用するのが最も安全です。
アプリの書き換え時にもTWELITE-Rを使用する方が扱いが簡単ですので、一緒に購入するのも良いと思います。

通信条件は 115200bps 8N1 8bit パリティ無し ストップビット1です。
(20番ピンをGNDに接続する事で38400bpsに変更できます。)

通信ターミナルにはArduinoIDEのシリアルモニタが利用できます。
改行コードは<CR>+<LF>です。


UARTでの状態通知

UARTに接続すると、通信先のTWELITE(親機に接続した場合は子機の情報、子機に接続した場合は親機の情報)が表示されます。
表示されている文字列は':'で始まる状態通知情報で、2文字で1バイトの16進数、24Byte分です。
状態の内容は下記の通り。
バイト数 コマンド 補足
1 送信元の論理デバイスID 0x00:親機 0x78 :子機
2 コマンド 0x81: IO状態の通知
3 パケット識別子
4 プロトコルバージョン 0x01 固定
5 LQI値 電波強度 0xFF~0x00
6 送信元の個体識別番号
7
8
9
10 宛先の論理デバイスID
11 タイムスタンプ 毎秒64カウント
12
13 中継フラグ
14 電源電圧[mV]
15
16 未使用
17 DI の状態ビット DI1(0x1) DI2(0x2) DI3(0x4) DI4(0x8)
18 DI の変更状態ビット DI1(0x1) DI2(0x2) DI3(0x4) DI4(0x8)
19 AD1の変換値 0~2000[mV]のAD値を16で割った値
20 AD2の変換値
21 AD2の変換値
22 AD3の変換値
23 AD1~AD4の補正値 LSBから順に2ビットずつ補正値
24 チェックサム 合計値の2の補数

UARTでのIO操作

通信先のTWELITE(親機に接続した場合は子機の情報、子機に接続した場合は親機)のIOを操作するコマンドは以下の通り。
’:’で始まり、1Byteを2文字の16進数(0~F)で表現し、終端は0x0D(CR) 0x0A(LF) の文字列で構成します。
バイト数 コマンド 補足
1 宛先アドレス 0x00: 親機, 0x01 ~ 0x64: 子機ID指定, 0x78: 全子機
2 マンド番号 0x80
3 書式バージョン 0x01 固定
4 IO状態 DI1(0x1) DI2(0x2) DI3(0x4) DI4(0x8)
5 IO状態設定マスク DI1(0x1) DI2(0x2) DI3(0x4) DI4(0x8)
6 PWM1の設定値 0(0%)~1024(100%)または0xFFFF(設定しない)
7
8 PWM2の設定値
9
10 PWM3の設定値
11
12 PWM4の設定値
13
14 チェックサム 合計値の2の補数 省略する場合は’X'

DO1~DO4をONにするコマンドはこうなります。
:7880010F0F0000000000000000E9

チェックサムを省略する場合はチェックサム2バイトの代わりに’X’を送付します。
:7880010F0F0000000000000000X

UARTでのI2Cデバイス操作

通信先のTWELITE(親機に接続した場合は子機の情報、子機に接続した場合は親機)に接続しているI2Cデバイスの操作は次のコマンドで行います。

I2Cデバイスへのコマンド・データ送信
バイト数 コマンド 補足
1 宛先アドレス 0x00: 親機, 0x01 ~ 0x64: 子機ID指定, 0x78: 全子機
2 マンド番号 0x88
3 要求番号 任意設定:応答時のにこの番号が返される
4 コマンド 0x1: Write 、 0x2: Read 、0x4: Write&Read
5 I2Cアドレス
6 I2Cコマンド 最初のコマンドバイト
7 データサイズ 無い時は 0
8~N データ データサイズが0のときは、本フィールドは無し
N+1 チェックサム 合計値の2の補数

I2Cデバイスからのデータ取得
バイト数 コマンド 補足
1 送信元アドレス 0x00: 親機, 0x01 ~ 0x64: 子機ID指定, 0x78: 全子機
2 マンド番号 0x89
3 要求番号 任意設定:応答時のにこの番号が返される
4 コマンド 0x1: Write 、 0x2: Read 、0x4: Write&Read
5 リザルト 0:FAIL、1:SUCCESS
6 I2Cコマンド 最初のコマンドバイト
7 データサイズ 無い時は 0
8~N データ データサイズが0のときは、本フィールドは無し


子機に接続した温湿度センサー DHT-20 を操作する例
親機→子機 DHT20に0x71を送付 :7888010138710055
子機→親機 コマンド応答 :788901010100FC
親機→子機 DHT20に0xAC 0x33 0x00を送付 :7888020138AC023300E4
子機→親機 コマンド応答 :788902010100FB
親機→子機 DHT20から7Byteの読み取り :78880302380007BC
子機→親機 DHT20からの取得データ :7889030201071C7AC50568F3EC4B
DHT-20から読み取った7Byte 1C7AC50568F3EC をデコードすると 温湿度が得られます。
デコード手順はDHT-20の操作方法を参照

M5Stackでのサンプルスケッチ

以上の スケッチを公開しています。
YuruPuro/MSP2807
M5Stack_IOino

M5StackでTWELITE子機のIO状態の表示
IO出力を操作する。

M5Stackのシリアル通信はRX2(16番ピン),TX2(17番ピン)を使用
    M5Stack_I2C.ino

M5StackでTWELITE子機に接続した DHT-20 から温湿度を取得する

M5Stackのシリアル通信はRX2(16番ピン),TX2(17番ピン)を使用

解説動画