一、起因
在新的检测设备中需要做主从机通信。
二、筛选
目前使用最广泛到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下可参考一下安装
-
得到
./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
-
拷贝文件安装 cp protoc /usr/local/bin/
cp -r include /usr/local/include -
运行 protoc –version
libprotoc 3.14.0