# Arduino Nano 33 IOT Board Support Crate This crate provides a type-safe API for working with the [Arduino nano 33 IOT board](https://store.arduino.cc/usa/nano-33-iot). ## Requirements 1. Arduino IDE or [arduino CLI](https://github.com/arduino/arduino-cli) installed. 2. `samd` package installed. You can do this by going to Tools->Board->BoardManager and then searching for `samd` or run `arduino-cli core install arduino:samd`. 3. Now the arduino distribution contains bossac.exe in `ArduinoData/packages/arduino/tools/bossac/1.7.0[-arduino3]/` add it to your path - **linux**: `ArduinoData` is likely something like `~/.arduino15/` - **OSX**: `ArduinoData` is likely something like `~/Library/Arduino15` 4. Probably best to install an example sketch via the IDE just to make sure everything is working. 5. `arm-none-eabi` tools installed, you need `gcc` and `objcopy`. - **Note**: Alternatively, you can use [cargo-binutils](https://github.com/rust-embedded/cargo-binutils), which is likely easier to install on OSX and also easier to use, as it will automatically detect the target 6. `thumbv6m-none-eabi` rust target installed via `rustup target add thumbv6m-none-eabi`. Some features may also require nightly rust. ## Steps ```bash cargo build --release --example blinky_basic # If using cargo-binutils, you can `rust-objcopy` with the same flags, or combine these 2 steps with `cargo objcopy` arm-none-eabi-objcopy -O binary target/thumbv6m-none-eabi/release/examples/blinky_basic target/blinky_basic.bin # If using bossac bossac -i -d -U true -i -e -w -v target/blinky_basic.bin -R # If using arduino-cli arduino-cli upload -i target/blinky_basic.bin -b arduino:samd:nano_33_iot -p /dev/ttyACM0 ``` (You may need to use `--port` with something like `/dev/ttyACM0`/`/dev/ttyACM1`, or `/dev/tty.usbmodemNNNNN` on OSX) ## Notes - It may help to double-press the center button to reset when re-flashing the device. This sets the device in a bootloader mode. - For the usb example, `picocom` is a good simple terminal serial emulator, installable with your os's package manager or `brew` - On OSX, after flashing the tty for serial communication may be different, for example `/dev/tty.usbmodemTEST1`