.. _nanopb_reference: Nanopb ###### `Nanopb `_ is a C implementation of Google's `Protocol Buffers `_. Requirements ************ Nanopb uses the protocol buffer compiler to generate source and header files, make sure the ``protoc`` executable is installed and available. .. tabs:: .. group-tab:: Ubuntu Use ``apt`` to install dependency: .. code-block:: shell sudo apt install protobuf-compiler .. group-tab:: macOS Use ``brew`` to install dependency: .. code-block:: shell brew install protobuf .. group-tab:: Windows Use ``choco`` to install dependency: .. code-block:: shell choco install protoc Additionally, Nanopb is an optional module and needs to be added explicitly to the workspace: .. code-block:: shell west config manifest.project-filter -- +nanopb west update Configuration ************* Make sure to include ``nanopb`` within your ``CMakeLists.txt`` file as follows: .. code-block:: cmake list(APPEND CMAKE_MODULE_PATH ${ZEPHYR_BASE}/modules/nanopb) include(nanopb) Adding ``proto`` files can be done with the ``zephyr_nanopb_sources()`` CMake function which ensures the generated header and source files are created before building the specified target. Nanopb has `generator options `_ that can be used to configure messages or fields. This allows to set fixed sizes or skip fields entirely. The internal CMake generator has an extension to configure ``*.options.in`` files automatically with CMake variables. See :zephyr_file:`samples/modules/nanopb/src/simple.options.in` and :zephyr_file:`samples/modules/nanopb/CMakeLists.txt` for usage example.