首页 > 其他分享 >ESP32使用protobuf

ESP32使用protobuf

时间:2024-12-30 15:10:23浏览次数:1  
标签:protobuf proto ESP32 pb 文件夹 使用 test Serial include

非原创,

引用自:https://techtutorialsx.com/2018/10/19/esp32-esp8266-arduino-protocol-buffers/

对上述英文技术博客做了总结:

1. 先去这个网站下载最新的Nanopb 包

    https://jpa.kapsi.fi/nanopb/download/

    

2.解压,解压之后如下图

 3.在Arduino的libraries目录下,C:\Users\{yourUserName}\AppData\Local\Arduino15\libraries

 新建Nanopb文件夹,  把上述pb开头的7个文件复制进来

4.在第2步解压后的generator-bin目录下新建proto_files文件夹,并在proto_files文件夹下创建test.proto文件,内容如下:

syntax = "proto3";

message TestMessage {
   int32 test_number = 1;
}

5. 在上述generator-bin目录下打开cmd窗口,执行命令 

protoc --nanopb_out=. proto_files/test.proto

执行命令后,proto_files 目录下多了两个文件 test.pb.h 和 test.pb.c 

6. 在arduino的主程序.info文件的目录下创建src文件夹,将test.pb.h和test.pb.c复制到src文件夹下

7. arduino的主程序.info文件测试,代码如下

#include "src/test.pb.h"
 
#include "pb_common.h"
#include "pb.h"
#include "pb_encode.h"
 
void setup() {
 
  Serial.begin(115200);
 
  uint8_t buffer[128];
 
  TestMessage message = TestMessage_init_zero;
 
  pb_ostream_t stream = pb_ostream_from_buffer(buffer, sizeof(buffer));
 
  message.test_number = 540;
 
  bool status = pb_encode(&stream, TestMessage_fields, &message);
 
  if (!status)
  {
      Serial.println("Failed to encode");
      return;
  }
 
  Serial.print("Message Length: ");
  Serial.println(stream.bytes_written);
 
  Serial.print("Message: ");
 
  for(int i = 0; i<stream.bytes_written; i++){
    Serial.printf("%02X",buffer[i]);
  }
}
 
void loop() {

   uint8_t buffer[128];
 
  TestMessage message = TestMessage_init_zero;
 
  pb_ostream_t stream = pb_ostream_from_buffer(buffer, sizeof(buffer));
 
  message.test_number = 540;
 
  bool status = pb_encode(&stream, TestMessage_fields, &message);
 
  if (!status)
  {
      Serial.println("Failed to encode");
      return;
  }
 
  Serial.print("Message Length: ");
  Serial.println(stream.bytes_written);
 
  Serial.print("Message: ");
 
  for(int i = 0; i<stream.bytes_written; i++){
    Serial.printf("%02X",buffer[i]);
  }

  delay(3000);
}

 

标签:protobuf,proto,ESP32,pb,文件夹,使用,test,Serial,include
From: https://www.cnblogs.com/qiyu/p/18641276

相关文章

  • Redis可视化工具推荐:Another Redis Desktop Manager下载与详细使用教程
    Redis可视化工具推荐:AnotherRedisDesktopManagerRedis是一种高性能的键值数据库,广泛应用于缓存和消息队列等场景。对于开发者来说,命令行工具固然强大,但操作繁琐。而一款高效易用的可视化工具可以极大地提升使用效率。本篇将为大家推荐一款开源、跨平台且功能强大的Redis可......
  • 【YashanDB知识库】如何使用jdbc向YashanDB批量插入gis数据
    本文内容来自YashanDB官网,原文内容请见https://www.yashandb.com/newsinfo/7817897.html?templateId=1718516以gis表为例:droptablegis;createtablegis(idnumbernotnull,posst_geometrynotnull);使用如下的java代码片断,可以向gis表中插入POINT类型的gis数据:conn.s......
  • Vue3使用EasyOFD.js实现ofd文件自定义展示
    EasyOFD.js——一个在web端展示ofd文件的控件,该控件基于CANVAS绘制。官网提供的事例,不适合用于多页ofd文件的展示,本文基于EAYSOFD实现放大、缩小、页面跳转以及多页滚动等功能1、安装EAYSOFD依赖和EASYOFD组件//依赖npmijszipx2jsjb2opentype.js//本程序npmieasyofd......
  • Fiddler的使用
    接口基础知识根据fiddler捕获接口,分析并编写对应接口测试测试慕课网账号更换头像的接口1.先对接口进行抓取打开fiddlereverywhere来到慕课网个人页面更换头像更换头像后Fiddler抓取到的页面,找到其中的发送请求根据body值,判断出发送头像的接口这里乱码,猜测是因为......
  • 使用 httputils + sbe (Simple Binary Encoding) 实现金融级 java rpc
    1、认识SimpleBinaryEncoding(sbe)高性能Java库Agrona的主要目标是减少性能瓶颈,通过提供线程安全的直接和原子缓冲区、无装箱操作的原始类型列表、开散列映射和集合以及锁-free队列等,为开发者在处理并发和低延迟场景时提供强大工具。SimpleBinaryEncoding(sbe)是Agr......
  • 异步爬虫之aiohttp的使用
    在上一篇博客我们介绍了异步爬虫的基本原理和asyncio的基本用法,并且在最后简单提及了使用aiohttp实现网页爬取的过程。本篇博客我们介绍一下aiohttp的常见用法。基本介绍前面介绍的asyncio模块,其内部实现了对TCP、UDP、SSL协议的异步操作,但是对于HTTP请求来说,就......
  • 2024,使用房车这一年
    2021年12月购买了一台房车,这台房车已经陪伴了我们整整三年的时间,前边两年每到年底都会回顾下这一年房车的使用情况,分享下它给我们带来的温馨和快乐,这不,又到年底,照例来总结下新的一年,这台房车带我们探索过的城市烟火和壮美山河这一年主线任务仍然是探索江浙周边,支线任务还去自驾了......
  • Flink 三种时间窗口、窗口处理函数使用及案例
    Flink在数据处理过程中越来越常见,它在流处理领域提供了丰富的窗口机制来处理无界数据流,我们聊下三种时间窗口,包括时间窗口的概念、窗口处理函数的使用以及实际案例。一、Flink中的时间概念在Flink中,有三种时间概念:事件时间(EventTime):是事件实际发生的时间,通常由事件中的时......
  • PyInstaller打包exe提示文件缺失,无法找到文件/文件夹路径的问题解析(为什么PyInstaller
    文章目录......
  • 最新 HUAWEI DevEco Studio 使用技巧
    最新HUAWEIDevEcoStudio使用技巧HUAWEIDevEcoStudio作为我们harmonyos应用的开发工具,有必要好好打磨一下。Chinese(Simplified)中文汉化插件GitToolBox编辑器中显示git历史保存时自动格式化写了一堆代码,当保存时,自动帮你格式化切换Ohos视图项目本来的......