资料介绍
描述
您是否曾经需要在仪表板上显示来自微控制器的数据,并花更多的时间开发(和修复)您的仪表板软件,而不是实际处理您的 MCU 项目?
好吧,我做了很多次。让我介绍一下背景,我通过我大学的代表队KA'AN SAT参加了几个 CanSat 竞赛项目。CanSat 是“对真实卫星的模拟,集成在软饮料罐的体积和形状中”(欧洲航天局,更多信息)。这些比赛的主要任务之一是为地面站开发软件。地面站软件(GSS)通过串口设备(一般为XBee )实时接收CanSat的遥测数据,显示并导出为CSV/Excel文件,用于任务后分析。
从一开始,我们就使用Qt开发 GSS以支持多种操作系统(以防我们的一台计算机在比赛中遇到问题),并且因为 Qt/QML 非常便于开发引人注目的用户界面。
2019年地面站软件截图如下:
以及 CUCEI CanSat 竞赛期间 GSS 运行和显示遥测的照片:
如果您有兴趣,可在此处获取 2019 GSS 的源代码。该软件的所有意图和目的都运行良好(毕竟我们获得了第一名)。
半年后问题来了,当时我发现自己在处理多个项目,这些项目需要使用串行设备进行某种数据采集。例如,ROCH (我们大学的另一个代表团队,参加了NASA 人类漫游者探索挑战赛)的一些成员希望在隔离期间将我们的 GSS 与他们的漫游者整合为一个副项目。
结果是灾难性的;我在深夜接到一个电话,我们最终通宵达旦想出一种方法,使 GSS 适应他们接收到的遥测数据。最后,该软件可以运行,但 UI 集成很糟糕,数据导出功能也不是很好(请参阅下面的屏幕截图了解一下):
这两个项目(CanSat 和流动站)都有相似的遥测格式(传感器读数和 OBC 状态数据以逗号分隔)。然而,信息本身有不同的顺序。
在那次经历之后,我决定我已经受够了为我参与的每个项目编写单独的仪表板软件。我需要想出一种方法来使用相同的仪表板/GSS 软件来处理所有项目,而无需在最后一刻修改 GSS 代码。
我最初想到的解决方案是在 GSS 和微控制器之间创建一个基于 JSON 的通信协议,于是Serial Studio诞生了(它的初始名称是SigLAB,但后来我改变了主意)。
基本上,微控制器通过串行端口发送以下信息:
- 项目名称。
- 当前传感器读数和 OBC 状态。
- 每个读数的含义、其测量单位以及 GSS 应如何处理该读数(例如,创建测量大气压力的实时图表)。
所有这些信息都可以很容易地在 JSON 文档中表示,例如:
{
"t":"KAANSATQRO",
"g":[
{
"t":"Mission Status",
"d":[
{
"t":"Runtime",
"v":"%value%",
"u":"ms"
},
{
"t":"Packet count",
"v":"%value%"
},
{
"t":"Battery voltage",
"v":"%value%",
"g":true,
"u":"V"
}
]
},
{
"t":"Sensor Readings",
"d":[
{
"t":"Temperature",
"v":"%value%",
"g":true,
"u":"°C"
},
{
"t":"Altitude",
"v":"%value%",
"u":"m"
},
{
"t":"Pressure",
"v":"%value%",
"u":"KPa",
"g":true
},
{
"t":"External Temperature",
"v":"%value%",
"g":true,
"u":"°C"
},
{
"t":"Humidity",
"v":"%9",
"g":true,
"u":"%value%"
}
]
}
]
}
如您所见,我们有以下结构:
- 项目名称(字符串)
- 数据组数组,对于每个组:
- 组标题(字符串)
- 数据集数组,对于每个数据集:
- 标题(字符串)
- 值(字符串)
- 单位(字符串)
- 图形请求(布尔值)
一个组由彼此密切相关的值组成,例如:
- OBC 状态(我们示例中的第一组)
- 传感器读数(我们示例中的第二组)
- 加速度计读数(X、Y、Z)
- GPS读数
- ETC。
另一方面,数据集代表每个单独值的含义,以及我们应该如何处理它。
在Serial Studio上,此信息以下列方式显示:
正如您可能推断的那样,每个“窗口”对应于我们 JSON 文档中的一个组(我隐藏了屏幕截图中的图形以避免混淆)。
这种方法非常适用于小型项目。然而,对于更复杂的项目,通过串行(或通过无线电信号,然后通过串口)创建和发送大型 JSON 文档就变得很成问题。解决方案?从您的计算机加载相同的 JSON 文档,指示微控制器仅发送传感器/数据读数,让Serial Studio通过使用逗号分隔的数据框中每个接收到的值的索引来计算其余部分。
这样做可以让您两全其美:
- 您不需要为每个项目编写特定的仪表板/GSS 软件(并且您可以获得我们之前描述的所有不错的功能)。
- 而且你不需要从你的微控制器创建和传输一个大的 JSON 文档(哎呀,微控制器软件的工作人员根本不需要知道 JSON 是什么或者它是如何工作的)。
JSON“地图”文档如下所示:
{
"t":"%1",
"g":[
{
"t":"Mission Status",
"d":[
{
"t":"Runtime",
"v":"%2",
"u":"ms"
},
{
"t":"Packet count",
"v":"%3"
},
{
"t":"Battery voltage",
"v":"%4",
"g":true,
"u":"V",
"w":"bar",
"min":3.6,
"max":4.3
}
]
},
{
"t":"Sensor Readings",
"d":[
{
"t":"Temperature",
"v":"%5",
"g":true,
"u":"°C",
"w":"bar",
"min":0,
"max":80
},
{
"t":"Altitude",
"v":"%6",
"u":"m",
"w":"bar",
"min":0,
"max":3000
},
{
"t":"Pressure",
"v":"%7",
"u":"KPa",
"g":true,
"w":"bar",
"min":54,
"max":102
},
{
"t":"External Temperature",
"v":"%8",
"g":true,
"u":"°C",
"w":"bar",
"min":0,
"max":80
},
{
"t":"Humidity",
"v":"%9",
"g":true,
"u":"%",
"w":"bar",
"min":0,
"max":100
}
]
},
{
"t":"GPS",
"w":"map",
"d":[
{
"t":"GPS Time",
"v":"%10"
},
{
"t":"Longitude",
"v":"%11",
"u":"°E",
"w":"lon"
},
{
"t":"Latitude",
"v":"%12",
"u":"°N",
"w":"lat"
},
{
"t":"Altitude",
"v":"%13",
"u":"m"
},
{
"t":"No. Sats",
"v":"%14"
}
]
},
{
"t":"Accelerometer",
"w":"accelerometer",
"d":[
{
"t":"X",
"v":"%15",
"u":"m/s^2",
"g":true,
"w":"x"
},
{
"t":"Y",
"v":"%16",
"u":"m/s^2",
"g":true,
"w":"y"
},
{
"t":"Z",
"v":"%17",
"u":"m/s^2",
"g":true,
"w":"z"
}
]
},
{
"t":"Gyroscope",
"w":"gyro",
"d":[
{
"t":"X",
"v":"%18",
"u":"°",
"g":true,
"w":"yaw"
},
{
"t":"Y",
"v":"%19",
"u":"°",
"g":true,
"w":"roll"
},
{
"t":"Z",
"v":"%20",
"u":"°",
"g":true,
"w":"pitch"
}
]
}
]
}
您可以猜到,Serial Studio会将%1 、%2 、%3 、... 、%20值替换为逗号分隔数据框中相应索引处的值。微控制器为给定的 JSON 映射发送的相应sprintf () 格式为:
/*KAANSATQRO,%s,%s,%s,%s,%s,%s,%,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s*/
您可能已经注意到某些地方有一些“w”键,这些键用于构建小部件(在此处进行了解释)。最后,这是显示Serial Studio用法的强制性GIF :
很酷,对吧?如果您有兴趣在您的项目中使用Serial Studio,请访问以下相关链接:
- Github 回购: https: //github.com/Serial-Studio/Serial-Studio/
- 文档(GitHub wiki):https://github.com/Serial-Studio/Serial-Studio/wiki/Communication-Protocol
适用于 Windows、macOS 和 GNU/Linux 的预构建二进制文件/安装程序可通过 GitHub 发布获得: https: //github.com/Serial-Studio/Serial-Studio/releases/
最小的例子
假设我们想用 Arduino 绘制 ADC 读数并将数据导出到 CSV 表。这是 Arduino 代码:
#define ADC_PIN A0
void setup() {
// Initialize Serial port at 9600 bauds
Serial.begin(9600);
// Configure analog input
pinMode(ADC_PIN, INPUT);
}
void loop() {
// Read voltage @ ADC_PIN
int adc_value = analogRead(ADC_PIN);
float voltage = adc_value * (5.0 / 1023.0);
// Send current ms & reading through serial
Serial.print("/*"); // Frame start sequence [/*]
Serial.print(millis()); // Add MCU runtime [ms]
Serial.print(","); // Separator character [,]
Serial.print(voltage); // Add voltage [V]
Serial.print("*/"); // Frame finish sequence [*/]
// Wait 50 ms
delay(50);
}
将此代码部署到您的 Arduino 并创建一个包含以下内容的 JSON 文件:
{
"t":"Minimal Example",
"g":[
{
"t":"MCU Status",
"d":[
{
"t":"Runtime",
"v":"%1",
"u":"ms"
},
{
"t":"ADC reading",
"v":"%2",
"g":true,
"u":"V",
"w":"bar",
"min":0,
"max":5
}
]
}
]
}
打开 Serial Studio 并通过选择应用程序左上角的“手动”单选按钮并单击“更改地图文件”按钮将 JSON 文件导入 Serial Studio。最后,选择合适的 COM 端口。如果一切顺利,您应该会看到与此类似的屏幕:
如果单击“打开当前 CSV”按钮,您将能够在 Excel/Calc 表格中看到所有收到的信息:
如果您有任何疑问、想法或错误报告,请随时添加评论、联系我或在 GitHub 上提出问题。希望互联网上的一些随机的人会发现这很有用:)
- 带远程信息处理板的 TFT 仪表盘数据手册 0次下载
- 集成TPMS功能的电动汽车仪表盘设计
- 基于μCOSⅡ的CAN总线汽车仪表盘研制
- 克服汽车仪表盘电源设计难题
- 汽车组合式仪表盘的渲染优化
- 电动汽车数字仪表盘背后的秘密
- 汽车仪表盘的EMC解决方案详细资料概述 10次下载
- 如何使用虚拟仪器实现汽车仪表盘的仿真设计 37次下载
- 汽车液晶仪表盘EMC设计难点的解决方案详细中文资料概述 72次下载
- 集成TPMS功能的电动汽车仪表盘设计解析 2次下载
- 集成TPMS功能的仪表盘设计方案解析 0次下载
- 基于汽车仪表盘中的高级图形功能应用 13次下载
- 基于TMS470PLF221RFPQ1的汽车仪表盘开发解决方案 8次下载
- 电子图形仪表盘解决方案-瑞萨-彭总 16次下载
- 工业自动化仪表盘、柜、台、箱_国家行业标准 10次下载
- 一个嵌入式数据可视化工具——Serial Studio 4735次阅读
- 基于FreeRTOS+LVGL V8智能家居仪表盘设计 3584次阅读
- 1988年美国飞机仪表盘内部拆解 499次阅读
- 艾为之家车规级36路RGB LED驱动芯片在汽车仪表盘中的应用 2814次阅读
- 汽车仪表盘EMC问题剖析 690次阅读
- 汽车信息娱乐、仪表盘和远程信息处理需要灵活的稳压器 855次阅读
- 汽车仪表仪器车载设备解决方案案例简介 2598次阅读
- 具体介绍常见仪器仪表的防爆知识 6615次阅读
- 仪表盘、仪表操作台、PLC柜和DCS系统柜的配线基本技术要求 1.2w次阅读
- 开发汽车仪表盘的TMS470PLF221RFPQ1方案介绍 4943次阅读
- 汽车仪表盘图标大全_汽车仪表盘图标图解 32.5w次阅读
- 汽车仪表盘维修_汽车仪表盘可以修理吗_汽车仪表盘维修多少钱 6.3w次阅读
- 汽车仪表与报警系统_汽车仪表盘报警符号_汽车仪表盘报警灯 1.3w次阅读
- 汽车仪表盘图标大全攻略一览 25.3w次阅读
- 揭秘汽车电子技术之汽车仪表盘MCU 5836次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多