act - アクト
アクト
act
手軽にプログラミング、カスタマイズ。

actでプログラミング - Opening act

actとは

act アクト TWELITE トワイライト で動作するアプリを書くことができるプログラムです。 act アクト はなるべく手軽に TWELITE トワイライト のプログラミングを開始できることを目的としています。

act アクト をテキストエディタで記述し、ビルドという作業で実行ファイルを生成し、これを TWELITE トワイライト に書き込み動作させます。

編集
編集
❶ ソースコードの編集
任意のテキストエディタでソースコードを編集する。
ビルド
ビルド
❷ アプリの作成
ソースコードをコンパイルして実行ファイル(アプリ)にする。
書換
書換
❸ アプリの書き換え
TWELITE トワイライト に実行ファイル(アプリ)を書き込む。

act アクト setup()loop()という2つの関数により構成されます。setup()はピンの入出力等を定義する場所で起動時やリセット時に1度だけ実行されます。loop()はメイン処理部で電源が切れるまで繰り返し実行されます。

/**/で囲まれた部分と//で始まる行はコメントでプログラムに説明を記述するためのもので実行はされません。

準備

act アクト TWELITE トワイライト で動作させるためにはビルドと書き換えという作業が必要です。これらの作業は評価開発環境 TWELITE STAGE トワイライトステージ で行います。

まずは TWELITE STAGE トワイライトステージ をダウンロードしてインストールしてください。

TWELITE STAGE トワイライトステージ に含まれている TWELITE STAGE APP トワイライトステージアプリ で簡単にビルドコマンド(make)を実行でき、ビルド→書き込み→ターミナルを開いて動作確認といった一連の作業をスムーズに行えます。

Microsoft社のVisual Studio Code用の定義も用意していますので、VSCode上で効率よく編集して、 TWELITE STAGE APP トワイライトステージアプリ でビルド実行することも可能です。

基板上に必要な回路と部品が実装された TWELITE STAGE BOARD トワイライトステージボード もございます。

TWELITE STAGE - トワイライトステージ
評価開発環境
アプリのビルド、書換、設定、表示に。
トワイライトステージTWELITE STAGE
TWELITE STAGE-トワイライトステージは TWELITE トワイライト を動作させるためのアプリのビルド、書換、設定、そして、アプリからのデータを表示する機能を統合した評価開発環境です。
TWELITE STAGE - トワイライトステージ
評価開発用基板
配線不要ではじめる。
トワイライトステージボードTWELITE STAGE BOARD
LEDやスイッチ、アナログ入力ボリューム等をワンパッケージにしたTWELITEの評価開発用基板です。 TWELITE DIPを接続する事で電子工作なしで簡単に無線通信を体験できます。デジタル、アナログ対応のGROVE互換コネクタを搭載しており、各種センサを使ったプログラミングが可能です。

VSCodeを使用してコードの編集を行うことができます。

act 1 - Lチカ(LED点滅)

ここではLチカ(LED点滅)させる例で一連の流れを説明します。

インストールしたMWSTAGEフォルダ内にあるMWSDKフォルダにAct_samplesフォルダがあります。Act_samplesフォルダには各種サンプルが入っています。

以下はact1フォルダにあるLチカ(LED点滅)させるためのソースプログラムact1.cppです。act1.cppを任意のテキストエディタで編集することができます。

#include <TWELITE>

/*** the setup procedure (called on boot) */
void setup() {
    pinMode(18, OUTPUT);
    digitalWrite(18, LOW); // TURN DO1 ON
 
    Serial << "--- act1 (blink LED) ---" << crlf;
}
 
/*** loop procedure (called every event) */
void loop() {
    delay(500); // 500ms delay
    digitalWrite(18, HIGH); // TURN DO1 OFF
    delay(500); // 500ms delay
    digitalWrite(18, LOW); // TURN DO1 ON
}

act1では点滅の間隔をdelay()で設定しています。delay()は設定した時間だけ処理を止めて待ちます。設定値はミリ秒(1000分の1秒)です。500を設定すると0.5秒間待ちます。この値を変えることにより点滅の速度を調節できます。

必要な物

  1. TWELITE DIP トワイライトディップ
  2. TWELITE R トワイライター
  3. USBケーブル(充電専用不可)

アプリの書換

  1. TWELITE DIP トワイライトディップ TWELITE R トワイライター を接続する。
  2. TWELITE R トワイライター をパソコンのUSBポートに接続する。
  3. TWELITE STAGE APP トワイライトステージアプリ を起動する。
  4. 表示されたリストから接続したデバイスを選択する。
  5. メニューから「アプリの書換」>「actビルド&書換」>「act1」を選択する。

以上で TWELITE DIP トワイライトディップ のアプリが書換えられます。

配線

アプリの書換が終わったら、以下のように配線してください。

blinking
  1. LEDのカソード(端子の短い方)をTWELITEのDO1に接続する。
  2. LEDには極性があります。逆に接続しないように注意してください。

    TWELITEはデジタル出力(DO)が複数ありますが、この例ではデジタル出力1(DO1)を使用します。TWELITEの5番ピンがデジタル出力1(DO1)です。TWELITEの半円の切り欠きマークを左にして左下から右に5番目が5番ピンです。

  3. LEDのアノード(端子の長い方)を680Ωの抵抗を挿んでTWELITEのVCCに接続する。
  4. 抵抗は必ず接続してください。LEDに適切な電流が流れるように調節する電流制限抵抗です。抵抗を省略すると過電流が流れ故障の原因になります。

  5. 電池のマイナスをTWELITEのGNDに接続する。
  6. 電池のプラスをTWELITEのVCCに接続する。
  7. TWELITE DIPは2.3Vから3.6Vで起動・動作します。乾電池を使用する場合は2本必要です。3.6V以上の電圧を加えたり、電池の極性を逆に接続すると故障の原因になりますので注意して接続してください。

LEDが0.5秒間隔で点滅すれば成功です。

アプリの編集

以下の手順でactを編集し、書換えることができます。例えば、点滅間隔を1秒毎に変更してみましょう。

  1. 任意のテキストエディタでMWSTAGE → MWSDK → Act_samples → act1 → act1.cppを開き、編集した後に保存する。
  2. メニューから「アプリの書換」>「actビルド&書換」>「act1」を選択する。
act 2

act1ではdelayを使用して点滅時間を設定しましたが、act2はTimerを使用する例です。以下はact2フォルダにあるソースプログラムact2.cppです。

TWELITE STAGE APPのメニューから「アプリの書換」>「actビルド&書換」>「act2」を選択してアプリの書き換えをしてください。

#include <TWELITE>

const uint8_t PIN_DO1 = 18;
int iLedCounter = 0;
 
/*** the setup procedure (called on boot) */
void setup() {
    pinMode(PIN_DO1, OUTPUT);
    digitalWrite(PIN_DO1, LOW); // TURN DO1 ON
 
    Timer0.begin(10); // 10Hz Timer
 
    Serial << "--- act2 (using a timer) ---" << crlf;
}
 
/*** loop procedure (called every event) */
void loop() {
    if (Timer0.available()) {
        if (iLedCounter == 0) {
            digitalWrite(PIN_DO1, HIGH);
            iLedCounter = 1;
        } else {
            digitalWrite(PIN_DO1, LOW);
            iLedCounter = 0;
        }
    }
}

delayを使用した場合は設定した時間が経過するまで次の処理を行うことはできません。Timerを使用すると次の処理を継続し、タイマー割り込みが来た時のみに実行されます。

配線

配線はact1と同じです。

act 3

act3は2つのTimerで2つのLEDを点滅させる例です。以下はact3フォルダにあるソースプログラムact3.cppです。

TWELITE STAGE APPのメニューから「アプリの書換」>「actビルド&書換」>「act3」を選択してアプリの書き換えをしてください。

#include <TWELITE>

const uint8_t PIN_DO1 = 18;
const uint8_t PIN_DO2 = 19;
int iLedCounter1 = 0;
int iLedCounter2 = 0;
 
/*** the setup procedure (called on boot) */
void setup() {
    pinMode(PIN_DO1, OUTPUT);
    digitalWrite(PIN_DO1, LOW); // TURN DO1 ON
 
    pinMode(PIN_DO2, OUTPUT);
    digitalWrite(PIN_DO2, LOW); // TURN DO2 ON
 
    Timer0.setup();
    Timer1.setup();
     
    Timer0.begin(10); // 10Hz Timer
    Timer1.begin(5);  // 5Hz Timer
     
    Serial << "--- act3 (using 2 timers) ---" << crlf;
}
 
/*** loop procedure (called every event) */
void loop() {
    if (Timer0.available()) {
        if (iLedCounter1 == 0) {
            digitalWrite(PIN_DO1, HIGH);
            iLedCounter1 = 1;
        } else {
            digitalWrite(PIN_DO1, LOW);
            iLedCounter1 = 0;
        }
    }
 
    if (Timer1.available()) {
        if (iLedCounter2 == 0) {
            digitalWrite(PIN_DO2, HIGH);
            iLedCounter2 = 1;
        } else {
            digitalWrite(PIN_DO2, LOW);
            iLedCounter2 = 0;
        }
    }
}

2つのTimerを使うことで2つのLEDの点滅周期をそれぞれ設定できます。

配線

アプリの書き換えが終わったら、以下のように配線してください。

blinking2
act 4

次にTWELITE DIPに接続されたスイッチを押した時にLEDを点灯させるactを動作させてみましょう。以下はact4フォルダにあるソースプログラムact4.cppです。

TWELITE STAGE APPのメニューから「アプリの書換」>「actビルド&書換」>「act4」を選択してアプリの書き換えをしてください。

#include <TWELITE>

const uint8_t PIN_LED = 18;
const uint8_t PIN_BUTTON = 12;

void setup() {
    pinMode(PIN_LED, OUTPUT);
    pinMode(PIN_BUTTON, INPUT_PULLUP); 

    Buttons.setup(5);
    Buttons.begin(1UL << PIN_BUTTON, 5, 10);

    Serial << "--- act4 (button&LED) ---" << crlf;
}

/*** loop procedure (called every event) */
void loop() {
    if (Buttons.available()) {
        uint32_t bm, cm;
        Buttons.read(bm, cm);

        if (bm & (1UL << 12)) {
            digitalWrite(PIN_LED, HIGH);
            Serial << "Button Released!" << crlf;
        } else {
            digitalWrite(PIN_LED, LOW);
            Serial << "Button Pressed!" << crlf;
        }
    }
}

配線

アプリの書き換えが終わったら、以下のように配線してください。

first-act

スイッチを押した時にLEDが点灯すれば成功です。

応用1(LEDの接続ピンを変更)

LEDの接続をDO1(デジタル出力1)からDO2(デジタル出力2)に変更する場合は以下を書き換えます。18を19に変更してください。

const uint8_t PIN_LED = 18;

それぞれのデジタル入力ピンは以下の番号に割り当てられています。

DO1 18
DO2 19
DO3 4
DO4 9

応用2(スイッチの接続ピンを変更)

スイッチの接続をDI1(デジタル入力1)からDI2(デジタル入力2)に変更する場合は以下を書き換えます。12を13に変更してください。

const uint8_t PIN_BUTTON = 12;
if (bm & (1UL << 12)) {

それぞれのデジタル入力ピンは以下の番号に割り当てられています。

DI1 12
DI2 13
DI3 11
DI4 16

act 4の解説

setup()

void setup() はTWELITE無線モジュールに電源が入ったときに一度だけ呼び出される初期化関数です。setup() 関数内では、入出力ピンの初期化と、ボタン入力判定 Buttons の初期化を行っています。

pinMode(PIN_LED, OUTPUT); // 出力
pinMode(PIN_BUTTON, INPUT_PULLUP); // 入力 

pinMode() はデジタル入出力ピンの設定を行います。

Buttons.setup(5);
Buttons.begin(1UL << PIN_BUTTON, 5, 10);

Buttons は、メカボタンの押下時に接触・非接触を繰り返すチャタリングという現象を緩和するため、連続で同じ値が読み出せたときに変化を検出する機能を持っています。上記の設定では10msおきに5回連続で同じ値が出たときに値が確定します。

Serial << "--- First Guide1 ---" << mwx::crlf;

Serial はシリアルポートに文字列を出力します。出力は C++ の標準出力のように << 演算子を用います。 mwx::crlf は改行文字を出力します。

loop()

void loop() は、処理が終わるごとに呼び出される無限ループです。このループ中に処理を記述します。

if (Buttons.available()) {

Buttons.available() は、ボタンの値の変化を検出したときにtrueを返します。available になれば Buttons.read() で設定値を読み出します。

Buttons.read(bm, cm);

ここでは bm に現在のボタンの状態が格納されます。PIN_BUTTON は 12 ですから、ビット12 の値が1なら HIGH (電源電圧レベルでボタンは押されていない)、0なら LOW (GNDレベル、つまりボタンは押された)ことを示します。

if (bm & (1UL << 12)) {
    digitalWrite(PIN_LED, HIGH);
    Serial << "Button Released!" << mwx::crlf;
} else {
    digitalWrite(PIN_LED, LOW);
    Serial << "Button Pressed!" << mwx::crlf;
}

ここではボタンが押されれば PIN_LED を LOW にしています。

act 5

次に無線でLチカをしてみましょう。BRD_APPTWELITEフォルダにあるソースプログラム BRD_APPTWELITE.cppを使用します。

TWELITE STAGE APPのメニューから「アプリの書換」>「actビルド&書換」>「BRD_APPTWELITE」を選択してアプリの書き換えをしてください。

解説はMWXライブラリ マニュアルのBRD_APPTWELITEをご覧ください。

サンプルアクト

各種サンプルを用意しております。

解説はMWXライブラリ マニュアルのサンプルアクトをご覧ください。

無線センサーを作る

TWELITE STAGE APPのActエクストラに、オープンソースライブラリ(センサー手続きなど)を利用したサンプルが入っています。

I2Cセンサー

I2Cとは2線式のシリアル通信バスの規格でアイ・スクエアード・シーまたはアイ・ツー・シーと読みます。I2C規格に対応した数々のデバイスをTWELITEに接続することができます。

I2CはSCL(クロック信号)とSDA(データ)の2本の線を使用したデータバスです。同一バス上に異なったアドレスを持つデバイスを複数接続できます。各線はプルアップ抵抗が必要です。

以下が配線例です。

blinking

TWELITEにセンサーを配線し、actを実行することで無線センサーを作成することができます。無線センサーからのデーターを親機に送信できます。

メニューから[アプリ書換] → [Actエクストラ]で一覧リストから希望のActを選択

所望のデバイスに対応したactがない場合は以下のactを雛形にしてactを作成してください。

他のオープンソースを参考にするかデバイスのデータシートを見ながらデバイスを制御するコード部分を書き換えます。

メニューから[アプリ書換] → [Actビルド&書換]でBRD_I2C_TEMPHUMIDを選択

親機・中継機アプリ(App_Wings)で受信または中継をすることができます。

資料

act アクト の記述方法の詳細、その他のサンプルソースプログラムの解説はMWX ライブラリ マニュアルをご覧ください。

評価開発環境

STAGE
STAGE
STAGE APP
STAGE APP
interactive
アプリ設定
アプリ書換
アプリ書換
プログラミング
プログラミング
ソフトウエア
ソフトウエア

モノワイヤレス製品

TWELITE
TWELITE
DIP
DIP
UART
UART
CUE
CUE
ARIA
ARIA
PAL
PAL
STICK
STICK
spot
SPOT
R3
R3
STARTER KIT
STARTER KIT
アンテナ
アンテナ
製品一覧
製品一覧

モノをつなぐ無線

モノをつなぐ無線
モノの無線
導入事例
導入事例
選び方
選び方
小型
小型
省電力
省電力
多数接続
多数接続
コントロール
コントロール
モニタリング
モニタリング
ソフトウエア
ソフトウエア
親機
親機
中継機
中継機
子機
子機
始め方
始め方
技術情報
技術情報
販売店
販売店

評価開発環境

STAGE
STAGE
STAGE APP
STAGE APP
TWELITE APPS
TWELITE APPS
interactive
アプリ設定
アプリ書換
アプリ書換
プログラミング
プログラミング