Nano Pb

一、起因

在新的检测设备中需要做主从机通信。

二、筛选

目前使用最广泛到modbus通信了。当时移植了modbus到nrf52 和 stm32,但是移植后寄存器协议很麻烦,字节长度都是16bit也不太适合当前32位单片机。 并且在与APP通信中,前端又没有很好的库适配modbus。

三、发现

犹疑间偶然发现nrf52的sdk里面提供了一个外部通信协议库 nano-pb,程序小巧,又可兼容和APP通信,深得我心。所以移植到系统中测试下可靠性。

四、使用

4.1 下载移植

移植过程参考了几篇文章,写的比较全面的就是这个了nanopb的安装和使用.
下载最新的库可以从这里Nanopb - downloads

最新的版本是0.4.4 目录如下

 tree -L 1
.
├── AUTHORS.txt
├── BUILD.bazel
├── CHANGELOG.txt
├── CMakeLists.txt
├── CONTRIBUTING.md
├── LICENSE.txt
├── Package.swift
├── README.md
├── WORKSPACE
├── build.py
├── conan-wrapper
├── conanfile.py
├── docs
├── examples
├── extra
├── generator
├── generator-bin
├── library.json
├── pb.h
├── pb_common.c
├── pb_common.h
├── pb_decode.c
├── pb_decode.h
├── pb_encode.c
├── pb_encode.h
├── spm-test
├── spm_headers
├── tests
└── tools

简单的测试可以查看examples,编译sample。
对于传输复杂格式例如string 或者 数组bytes可以参考tests/alltypes工程。

4.2 必要工具

另外在编译协议的时宿主机需要安装 protoc工具
在mac下可参考一下安装

  1. 下载protobuf下载

  2. 得到

./protoc-3.14.0-osx-x86_64
├── bin
│   └── protoc
├── include
│   └── google
│       └── protobuf
│           ├── any.proto
│           ├── api.proto
│           ├── compiler
│           │   └── plugin.proto
│           ├── descriptor.proto
│           ├── duration.proto
│           ├── empty.proto
│           ├── field_mask.proto
│           ├── source_context.proto
│           ├── struct.proto
│           ├── timestamp.proto
│           ├── type.proto
│           └── wrappers.proto
└── readme.txt

  1. 拷贝文件安装 cp protoc /usr/local/bin/
    cp -r include /usr/local/include

  2. 运行 protoc –version
    libprotoc 3.14.0

分享