セクションの複数ページをまとめています。 印刷またはPDF形式で保存...

もとのページに戻る

2024-05-08 現在

Arduino UNO R4 に使用する

Arduino UNO R4 シリーズに使用する方法
    Arduino UNO R4 シリーズへ TWELITE UART や TWELITE DIP などの TWELITE 親機を接続し、MWings ライブラリを使って子機との通信を行う方法を案内します。

    ハードウェアの準備

    TWELITE の準備

    TWELITE UART や TWELITE DIP といった製品へ親機・中継機アプリ(App_Wings)を書き込みます。

    書き込みには TWELITE STAGE APP を使用します。

    Arduino UNO R4 との接続

    TWELITE のピンのうち、下記を使用します。

    • VCC(3.3V へ接続)
    • GND(GND へ接続)
    • TXD(D0/RX へ接続)
    • RXD(D1/TX へ接続)
    • RST(D11 など任意のポートへ接続)
    • PRG(D12 など任意のポートへ接続)

    ライブラリ付属のサンプルスケッチに準じた接続例を以下に示します。

    Arduino との接続例

    Arduino との接続例

    ソフトウェアの準備

    ライブラリの導入

    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).
     */

    以下は 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
    
    ポート役割備考
    D11TWELITEのRST制御上記の接続例参照
    D12TWELITEの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 シリアル変換機能を担っています。 そのため、シリアルポートの初期化が終了する前は通信を行えません。

    関連情報