Professional Documents
Culture Documents
Protocol Buffers - Giao Thức Truyền Nhận Data
Protocol Buffers - Giao Thức Truyền Nhận Data
1. Giới thiệu
Protocol Buffer là một platform được phát triển bởi google được sử dụng để serialize
data thành dạng byte stream, giúp cho việc truyền nhận dữ liệu trở nên đơn giản, linh
hoạt, nhanh hơn và giải quyết được vấn đề khi 2 object thực hiện truyền - nhận dữ liệu
được viết bằng ngôn ngữ khác nhau
Do đặc điểm là “nhẹ” và nhanh của dữ liệu được serialize bởi protobuf, vì vậy protobuf
sẽ đặc biệt thích hợp trong các ứng dụng data real-time hoặc trao đổi dữ liệu trực tiếp
trong đó:
- kiểu dữ liệu float trong .proto cũng có sự tương ứng với các ngôn ngữ khác (xem hình
dưới)
3. Tại sao lại chọn protobuf
- Việc lập trình trên STM32 sử dụng ngôn ngữ C, trong khi với Raspberry Pi dùng python
sẽ thuận tiện hơn
=> cần chọn giao thức có hỗ trợ chuyển đổi dễ dàng giữa các ngôn ngữ
- Để giao tiếp các thiết bị với nhau qua Uart, I2c … cần đồng bộ cấu trúc dữ liệu.
=> để đảm bảo thiết bị giao tiếp nhận được data của nhau, chúng ta phải nghĩ ra phương
pháp thêm byte gọi là header và có thể cần byte end để xác định đâu là data.
- Đối với ứng dụng sử dụng dữ liệu khác nhau khai báo kiểu int, char, chuỗi,.. việc nhận
sẽ vất vả hơn rất nhiều và dễ gặp lỗi, bởi trong quá trình truyền nhận thiếu byte hoặc sai
byte do nhiễu môi trường.
=> do đó phải thêm các byte “check” để kiểm tra xem chuỗi nhận được có lỗi hay không.
- Khi thêm bớt, thay đổi dữ liệu (VD: thêm sensor, actuator) khiến khung truyền gửi nhận
bị thay đổi khi đó chúng ta cần sửa code để đồng bộ giao tiếp.
=> Đối với sự thay đổi nhỏ thôi cũng khiến cả việc sửa code mất thêm nhiều thời gian.
● Buffer giao tiếp gọn nhẹ (nhỏ nhất bằng độ dài của data).
● Buffer đồng bộ vì vậy có thể giao tiếp các thiết bị cho nhau.
● Linh hoạt khi thêm hay bớt data (chỉ cần sửa file .proto)
Đối với ngôn ngữ C protobuf không được google phát triển nhưng ta có thể dùng Nanopb
thay thế, cách dùng giống ngôn ngữ C++ protobuf. Nanopb là thư viện ANSI-C dùng cho
việc đóng gói và giải mã như protobuf nhưng thích hợp với thiết bị có bộ nhớ hạn chế
như vi điều khiển 32 bit.
Sau khi tải về và giải nén, ta cần tạo file cơ sở .proto, ở đây sẽ dùng luôn sensor.proto
trong ví dụ phía trên
Cách làm với cmd_actuator.proto cũng tương tự, chỉ việc thay tên
file sensor_pb2.py được tạo thành nằm ngay trong thư mục chứa file sensor.proto
4.2. cách tạo file sensor.pb.c và sensor.pb.h cho STM32
Cần tạo file sensor.pb từ file cơ sở sensor.proto trước, sau đó dùng generator để tạo
file.pb.c và file.pb.h
STM32: ../SmartAgriBox/Arduino/SmartAgriBox_Sensor/src
Pi: ../workspace/KDTeamlot/device
5. cách sử dụng