firmata-rs 0.4.3

A Firmata protocol client library.
Documentation
# Firmata client library in Rust

Control your [Firmata](https://github.com/firmata/protocol) devices from Rust!

The library comes with a Board struct, which you can initialize with any object that implements
`std:io::{Read, Write}` and `Debug` for formatting purposes. This avoids being locked in to a
specific interface library. I highly recommend `serialport` for your USB connections (used in
examples), but feel free to use `serial` or any other.

The different methods of the `Firmata` trait that return results also have _backoff-able_
counterparts in the `RetryFirmata` trait that utilizes a `ExponentialBackoff` strategy powered by
the `backoff` crate. This may be useful as your Rust program may run "too fast" for your Firmata
device to keep up.

The crate has been set up to utilize `tracing`, which helps in finding where your messages went!
If you set the environment variable `CARGO_LOG=DEBUG` you can capture the most noise.

## Examples

There are quite a couple of examples to try with your Firmata device! You can run each of them like
this:

```bash
cargo run --example blink
```

Where `blink` is the example's filename.

If you want the "full" output you can use:

```bash
RUST_LOG=DEBUG cargo run --example blink
```

## Installing Firmata on a device

Chances are you have an Arduino or other Firmata device lying around since you're here :). You can
go to your favorite Arduino IDE of choice and load the regular "StandardFirmata" onto your device
and start tinkering!

## Finding the right port

You might need to set the USB port to the one that is in use on your machine. Find the right
`port_name` in the list after running:

```bash
cargo run --example available
```

## License

Licensed under either of

- Apache License, Version 2.0, ([LICENSE-APACHE]LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license ([LICENSE-MIT]LICENSE-MIT or http://opensource.org/licenses/MIT)

at your option.

### Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the
work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any
additional terms or conditions.

## Acknowledgements

This library is largely based on the earlier work by Adrian Zankich over at
https://github.com/zankich/rust-firmata to whom should go out many thanks!