| # Pigweed: minimal Bazel example |
| |
| This repository contains a minimal example of a Bazel-based Pigweed project. |
| It is a LED-blinking service (featuring RPC control!) for the |
| [Raspberry Pi Pico](https://www.raspberrypi.com/products/raspberry-pi-pico/). |
| It can also be run on any computer using the included simulator. |
| |
| ## Getting the code |
| |
| ``` |
| git clone https://pigweed.googlesource.com/pigweed/quickstart/bazel pw_bazel_quickstart |
| cd pw_bazel_quickstart |
| ``` |
| |
| ## Dependencies |
| |
| The only dependency that must be installed is Bazelisk. |
| |
| Bazelisk is a launcher for the Bazel build system that allows for easy |
| management of multiple Bazel versions. |
| |
| [Instructions for installing Bazelisk can be found here.](https://github.com/bazelbuild/bazelisk/blob/master/README.md) |
| |
| ## Running on the simulator |
| |
| To run the simulator, type: |
| `bazelisk run //apps/blinky:simulator_blinky` |
| Then, in a new console, connect to the simulator using: |
| `bazelisk run //apps/blinky:simulator_console` |
| |
| ## Running on hardware |
| |
| To start, connect a Raspberry Pi Pico, Pico 2, or debug probe via USB. |
| |
| To run on the Raspberry Pi Pico, type: |
| `bazelisk run //apps/blinky:flash_rp2040` |
| Then, in a new console, connect to the device using: |
| `bazelisk run //apps/blinky:rp2040_console` |
| |
| ## Controlling the LED |
| |
| Once connected with a console, RPCs can be sent to control the LED. |
| Try running: |
| |
| ``` |
| device.set_led(True) |
| device.set_led(False) |
| device.toggle_led() |
| device.blink(blink_count=3) |
| ``` |
| |
| ## Running unit tests on the host device |
| |
| `bazelisk test //...` will run the unit tests defined in this project, |
| such as the ones in `modules/blinky/blinky_test.cc`. |
| |
| ## Running unit tests on hardware |
| |
| `bazelisk run @pigweed//targets/rp2040/py:unit_test_server` in one console followed by |
| `bazelisk test //... --config=rp2040` will also allow running the unit tests on-device. |
| |
| ## Next steps |
| |
| Try poking around the codebase for inspiration about how Pigweed projects can be |
| organized. Most of the relevant code in this quickstart (including RPC |
| definitions) is inside `modules/blinky`, with some client-side Python code in |
| `tools/console.py`. |