Betaflight in a graph
A GraphQL server for querying, and mutatating betaflight flight controllers
$ yarn add @betaflight/api-server graphql@14
import { createServer } from "@betaflight/api-server";
createServer().listen({ port: 9000 })
Then, you can query the graph at http://localhost:9000/graphql
Mocked mode simulates a device and USB ports instead of actually connecting to them. This way, software can be developed without having to have a flight controller to hand.
import { createServer } from "@betaflight/api-server";
// Start in mocked mode
createServer({ mocked: true }).listen({ port: 9000 })
query Ports {
ports
}
mutation Connect($port: String!) {
connect(port: $port, baudRate: 115200) {
id # the connectionId
apiVersion # the api version of the flight controller
}
}
subscription OnChanged($id: ID!) {
onConnectionChanged(connection: $id)
}
query Attitude($connection: ID!) {
connection(connectionId: $connection) {
device {
attitude {
roll
pitch
heading
}
}
bytesRead
bytesWritten
packetErrors
}
}
For more usage examples, please refer to @betaflight/configurator
which uses this package
to communicate with flight controllers
GraphQL is a powerful langauge, and this structure would have had to be implemented in the configurator for client state anyway. Splitting the flight controller graph into it's own API means we both create a segregated architecture for the configurator and allow other people to use the API for other means.