This is the multi-page printable view of this section. Click here to print...

Return to the regular view of this page

As of 2025-07-24

Retrieve Data from Queue App

v1.1.3
    This is an explanation of the sample sketch monitor_spot_app_cue for retrieving and displaying data from the Queue App (App_CUE).

    Location of the Sample Sketch

    If you have installed the MWings library, you can open the sketch from Arduino IDE via File -> Examples -> MWings -> TWELITE SPOT -> Receive -> monitor_spot_app_cue.

    Example of the location display

    Example of the location display

    Sketch

    Below is the main source code.

    // Monitor example for TWELITE SPOT: Receive data from App_CUE (CUE Mode)
    
    #include <Arduino.h>
    #include "MWings.h"
    
    const int RST_PIN = 5;
    const int PRG_PIN = 4;
    const int LED_PIN = 18;
    
    const uint8_t TWE_CHANNEL = 18;
    const uint32_t TWE_APP_ID = 0x67720102;
    
    void printAccelEvent(const uint8_t event);
    void printMagnetState(const uint8_t state, const bool changed);
    
    void setup()
    {
        // Initialize serial ports
        Serial.begin(115200);
        Serial.println("Monitor example for TWELITE SPOT: App_CUE (CUE Mode)");
        Serial2.begin(115200);
    
        // Initialize TWELITE
        Twelite.begin(Serial2,
                      LED_PIN, RST_PIN, PRG_PIN,
                      TWE_CHANNEL, TWE_APP_ID);
    
        // Attach an event handler to process packets from App_CUE
        Twelite.on([](const ParsedAppCuePacket& packet) {
            Serial.println("");
            Serial.print("Packet Number:     #");
            Serial.println(packet.u16SequenceNumber, DEC);
            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("Accel Event:       ");
            printAccelEvent(packet.u8AccelEvent);
            Serial.print("Accel X Axis [0]:  ");
            Serial.print(packet.i16SamplesX[0], DEC); Serial.println(" mG");
            Serial.print("Accel Y Axis [0]:  ");
            Serial.print(packet.i16SamplesY[0], DEC); Serial.println(" mG");
            Serial.print("Accel Z Axis [0]:  ");
            Serial.print(packet.i16SamplesZ[0], DEC); Serial.println(" mG");
            Serial.print("Magnet State:      ");
            printMagnetState(packet.u8MagnetState, packet.bMagnetStateChanged);
        });
    }
    
    void loop()
    {
        // Update TWELITE
        Twelite.update();
    }
    
    void printAccelEvent(const uint8_t event)
    {
        switch (event) {
        case 0x01: { Serial.print("Dice (1)"); break; }
        case 0x02: { Serial.print("Dice (2)"); break; }
        case 0x03: { Serial.print("Dice (3)"); break; }
        case 0x04: { Serial.print("Dice (4)"); break; }
        case 0x05: { Serial.print("Dice (5)"); break; }
        case 0x06: { Serial.print("Dice (6)"); break; }
        case 0x08: { Serial.print("Shake"); break; }
        case 0x10: { Serial.print("Move"); break; }
        default: break;
        }
        Serial.println("");
    }
    
    void printMagnetState(const uint8_t state, const bool changed)
    {
        if (changed) {
            switch (state) {
            case 0x0: { Serial.print("Leaving or Not found"); break; }
            case 0x1: { Serial.print("N-pole is getting closer"); break; }
            case 0x2: { Serial.print("S-pole is getting closer"); break; }
            default: break;
            }
        } else {
            switch (state) {
            case 0x0: { Serial.print("Not found"); break; }
            case 0x1: { Serial.print("N-pole is close"); break; }
            case 0x2: { Serial.print("S-pole is close"); break; }
            default: break;
            }
            Serial.print(" (Periodic packet)");
        }
        Serial.println("");
    }

    Including the Library

    Line 4 includes the MWings library.

    #include "MWings.h"

    Defining Pin Numbers

    Lines 6-8 define the pin numbers.

    const int RST_PIN = 5;
    const int PRG_PIN = 4;
    const int LED_PIN = 18;
    NameDescription
    RST_PINPin number connected to the RST pin of TWELITE
    PRG_PINPin number connected to the PRG pin of TWELITE
    LED_PINPin number connected to the ESP32 onboard LED

    Defining TWELITE Settings

    Lines 10-11 define the settings applied to the TWELITE parent device mounted on the TWELITE SPOT.

    const uint8_t TWE_CHANNEL = 18;
    const uint32_t TWE_APP_ID = 0x67720102;
    NameDescription
    TWE_CHANNELTWELITE frequency channel
    TWE_APP_IDTWELITE application ID

    Serial Port Setup

    Lines 19-21 initialize the serial ports used and output a startup message to the serial monitor.

        Serial.begin(115200);
        Serial.println("Monitor example for TWELITE SPOT: App_CUE (CUE Mode)");
        Serial2.begin(115200);

    Serial is used for communication with the Arduino IDE serial monitor. The baud rate is set to 115200 bps to match the serial monitor settings.

    On the other hand, Serial2 is used for communication with the TWELITE parent device mounted on the TWELITE SPOT. This is also set to 115200 bps to match the initial settings of the TWELITE parent device.

    TWELITE Configuration

    Lines 24-26 call Twelite.begin() to configure and start the TWELITE parent device mounted on the TWELITE SPOT.

        Twelite.begin(Serial2,
                          LED_PIN, RST_PIN, PRG_PIN,
                          TWE_CHANNEL, TWE_APP_ID);

    Registering Packet Reception Event

    Lines 29-49 call Twelite.on() to register the processing to be performed on the received data.

    Here, the contents of the received packet are output to the serial monitor.

        Twelite.on([](const ParsedAppCuePacket& packet) {
            Serial.println("");
            Serial.print("Packet Number:     #");
            Serial.println(packet.u16SequenceNumber, DEC);
            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("Accel Event:       ");
            printAccelEvent(packet.u8AccelEvent);
            Serial.print("Accel X Axis [0]:  ");
            Serial.print(packet.i16SamplesX[0], DEC); Serial.println(" mG");
            Serial.print("Accel Y Axis [0]:  ");
            Serial.print(packet.i16SamplesY[0], DEC); Serial.println(" mG");
            Serial.print("Accel Z Axis [0]:  ");
            Serial.print(packet.i16SamplesZ[0], DEC); Serial.println(" mG");
            Serial.print("Magnet State:      ");
            printMagnetState(packet.u8MagnetState, packet.bMagnetStateChanged);
        });

    The above event is called only when a packet is received from the Queue App (TWELITE CUE Mode).

    The contents of the received packet are stored in the argument packet of type ParsedAppCuePacket.

    Message Contents

    MessageDescription
    Packet NumberPacket sequence number
    Source Logical IDLogical device ID of the sending TWELITE
    LQIWireless communication quality (0-255)
    Supply VoltagePower supply voltage (mV)
    Accel EventAccelerometer sensor status
    Accel X AxisX-axis acceleration (1st sample)
    Accel Y AxisY-axis acceleration (1st sample)
    Accel Z AxisZ-axis acceleration (1st sample)
    Magnet StateMagnetic sensor status
    Accelerometer Sensor Status

    The accelerometer sensor status output is as follows:

    • Dice (1) - Dice (6) Detected dice face (orientation).
    • Shake Detected shaking movement.
    • Move Detected slow movement.
    Magnetic Sensor Status

    The magnetic sensor status output is as follows:

    • S-pole is getting closer Newly detected S-pole of the magnet.
    • N-pole is getting closer Newly detected N-pole of the magnet.
    • Leaving or Not found Magnet was not detected.
    • S-pole is close (Periodic packet) Magnet’s S-pole is detected.
    • N-pole is close (Periodic packet) Magnet’s N-pole is detected.
    • Not found (Periodic packet) Magnet has not been continuously detected (periodic packet).

    Updating TWELITE Data

    Line 55 calls Twelite.update().

        Twelite.update();