Arduino UNO R4 に使用する
ハードウェアの準備
TWELITE の準備
TWELITE UART や TWELITE DIP といった製品へ親機・中継機アプリ(App_Wings)を書き込みます。
書き込みには TWELITE STAGE APP を使用します。
2023年12月現在、シリアル通信によるアプリケーションID等の設定に対応した最新版の App_Wings(v1.3.0+)は TWELITE STAGE SDK に同梱しておりません(次期リリースに追加収録の予定です)。
下記をダウンロードしてから、書き込んでください。
- TWELITE BLUE 用:App_Wings_BLUE_L1305_V1-3-2.bin
- TWELITE RED 用:App_Wings_RED_L1305_V1-3-2.bin
Arduino UNO R4 との接続
TWELITE のピンのうち、下記を使用します。
- VCC(3.3V へ接続)
- GND(GND へ接続)
- TXD(D0/RX へ接続)
- RXD(D1/TX へ接続)
- RST(D11 など任意のポートへ接続)
- PRG(D12 など任意のポートへ接続)
ライブラリ付属のサンプルスケッチに準じた接続例を以下に示します。
ソフトウェアの準備
ライブラリの導入
Arduino ライブラリマネージャからインストールできます。
TWELITE SPOT マニュアル:MWings ライブラリの導入 を参照してください。
サンプルスケッチの動作確認
ライブラリには、各 TWELITE と通信を行うための簡単なサンプルスケッチを同梱しています。
例えば、超簡単!標準アプリ(App_Twelite)のデータを受信する場合は、メニューバーから以下のサンプルスケッチを開きます。
ファイル > スケッチ例 > MWings > Arduino UNO R4 > Receive > monitor_uno_r4_app_twelite
monitor_uno_r4_app_twelite.ino
// Monitor example for TWELITE with Arduino UNO R4: Receive data from App_Twelite
#include <Arduino.h>
#include "MWings.h"
const int RST_PIN = D11;
const int PRG_PIN = D12;
const int LED_PIN = D13; // Use on-board LED as indicator
const uint8_t TWE_CHANNEL = 18;
const uint32_t TWE_APP_ID = 0x67720102;
void setup()
{
// Initialize serial ports
while (!Serial && millis() < 5000); // Wait for internal USB-UART
Serial.begin(115200);
Serial.println("Monitor example for TWELITE with Arduino UNO R4: App_Twelite");
Serial1.begin(115200);
// Initialize TWELITE
if (Twelite.begin(Serial1,
LED_PIN, RST_PIN, PRG_PIN,
TWE_CHANNEL, TWE_APP_ID)) {
Serial.println("Successfully initialized TWELITE");
} else {
Serial.println("Failed to initialize TWELITE");
}
// Attach an event handler to process packets from App_Twelite
Twelite.on([](const ParsedAppTwelitePacket& packet) {
Serial.println("");
Serial.print("Packet Timestamp: ");
Serial.print(packet.u16SequenceNumber / 64.0f, 1); Serial.println(" sec");
Serial.print("Source Logical ID: 0x");
Serial.println(packet.u8SourceLogicalId, HEX);
Serial.print("LQI: ");
Serial.println(packet.u8Lqi, DEC);
Serial.print("Supply Voltage: ");
Serial.print(packet.u16SupplyVoltage, DEC); Serial.println(" mV");
Serial.print("Digital Input: ");
Serial.print(packet.bDiState[0] ? " DI1:Lo" : " DI1:Hi");
Serial.print(packet.bDiState[1] ? " DI2:Lo" : " DI2:Hi");
Serial.print(packet.bDiState[2] ? " DI3:Lo" : " DI3:Hi");
Serial.println(packet.bDiState[3] ? " DI4:Lo" : " DI4:Hi");
Serial.print("Analog Input: ");
Serial.print(" AI1:"); Serial.print(packet.u16AiVoltage[0]); Serial.print(" mV");
Serial.print(" AI2:"); Serial.print(packet.u16AiVoltage[1]); Serial.print(" mV");
Serial.print(" AI3:"); Serial.print(packet.u16AiVoltage[2]); Serial.print(" mV");
Serial.print(" AI4:"); Serial.print(packet.u16AiVoltage[3]); Serial.println(" mV");
});
}
void loop()
{
// Update TWELITE
Twelite.update();
}
/*
* Copyright (C) 2023 Mono Wireless Inc. All Rights Reserved.
* Released under MW-OSSLA-1J,1E (MONO WIRELESS OPEN SOURCE SOFTWARE LICENSE AGREEMENT).
*/
スケッチの詳細については、TWELITE SPOT 向けのスケッチ解説をご覧ください。大半の内容は共通しています。
以下は Arduino UNO R4 に固有の部分です。
ポート設定
6-8行目では、UART 関連を除く Arduino のポートを設定しています。
const int RST_PIN = D11;
const int PRG_PIN = D12;
const int LED_PIN = D13; // Use on-board LED as indicator
ポート | 役割 | 備考 |
---|---|---|
D11 | TWELITEのRST制御 | 上記の接続例参照 |
D12 | TWELITEのPRG制御 | 上記の接続例参照 |
D13 | 通信インジケータLED制御 | 内蔵LEDを使用 |
USBシリアルポートの初期化待ち
16行目では、USB シリアルポート(Serial
)の初期化を待っています。
while (!Serial && millis() < 5000); // Wait for internal USB-UART
Arduino UNO R4 は、UNO R3 のように USB シリアル変換 IC を搭載しておらず、本体の ARM CPU が USB シリアル変換機能を担っています。 そのため、シリアルポートの初期化が終了する前は通信を行えません。
関連情報
- MWings ライブラリ API リファレンス
- TWELITE SPOT スタートガイドのスケッチ解説(スケッチ内容の大半は共通しています)
- TWELITE SPOT マニュアルの一部のスケッチ解説(スケッチ内容の大半は共通しています)