#remote-control #gpio #pwm #engine #command #dank #roblib

app roblib-server

A remote control server for a dank engine

1 unstable release

0.1.0 Aug 5, 2023

#3 in #dank

LGPL-2.1-or-later

150KB
3.5K SLoC

roblib

a remote library for a dank engine.

this repo contains the new roblib server and client library written in rust, as well as bindings to said library for nodejs. the server has two versions: base, that only accepts gpio and (software) pwm commands, and roland, a specialized version for the dank engine.

client libraries in other languages:

server downloads

the cache may be old. to bypass it, open the lates commit and use the links in the comments

View all

base roland
aarch64-unknown-linux-gnu Download Download
aarch64-unknown-linux-musl Download Download
armv7-unknown-linux-gnueabihf Download Download
armv7-unknown-linux-musleabihf Download Download
x86_64-pc-windows-msvc Download Download
x86_64-unknown-linux-gnu Download Download
x86_64-unknown-linux-musl Download Download

server api

Transport Binary Text Port Additional info
TCP Yes No 1110
UDP Yes No 1110
WebSocket Yes Yes 1111 Endpoint: /ws
HTTP POST No Yes 1111 Endpoint: /cmd

Binary format

The binary format is using bincode.

Each transport implements its own wire format that aligns with its advantages.

It isnt't guaranteed to be stable, implementing it outside of here isn't recommended.

Text format

The text format is designed to be simpler.

It consists of an ID (u32), the command prefix, and any additional arguments for that command, separated by a space.

1 command arg1 arg2 ...

Available commands and their arguments

Built-in

These require no additional feature flags and are always available.

  • + event eventargs: Subscribe to an event
  • - event eventargs: Unsubscribe from an event
  • 0: No-op
  • U: Get server uptime in seconds
  • X: Abort: immediately perform a clean shutdown

GPIO

These commands are designed to control generic gpio and (software) pwm devices.

  • p pin mode: REQUIRED! Set a pin to input or output mode
  • r pin: Read a pin's logic level
  • w pin logic: Write a pin to high or low, logic can be 0 or 1
  • W pin hz cycle: Configure a software pwm on a pin, hz is the frequency, and cycle is the duty cycle, a number between 0 and 100
  • V pin deg: Move a servo between -90 and 90 degrees, using PWM

Roland

The dank engine.

  • m left right: Move the robot's left and right motors with the given speed (between 0 and 1)
  • M aleft aright: Move the robot by specifying two angles for the two motors
  • s: Stop the robot
  • l r g b: Set the leds to the given color, r,g,b can be 0 or 1
  • a angle: Set the servo to the given absolute angle
  • b freq: Sounds the buzzer at the given frequency
  • t: Get the data from the four onboard sensors in the format of four comma separated boolean numbers
  • u: Read the onboard ultra sensor, returns the distance in meters

Camloc

Camera location service

  • P: Get the position of the robot

Profiles

We currently have two profiles, for the two primary use-cases.

  • Base: Includes the GPIO features, for a generic gpio pin controller
  • Roland: Includes everything, for the dank engine

Dependencies

~11–21MB
~299K SLoC