# PIO Remote

Your devices are always with you!

PIO Remote allows you to work remotely with devices from Anywhere In The World. No matter where are you now! Run a small and cross-platform PIO Remote Agent on a remote machine and you are able to list active devices (wireless + wired), to upload firmware (program), to process remote unit tests, or to start remote debugging session via Remote Serial Port Monitor.

Using PIO Remote you can share your devices with colleagues across your organization or friends. In combination with Cloud IDE, you can create awesome things at any time when inspiration comes to you.

You should have PIO Account to work with PIO Remote. A registration is FREE.

Contents

- PIO Remote

  - Features

  - Use Cases

  - Technology

  - Installation

  - Quick Start

  - CLI Guide

## Features

- Remote Device Manager

- Remote Serial Port Monitor

- Remote Firmware Updates

- PIO Remote Share

- Continuous Deployment

- Continuous Delivery

- Remote Unit Testing

## Use Cases

Cloud IDE

  Program your devices from anywhere in the world using the most popular Cloud IDE. You do not need to install any extra software, no need to have static IP or open network ports. Everything works out of the box.

Devices behind card sized PC

  Work with your favorite development environment and program devices connected to card-sized PC (Raspberry Pi, Cubie Board, etc.). You do not need to open SSH ports, install any extra Linux packages, toolchains.

Remote Unit Testing

  Instruct any of Continuous Integration services to run remote tests on a physical device. See the documentation for Remote Test Runner.

  How does it work?

  - You commit new changes to your source code repository

  - Continuous Integration service deploys unit tests to a remote agent

  - PIO Unit Testing engine runs tests on a physical device, process them, and send results

  - Continuous Integration service prints results in human readable format

  - If one test fails, current CI build will fail too.

Board Farm

  A similar concept as described in “Remote Unit Testing” above. Let’s imagine that you need to test some logic on the unlimited number of target devices. Very often it can be the same hardware prototype but with different factory revisions.

  You connect these devices via USB hub to PC and instruct PIO Remote to process your test on ALL targets connected to a specific agent. See documentation below.

Remote Serial Monitor

  Sometimes you don’t have physical access to a target device but you need to read data from some serial port. PIO Remote allows you to connect to a remote agent and list connected devices with their serial ports. See platformio remote device monitor command for details.

## Technology

PIO Remote is an own PlatformIO technology for remote solutions without external dependencies to operating system or its software based on client-server architecture. The Server component (PlatformIO Cloud) plays a role of coupling link between PIO Remote Agent and Client (PlatformIO Remote CLI, Cloud IDE, Continuous Integration, SDKs, etc.). When you start PIO Remote Agent, it connects over the Internet with PlatformIO Cloud and listen for the actions/commands which you can send in Client role from anywhere in the world.

PIO Remote is multi-agents and multi-clients system. A single agent can be shared with multiple clients, where different clients can use the same agent. This approach allows one to work with distributed hardware located in the different places, networks, etc.

This technology allows one to work with remote devices in generic form as you do that with local devices using PlatformIO ecosystem. The only one difference is a prefix “remote” before each generic PlatformIO command. For example, listing of local and remote devices will look like platformio device list and platformio remote device list.

## Installation

PIO Remote is built into PlatformIO IDE. Please open PlatformIO IDE Terminal and run `pio remote --help` command for usage (see PlatformIO Remote CLI).

If you do not have PlatformIO IDE, or use Cloud IDE or a card-sized PC (Raspberry Pi, BeagleBoard, etc.), please install PlatformIO Core (CLI).

## Quick Start

1. Start PIO Remote Agent using platformio remote agent start command on a remote machine where devices are connected physically or are accessible via network. PIO Remote Agent works on Windows, macOS, Linux and Linux ARMv6+. It means that you can use desktop machine, laptop or credit card sized PC (Raspberry Pi, BeagleBoard, etc).

   You can share own devices/hardware with friends, team or other developers using `platformio remote agent start --share` option.

2. Using host machine (PlatformIO Remote CLI, Cloud IDE Terminal in a browser, SDKs, etc.), please authorize via platformio account login command with the same credentials that you used on the previous step. Now, you can use PlatformIO Remote CLI commands to work with remote machine and its devices.

   You don’t need to have networking or other access to remote machine where PIO Remote Agent is started.

   If you use PIO Remote in pair with Continuous Integration or want automatically authorize, please set `PLATFORMIO_AUTH_TOKEN` system environment variable instead of using platformio account login command.

Note

In case with Cloud IDE, your browser with Cloud IDE’s VM is a “host machine”. The machine where devices are connected physically (your real PC) is called “remote machine” in this case. You should run PIO Remote Agent here (not in Cloud IDE’s Terminal).

Note

Please use local IP as “upload port” when device is not connected directly to a remote machine where PIO Remote Agent is started but supports natively Over-the-Air (OTA) updates. For example, Espressif 8266 and Over-the-Air (OTA) update. In this case, the final command for remote OTA update will look as `platformio remote run -t upload --upload-port 192.168.0.255` or `platformio remote run -t upload --upload-port myesp8266.local`.

## CLI Guide

- PlatformIO Remote CLI
  - PIO Remote Agent
    - platformio remote agent list
    - platformio remote agent start
  - platformio remote device
    - platformio remote device list
    - platformio remote device monitor
  - platformio remote run
    - Usage
    - Description
    - Options
    - Example
  - platformio remote test
    - Usage
    - Description
    - Options
    - Examples
  - platformio remote update
    - Usage
    - Description
    - Options
    - Examples