Arduino remote interface
Info
This tutorial is for wirelessly connecting to RoboBoard from external ESP32 board. Similar as Totem App does.
For RoboBoard programming with Arduino read RoboBoard section.
void setup() {
Totem.BLE.begin(); // Initialize Bluetooth Low Energy interface
}
Wireless interface to control X3 and X4 boards over BLE connection. It contains features like: finding Totem robots, connecting, sending and receiving commands. Totem boards are able to represent themselves as "robot", providing: name, color, model (type of robot). This information is available before BLE connection is established. Same information and functionality is available when using Totem App.
Install library
This functionality requires Totem Arduino Library. Install it before using in a project.
- Select
Sketch
→Include Library
→Manage libraries..
- In search field type in
totem
. - Click Install and wait for it to complete.
- Close Library Manager window.
Code examples
Connect and control motor (click to expand)
// Include Totem Library
#include <Totem.h>
// Declare communication with any connected Totem module
TotemModule module(0);
// Arduino initialization function
void setup() {
Serial.begin(115200);
Totem.BLE.begin(); // Start Bluetooth Low Energy interface
Serial.println("Searching for Totem robot...");
// Wait until connected to first found Totem robot
TotemRobot robot = Totem.BLE.findRobot();
// At this point further execution of setup() is blocked
// until library connects to the robot
Serial.print("Connected to: ");
Serial.println(robot.getName());
// Continue to loop()
}
// Arduino infinite loop function
void loop() {
// Control motor of connected robot
module.write("motorA", 100); // Set motor A channel to 100% power
delay(1000); // Wait 1 second
module.write("motorA", 0); // Stop motor on A channel
delay(1000); // Wait 1 second
}
Additional classes
- ModuleData - Object containing data received from module.
- MotorDriver - Object helping to control DC and Servo motors.
- TotemModule - Instance of Totem module, allowing to send and receive commands.
- TotemRobot - Instance of connection to a wireless or remote access capable Totem module.
Functions
Totem.BLE.begin()
- Initialize Bluetooth Low Energy interface. Must be executed inside setup() function before using library.
void setup() {
Totem.BLE.begin(); // Initialize Bluetooth Low Energy interface
}
(TotemRobot
) Totem.BLE.findRobot()
(TotemRobot
) Totem.BLE.findRobot(RobotReceiver
)
- Start searching for available Totem robots over Bluetooth Low Energy. This function will block until connection to any robot is established.
On successful connection find process will be stopped. Additionally it can be stopped with call to stopFind().
RobotReceiver
is a user defined function to get all discovered robots.
Format:void onFoundRobot(TotemRobot robot)
. Robot information can be accessed troughTotemRobot
parameter. By callingrobot .
connect()
user can decide which robot to select.
Parameter:
()
- automatically connect to first discovered Totem robot.
RobotReceiver
- discovered robot connect functiononFoundRobot
.
Returns:TotemRobot
.
void onFoundRobot(TotemRobot robot) {
// Totem robot discovered
robot.connect();
}
void function() {
Totem.BLE.findRobot(); // Automatically connect to first discovered Totem robot
Totem.BLE.findRobot(onFoundRobot); // List result in onFoundRobot before connecting to Totem robot
}
Totem.BLE.findRobotNoBlock()
Totem.BLE.findRobotNoBlock(RobotReceiver
)
- Start searching for available Totem robots over Bluetooth Low Energy. This function does not block main program execution. All connection process will be done in background.
After connection is established, this process will be stopped. Additionally it can be stopped with call to stopFind().
RobotReceiver
is a user defined function to get all discovered robots.
Format:void onFoundRobot(TotemRobot robot)
. Robot information can be accessed troughTotemRobot
parameter. By callingrobot .
connect()
user can decide which robot to select.
Parameter:
()
- automatically connect to first discovered Totem robot.
RobotReceiver
- discovered robot connect functiononFoundRobot
.
void onFoundRobot(TotemRobot robot) {
// Totem robot discovered
robot.connect();
}
void function() {
Totem.BLE.findRobotNoBlock(); // Automatically connect to first discovered Totem robot
Totem.BLE.findRobotNoBlock(onFoundRobot); // List result in onFoundRobot before connecting to Totem robot
}
(bool
) Totem.BLE.isFinding()
- Check if findRobot() or findRobotNoBlock() was called and process is active.
Returns: discovery process is active [true
:false
].
void function() {
if (Totem.BLE.isFinding())
Serial.println("Robot find is active");
else
Serial.println("Robot find is inactive);
}
Totem.BLE.stopFind()
- Stop searching for robot and unblock findRobot(). Only used when required to stop this process manually. After connection, the search process is stopped automatically and calling this function is not required.
void function() {
Totem.BLE.stopFind(); // Stop searching for robot over Bluetooth Low Energy
}
Totem.BLE.attachOnConnect(RobotReceiver
)
- Register function that will be called when findRobot() process connects to a robot. This is handy when using non-blocking find process and we don't know when connection is established.
RobotReceiver
is a user defined function to connected robot event.
Format:void onConnectedRobot(TotemRobot robot)
. Robot information can be accessed troughTotemRobot
parameter.
Parameter:RobotReceiver
- connected robot event functiononConnectedRobot
.
void onConnectedRobot(TotemRobot robot) {
// findRobotNoBlock connected to robot in background and ended find procedure
Serial.print("Connected robot: ");
Serial.println(robot.getName());
}
void function() {
Totem.BLE.findRobotNoBlock(); // Automatically connect to first discovered Totem robot
// Code execution continues with active find procedure
}
(int
) Totem.BLE.getConnectedCount()
- Count of currently connected Totem robots.
Returns: connected robots count [0
:20
]
void function() {
Serial.print("Currently connected robots count: ");
Serial.println(Totem.BLE.getConnectedCount());
}
(TotemRobot
) Totem.BLE.getConnectedLast()
- Get last connected robot.
If no connection was made before, this function returns a dummy object that isn't connected.
Returns:TotemRobot
.
void function() {
TotemRobot robot = Totem.BLE.getConnectedLast();
Serial.print("Is last connected robot still connected: ");
Serial.println(robot.isConnected() ? "Yes" : "No");
}
(TotemRobot[]
) Totem.BLE.getConnectedList()
- Get list of connected robots.
Returns:TotemRobot[]
.
void function() {
for (auto robot : getConnectedList()) {
Serial.print("Connected robot: ");
Serial.println(robot.getName());
}
}