M
M
MWX Library
検索…
The MWX Library
Mono Wireless C++ Library for TWELITE.
資料の取り扱いについてをご参照ください。 お気付きの点がありましたら、当サポート窓口にご連絡いただければ幸いです。
MWX ライブラリは、TWELITE 無線モジュールのコード表記を簡素化することを目的としています。MWXで作成されたプログラムをアクト act と呼びます。アクトにはループによる記述と、イベントによる記述(ビヘイビア behavior と呼びます)の二種類があります。
本ページではアクトの主な特徴を紹介します。
  • ループによる記述 (setup(), loop())。小規模な機能を記述するのに向いています。
1
#include <TWELITE>
2
const uint8_t PIN_LED = 5;
3
4
void setup() {
5
pinMode(PIN_LED, OUTPUT);
6
}
7
8
void loop() {
9
if (TickTimer.available()) {
10
uint32 t_now = millis();
11
12
// blink LED every 1024ms
13
digitalWrite(PIN_LED, (t_now >> 10) & 1 ? HIGH : LOW);
14
}
15
}
Copied!
  • イベントドリブンのアプリケーション記述。各種イベント・割り込みハンドラの定義、アプリケーションの複雑な振る舞いを記述するのに向いたステートマシンをクラス内に定義して見通しの良いコードを記述できます。この記述をビヘイビアと呼びます。
1
// myApp.hpp
2
...
3
class myApp : MWX_APPDEFS_CRTP(myApp) {
4
...
5
void loop() {
6
// main loop
7
}
8
9
void receive(mwx::packet_rx& rx) {
10
// on receive
11
}
12
};
13
14
// myApp.cpp
15
...
16
MWX_DIO_EVENT(12, uint32_t arg) {
17
// on event from DIO12
18
}
Copied!
  • ペリフェラルの手続きを簡素化。よく使われる UART, I2C, SPI, ADC, DIO, タイマー, パルスカウンタを取り扱うクラスオブジェクトを定義しています。
1
void loop() {
2
while(Serial.available() {
3
auto x = Serial.read(); ... } // serial message
4
if (Analogue.available() {
5
auto x = Analogue.read(...); } // adc values
6
if (Buttons.available() {
7
Buttons.read(...); } // DIO changes
8
if (the_twelite.receiver.available()) {
9
auto&& rx = the_twelite.receiver.read(); } // on rx packet
10
}
Copied!
  • シンプルな中継ネットワークを定義。この中継ネットワークは TWELITE 標準アプリケーションと同等の実装で、個体アドレスの管理は 8bit の論理IDで行うこと、ネットワーク構築のための通信を行わないため電源投入後すぐにネットワーク宛に無線パケットを送ることができる点が特徴です。
1
#include <TWELITE>
2
#include <NWK_SIMPLE>
3
4
void setup() {
5
...
6
auto&& nwksmpl = the_twelite.network.use<NWK_SIMPLE>();
7
nwksmpl << NWK_SIMPLE::logical_id(0xFE)
8
// set Logical ID. (0xFE means a child device with no ID)
9
<< NWK_SIMPLE::repeat_max(3);
10
// can repeat a packet up to three times.
11
}
12
13
void loop() {
14
...
15
vTransmit();
16
...
17
}
18
19
void vTransmit() {
20
if (auto&& pkt =
21
the_twelite.network.use<NWK_SIMPLE>().prepare_tx_packet();
22
pkt << tx_addr(0x00) // to parent
23
<< tx_retry(0x3); // set retry
24
25
pack_bytes(pkt.get_payload() // prepare payload data
26
, uint8_t(0x01)
27
, uint16_t(analogRead(PIN_ANALOGUE::A1))
28
, uint16_t(analogRead_mv(PIN_ANALOGUE::VCC)));
29
30
pkt.transmit(); // transmit!
31
}
Copied!
TWELITE 標準アプリケーションとのパケットの相互通信はできませんが、以下の点で自由度が上がっています。
  • 論理IDは 0 が親機である点は同様ですが、子機アドレスとして 0x01..0xEF を利用できるため、識別数を 200 以上とすることができます。
  • 原則3回までとしていた中継回数について、最大数を64回までを設定できるようにしています。(※ パケットが遠回りして一定時間経過後に戻ってきた場合、重複パケットの管理テーブルがクリアされ中継済みのパケットであっても、再中継が発生する場合があります。中継回数を大きくする設定は注意してください)
  • PAL や MONOSTICK 向けのボード定義。ボード上のセンサーなどを容易に取り扱えます。
1
#include <TWELITE>
2
#include <PAL_AMB> // include the board support of PAL_AMB
3
4
void setup() {
5
auto&& brd = the_twelite.board.use<PAL_AMB>(); // use PAL AMB
6
uint8_t u8dip = brd.get_DIP_SW(); // check DIP s/w status
7
brd.set_led(LED_TIMER::BLINK, 100); // LED switchs on/off every 100ms
8
...
9
10
// start capture of sensors
11
brd.sns_SHTC3.begin();
12
}
13
14
void loop() {
15
if (TickTime.available()) { // check every ms
16
auto&& brd = the_twelite.board.use<PAL_AMB>();
17
18
if (brd.sns_LTR308ALS.available()) {
19
Serial << brd.sns_SHTC3..get_temp();
20
} else {
21
// notify sensor that 1ms passed.
22
brd.sns_SHTC3.process_ev(E_EVENT_TICK_TIMER);
23
}
24
}
25
}
Copied!
最終更新 1mo ago
PDFに出力
リンクのコピー