Arduino SDK
Complete guide to the RoboOS Arduino SDK for ESP32, ESP8266, and Arduino with Ethernet shield.
Arduino SDK
The RoboOS Arduino SDK enables Arduino-based robots to integrate with the RoboOS ecosystem. It's designed for embedded systems with limited memory and processing power, supporting ESP32, ESP8266, and Arduino with Ethernet shield.
This SDK provides essential RoboOS capabilities optimized for resource-constrained environments, including wallet management, task marketplace integration, and basic payment channel support.
Hardware Requirements
Supported Platforms: - ESP32 or ESP8266 (with WiFi built-in) - Arduino with Ethernet Shield - Minimum 64KB RAM (128KB+ recommended)
Software Requirements: - Arduino IDE 1.8.13 or newer - Required libraries: - ArduinoJson (v6.x or v7.x) - WiFi (for ESP32/ESP8266) - Ethernet (for Arduino with Ethernet shield)
Installation
Method 1: Arduino Library Manager (Recommended)
1. Open Arduino IDE 2. Go to Sketch → Include Library → Manage Libraries 3. Search for "RoboOS Arduino SDK" 4. Click Install
Method 2: Manual Installation
1. Download or clone the repository 2. Copy the `roboos-arduino` folder to your Arduino libraries directory: - Windows: `Documents/Arduino/libraries/` - macOS: `~/Documents/Arduino/libraries/` - Linux: `~/Arduino/libraries/` 3. Restart Arduino IDE
Install Dependencies:
Install ArduinoJson through Library Manager or from: https://github.com/bblanchon/ArduinoJson
Quick Start
Basic example for ESP32/ESP8266:
#include <RoboOS.h>
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
using namespace RoboOS;
RobotSDK* sdk;
RobotWallet* wallet;
WiFiClient wifiClient;
HttpClient* httpClient;
BaseRobot* robot;
void setup() {
Serial.begin(115200);
// Connect WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
// Initialize SDK
SDKOptions options;
options.network = TESTNET;
options.marketplaceEndpoint = "https://marketplace-testnet.theroboos.com";
sdk = new RobotSDK(options);
sdk->begin();
httpClient = new HttpClient(&wifiClient);
wallet = new RobotWallet(sdk->getLogger());
wallet->create();
// Create robot
RoboOSConfig config = sdk->getConfig();
robot = new BaseRobot("robot-001", wallet, config, httpClient, sdk->getLogger());
robot->begin();
robot->connect();
}
void loop() {
// Query and execute tasks
TaskMarketplace* marketplace = robot->getMarketplace();
Task tasks[10];
int taskCount = 0;
TaskQuery query;
query.status = TASK_PENDING;
if (marketplace->queryTasks(query, tasks, 10, taskCount)) {
for (int i = 0; i < taskCount; i++) {
if (robot->canHandleTask(tasks[i])) {
marketplace->acceptTask(tasks[i].taskId);
robot->executeTask(tasks[i]);
}
}
}
delay(30000);
}Forklift Robot Example
Example for a forklift robot:
#include <RoboOS.h>
using namespace RoboOS;
ForkliftRobot* forklift;
void setup() {
// ... WiFi setup ...
// Define forklift capabilities
ForkliftCapabilities caps;
caps.lifting = true;
caps.transport = true;
caps.stacking = true;
caps.maxWeight = 2000.0; // kg
caps.maxHeight = 5.0; // meters
// Create forklift
forklift = new ForkliftRobot(
"forklift-001",
wallet,
config,
httpClient,
logger,
caps
);
forklift->begin();
forklift->connect();
}
void loop() {
// Query material handling tasks
TaskQuery query;
query.type = "material_handling";
Task tasks[10];
int taskCount = 0;
if (forklift->getMarketplace()->queryTasks(query, tasks, 10, taskCount)) {
for (int i = 0; i < taskCount; i++) {
if (forklift->canHandleTask(tasks[i])) {
forklift->getMarketplace()->acceptTask(tasks[i].taskId);
forklift->executeTask(tasks[i]);
}
}
}
delay(60000);
}API Reference
RobotSDK - Main SDK initialization class:
SDKOptions options;
options.network = TESTNET;
options.marketplaceEndpoint = "https://marketplace-testnet.theroboos.com";
RobotSDK sdk(options);
sdk.begin();RobotWallet - Wallet management:
RobotWallet wallet(logger);
wallet.create(); // Create new wallet
wallet.load(walletData); // Load existing wallet
String walletData = wallet.save(); // Save wallet
String publicKey = wallet.getPublicKey();
double balance = wallet.getBalance();TaskMarketplace - Task marketplace client:
TaskMarketplace marketplace(config, httpClient, logger);
marketplace.begin(robotId);
TaskQuery query;
query.type = "delivery";
query.status = TASK_PENDING;
Task tasks[10];
int taskCount = 0;
marketplace.queryTasks(query, tasks, 10, taskCount);
marketplace.acceptTask(taskId);
marketplace.updateTaskStatus(taskId, TASK_COMPLETED);BaseRobot - Base robot class:
BaseRobot robot(robotId, wallet, config, httpClient, logger);
robot.begin();
robot.connect();
if (robot.canHandleTask(task)) {
robot.executeTask(task);
}Robot Types
ForkliftRobot - Material handling robot:
ForkliftCapabilities caps;
caps.lifting = true;
caps.maxWeight = 2000.0;
ForkliftRobot forklift(id, wallet, config, httpClient, logger, caps);AMRRobot - Autonomous Mobile Robot:
AMRCapabilities caps;
caps.navigation = true;
caps.maxPayload = 50.0;
AMRRobot amr(id, wallet, config, httpClient, logger, caps);CleaningRobot - Cleaning robot:
CleaningCapabilities caps;
caps.vacuum = true;
caps.mopping = true;
CleaningRobot cleaner(id, wallet, config, httpClient, logger, caps);Memory Management
For devices with limited memory:
1. Use fixed-size arrays for tasks 2. Limit the number of tasks queried at once 3. Disable logging if not needed:
options.enableLogging = false;4. Use `DynamicJsonDocument` with appropriate size 5. Avoid storing large strings in memory 6. Process tasks one at a time when possible
Troubleshooting
WiFi Connection Failed: - Verify SSID and password are correct - Check WiFi signal strength - For ESP32, ensure WiFi mode is set correctly
HTTP Request Timeout: - Check internet connection - Verify endpoint URL - Increase timeout value:
httpClient->setTimeout(60000); // 60 secondsMemory Issues: - Reduce JSON buffer size - Limit number of tasks queried - Disable logging - Use smaller data structures
Compilation Errors: - Ensure all dependencies are installed - Use latest Arduino IDE version - Check board selection (ESP32/ESP8266/Arduino)