資料介紹
描述
您是否曾經(jīng)需要在儀表板上顯示來自微控制器的數(shù)據(jù),并花更多的時(shí)間開發(fā)(和修復(fù))您的儀表板軟件,而不是實(shí)際處理您的 MCU 項(xiàng)目?
好吧,我做了很多次。讓我介紹一下背景,我通過我大學(xué)的代表隊(duì)KA'AN SAT參加了幾個(gè) CanSat 競賽項(xiàng)目。CanSat 是“對真實(shí)衛(wèi)星的模擬,集成在軟飲料罐的體積和形狀中”(歐洲航天局,更多信息)。這些比賽的主要任務(wù)之一是為地面站開發(fā)軟件。地面站軟件(GSS)通過串口設(shè)備(一般為XBee )實(shí)時(shí)接收CanSat的遙測數(shù)據(jù),顯示并導(dǎo)出為CSV/Excel文件,用于任務(wù)后分析。
從一開始,我們就使用Qt開發(fā) GSS以支持多種操作系統(tǒng)(以防我們的一臺計(jì)算機(jī)在比賽中遇到問題),并且因?yàn)?Qt/QML 非常便于開發(fā)引人注目的用戶界面。
2019年地面站軟件截圖如下:

以及 CUCEI CanSat 競賽期間 GSS 運(yùn)行和顯示遙測的照片:

如果您有興趣,可在此處獲取 2019 GSS 的源代碼。該軟件的所有意圖和目的都運(yùn)行良好(畢竟我們獲得了第一名)。
半年后問題來了,當(dāng)時(shí)我發(fā)現(xiàn)自己在處理多個(gè)項(xiàng)目,這些項(xiàng)目需要使用串行設(shè)備進(jìn)行某種數(shù)據(jù)采集。例如,ROCH (我們大學(xué)的另一個(gè)代表團(tuán)隊(duì),參加了NASA 人類漫游者探索挑戰(zhàn)賽)的一些成員希望在隔離期間將我們的 GSS 與他們的漫游者整合為一個(gè)副項(xiàng)目。
結(jié)果是災(zāi)難性的;我在深夜接到一個(gè)電話,我們最終通宵達(dá)旦想出一種方法,使 GSS 適應(yīng)他們接收到的遙測數(shù)據(jù)。最后,該軟件可以運(yùn)行,但 UI 集成很糟糕,數(shù)據(jù)導(dǎo)出功能也不是很好(請參閱下面的屏幕截圖了解一下):

這兩個(gè)項(xiàng)目(CanSat 和流動站)都有相似的遙測格式(傳感器讀數(shù)和 OBC 狀態(tài)數(shù)據(jù)以逗號分隔)。然而,信息本身有不同的順序。
在那次經(jīng)歷之后,我決定我已經(jīng)受夠了為我參與的每個(gè)項(xiàng)目編寫單獨(dú)的儀表板軟件。我需要想出一種方法來使用相同的儀表板/GSS 軟件來處理所有項(xiàng)目,而無需在最后一刻修改 GSS 代碼。
我最初想到的解決方案是在 GSS 和微控制器之間創(chuàng)建一個(gè)基于 JSON 的通信協(xié)議,于是Serial Studio誕生了(它的初始名稱是SigLAB,但后來我改變了主意)。
基本上,微控制器通過串行端口發(fā)送以下信息:
- 項(xiàng)目名稱。
- 當(dāng)前傳感器讀數(shù)和 OBC 狀態(tài)。
- 每個(gè)讀數(shù)的含義、其測量單位以及 GSS 應(yīng)如何處理該讀數(shù)(例如,創(chuàng)建測量大氣壓力的實(shí)時(shí)圖表)。
所有這些信息都可以很容易地在 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%"
}
]
}
]
}
如您所見,我們有以下結(jié)構(gòu):
- 項(xiàng)目名稱(字符串)
- 數(shù)據(jù)組數(shù)組,對于每個(gè)組:
- 組標(biāo)題(字符串)
- 數(shù)據(jù)集數(shù)組,對于每個(gè)數(shù)據(jù)集:
- 標(biāo)題(字符串)
- 值(字符串)
- 單位(字符串)
- 圖形請求(布爾值)
一個(gè)組由彼此密切相關(guān)的值組成,例如:
- OBC 狀態(tài)(我們示例中的第一組)
- 傳感器讀數(shù)(我們示例中的第二組)
- 加速度計(jì)讀數(shù)(X、Y、Z)
- GPS讀數(shù)
- ETC。
另一方面,數(shù)據(jù)集代表每個(gè)單獨(dú)值的含義,以及我們應(yīng)該如何處理它。
在Serial Studio上,此信息以下列方式顯示:

正如您可能推斷的那樣,每個(gè)“窗口”對應(yīng)于我們 JSON 文檔中的一個(gè)組(我隱藏了屏幕截圖中的圖形以避免混淆)。
這種方法非常適用于小型項(xiàng)目。然而,對于更復(fù)雜的項(xiàng)目,通過串行(或通過無線電信號,然后通過串口)創(chuàng)建和發(fā)送大型 JSON 文檔就變得很成問題。解決方案?從您的計(jì)算機(jī)加載相同的 JSON 文檔,指示微控制器僅發(fā)送傳感器/數(shù)據(jù)讀數(shù),讓Serial Studio通過使用逗號分隔的數(shù)據(jù)框中每個(gè)接收到的值的索引來計(jì)算其余部分。
這樣做可以讓您兩全其美:
- 您不需要為每個(gè)項(xiàng)目編寫特定的儀表板/GSS 軟件(并且您可以獲得我們之前描述的所有不錯(cuò)的功能)。
- 而且你不需要從你的微控制器創(chuàng)建和傳輸一個(gè)大的 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值替換為逗號分隔數(shù)據(jù)框中相應(yīng)索引處的值。微控制器為給定的 JSON 映射發(fā)送的相應(yīng)sprintf () 格式為:
/*KAANSATQRO,%s,%s,%s,%s,%s,%s,%,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s*/
您可能已經(jīng)注意到某些地方有一些“w”鍵,這些鍵用于構(gòu)建小部件(在此處進(jìn)行了解釋)。最后,這是顯示Serial Studio用法的強(qiáng)制性GIF :
很酷,對吧?如果您有興趣在您的項(xiàng)目中使用Serial Studio,請?jiān)L問以下相關(guān)鏈接:
- Github 回購: https: //github.com/Serial-Studio/Serial-Studio/
- 文檔(GitHub wiki):https://github.com/Serial-Studio/Serial-Studio/wiki/Communication-Protocol
適用于 Windows、macOS 和 GNU/Linux 的預(yù)構(gòu)建二進(jìn)制文件/安裝程序可通過 GitHub 發(fā)布獲得: https: //github.com/Serial-Studio/Serial-Studio/releases/
最小的例子
假設(shè)我們想用 Arduino 繪制 ADC 讀數(shù)并將數(shù)據(jù)導(dǎo)出到 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 并創(chuàng)建一個(gè)包含以下內(nèi)容的 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 并通過選擇應(yīng)用程序左上角的“手動”單選按鈕并單擊“更改地圖文件”按鈕將 JSON 文件導(dǎo)入 Serial Studio。最后,選擇合適的 COM 端口。如果一切順利,您應(yīng)該會看到與此類似的屏幕:

如果單擊“打開當(dāng)前 CSV”按鈕,您將能夠在 Excel/Calc 表格中看到所有收到的信息:

如果您有任何疑問、想法或錯(cuò)誤報(bào)告,請隨時(shí)添加評論、聯(lián)系我或在 GitHub 上提出問題。希望互聯(lián)網(wǎng)上的一些隨機(jī)的人會發(fā)現(xiàn)這很有用:)
- 帶遠(yuǎn)程信息處理板的 TFT 儀表盤數(shù)據(jù)手冊 0次下載
- 集成TPMS功能的電動汽車儀表盤設(shè)計(jì)
- 基于μCOSⅡ的CAN總線汽車儀表盤研制
- 克服汽車儀表盤電源設(shè)計(jì)難題
- 汽車組合式儀表盤的渲染優(yōu)化
- ?電動汽車數(shù)字儀表盤背后的秘密
- 汽車儀表盤的EMC解決方案詳細(xì)資料概述 10次下載
- 如何使用虛擬儀器實(shí)現(xiàn)汽車儀表盤的仿真設(shè)計(jì) 37次下載
- 汽車液晶儀表盤EMC設(shè)計(jì)難點(diǎn)的解決方案詳細(xì)中文資料概述 72次下載
- 集成TPMS功能的電動汽車儀表盤設(shè)計(jì)解析 2次下載
- 集成TPMS功能的儀表盤設(shè)計(jì)方案解析 0次下載
- 基于汽車儀表盤中的高級圖形功能應(yīng)用 13次下載
- 基于TMS470PLF221RFPQ1的汽車儀表盤開發(fā)解決方案 8次下載
- 電子圖形儀表盤解決方案-瑞薩-彭總 18次下載
- 工業(yè)自動化儀表盤、柜、臺、箱_國家行業(yè)標(biāo)準(zhǔn) 10次下載
- 虹科免拆診斷 | 2016 款賓利GT車儀表盤上的多個(gè)故障燈點(diǎn)亮 364次閱讀
- 一個(gè)嵌入式數(shù)據(jù)可視化工具——Serial Studio 8727次閱讀
- 基于FreeRTOS+LVGL V8智能家居儀表盤設(shè)計(jì) 5247次閱讀
- 1988年美國飛機(jī)儀表盤內(nèi)部拆解 669次閱讀
- 艾為之家車規(guī)級36路RGB LED驅(qū)動芯片在汽車儀表盤中的應(yīng)用 3401次閱讀
- 汽車儀表盤EMC問題剖析 843次閱讀
- 汽車信息娛樂、儀表盤和遠(yuǎn)程信息處理需要靈活的穩(wěn)壓器 1042次閱讀
- 汽車儀表儀器車載設(shè)備解決方案案例簡介 2700次閱讀
- 具體介紹常見儀器儀表的防爆知識 6721次閱讀
- 儀表盤、儀表操作臺、PLC柜和DCS系統(tǒng)柜的配線基本技術(shù)要求 1.2w次閱讀
- 開發(fā)汽車儀表盤的TMS470PLF221RFPQ1方案介紹 5033次閱讀
- 汽車儀表盤圖標(biāo)大全_汽車儀表盤圖標(biāo)圖解 32.6w次閱讀
- 汽車儀表盤維修_汽車儀表盤可以修理嗎_汽車儀表盤維修多少錢 6.3w次閱讀
- 汽車儀表盤圖標(biāo)大全攻略一覽 25.4w次閱讀
- 揭秘汽車電子技術(shù)之汽車儀表盤MCU 5926次閱讀
下載排行
本周
- 1DD3118電路圖紙資料
- 0.08 MB | 1次下載 | 免費(fèi)
- 2AD庫封裝庫安裝教程
- 0.49 MB | 1次下載 | 免費(fèi)
- 3PC6206 300mA低功耗低壓差線性穩(wěn)壓器中文資料
- 1.12 MB | 1次下載 | 免費(fèi)
- 4網(wǎng)絡(luò)安全從業(yè)者入門指南
- 2.91 MB | 1次下載 | 免費(fèi)
- 5DS-CS3A P00-CN-V3
- 618.05 KB | 1次下載 | 免費(fèi)
- 6海川SM5701規(guī)格書
- 1.48 MB | 次下載 | 免費(fèi)
- 7H20PR5電磁爐IGBT功率管規(guī)格書
- 1.68 MB | 次下載 | 1 積分
- 8IP防護(hù)等級說明
- 0.08 MB | 次下載 | 免費(fèi)
本月
- 1貼片三極管上的印字與真實(shí)名稱的對照表詳細(xì)說明
- 0.50 MB | 103次下載 | 1 積分
- 2涂鴉各WiFi模塊原理圖加PCB封裝
- 11.75 MB | 89次下載 | 1 積分
- 3錦銳科技CA51F2 SDK開發(fā)包
- 24.06 MB | 43次下載 | 1 積分
- 4錦銳CA51F005 SDK開發(fā)包
- 19.47 MB | 19次下載 | 1 積分
- 5PCB的EMC設(shè)計(jì)指南
- 2.47 MB | 16次下載 | 1 積分
- 6HC05藍(lán)牙原理圖加PCB
- 15.76 MB | 13次下載 | 1 積分
- 7802.11_Wireless_Networks
- 4.17 MB | 12次下載 | 免費(fèi)
- 8蘋果iphone 11電路原理圖
- 4.98 MB | 6次下載 | 2 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935127次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191390次下載 | 10 積分
- 5十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183342次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81588次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73815次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65989次下載 | 10 積分
評論