資料介紹
描述
您是否曾經需要在儀表板上顯示來自微控制器的數據,并花更多的時間開發(和修復)您的儀表板軟件,而不是實際處理您的 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次下載
- 如何使用虛擬儀器實現汽車儀表盤的仿真設計 39次下載
- 汽車液晶儀表盤EMC設計難點的解決方案詳細中文資料概述 72次下載
- 集成TPMS功能的電動汽車儀表盤設計解析 2次下載
- 集成TPMS功能的儀表盤設計方案解析 1次下載
- 基于汽車儀表盤中的高級圖形功能應用 13次下載
- 基于TMS470PLF221RFPQ1的汽車儀表盤開發解決方案 8次下載
- 電子圖形儀表盤解決方案-瑞薩-彭總 18次下載
- 工業自動化儀表盤、柜、臺、箱_國家行業標準 10次下載
- 先積電源產品在電動車儀表盤領域的應用 341次閱讀
- 華邦低功耗NOR Flash為數字儀表盤續航賦能 505次閱讀
- 廣州唯創電子WT2605C-L009音頻藍牙語音芯片:汽車儀表盤的智能語音“協奏者” 793次閱讀
- 虹科免拆診斷 | 2016 款賓利GT車儀表盤上的多個故障燈點亮 1.3k次閱讀
- 一個嵌入式數據可視化工具——Serial Studio 1.8w次閱讀
- 基于FreeRTOS+LVGL V8智能家居儀表盤設計 8.3k次閱讀
- 艾為之家車規級36路RGB LED驅動芯片在汽車儀表盤中的應用 4.7k次閱讀
- 汽車儀表盤EMC問題剖析 1.6k次閱讀
- 汽車信息娛樂、儀表盤和遠程信息處理需要靈活的穩壓器 1.7k次閱讀
- 儀表盤、儀表操作臺、PLC柜和DCS系統柜的配線基本技術要求 1.4w次閱讀
- 開發汽車儀表盤的TMS470PLF221RFPQ1方案介紹 5.3k次閱讀
- 汽車儀表盤圖標大全_汽車儀表盤圖標圖解 33.2w次閱讀
- 汽車儀表盤維修_汽車儀表盤可以修理嗎_汽車儀表盤維修多少錢 6.5w次閱讀
- 汽車儀表盤圖標大全攻略一覽 25.6w次閱讀
- 揭秘汽車電子技術之汽車儀表盤MCU 6.3k次閱讀
下載排行
本周
- 1新一代網絡可視化(NPB 2.0)
- 3.40 MB | 1次下載 | 免費
- 2冷柜-電氣控制系統講解
- 13.68 MB | 1次下載 | 10 積分
- 3MDD品牌三極管MMBT3906數據手冊
- 2.33 MB | 次下載 | 免費
- 4MDD品牌三極管S9012數據手冊
- 2.62 MB | 次下載 | 免費
- 5LAT1218 如何選擇和設置外部晶體適配 BlueNRG-X
- 0.60 MB | 次下載 | 3 積分
- 6LAT1216 Blue NRG-1/2 系列芯片 Flash 操作與 BLE 事件的互斥處理
- 0.89 MB | 次下載 | 3 積分
- 7收音環繞擴音機 AVR-1507手冊
- 2.50 MB | 次下載 | 免費
- 8MS1000TA 超聲波測量模擬前端芯片技術手冊
- 0.60 MB | 次下載 | 免費
本月
- 1愛華AIWA HS-J202維修手冊
- 3.34 MB | 37次下載 | 免費
- 2PC5502負載均流控制電路數據手冊
- 1.63 MB | 23次下載 | 免費
- 3NB-IoT芯片廠商的資料說明
- 0.31 MB | 22次下載 | 1 積分
- 4UWB653Pro USB口測距通信定位模塊規格書
- 838.47 KB | 5次下載 | 免費
- 5蘇泊爾DCL6907(即CHK-S007)單芯片電磁爐原理圖資料
- 0.04 MB | 4次下載 | 1 積分
- 6蘇泊爾DCL6909(即CHK-S009)單芯片電磁爐原理圖資料
- 0.08 MB | 2次下載 | 1 積分
- 7100W準諧振反激式恒流電源電路圖資料
- 0.09 MB | 2次下載 | 1 積分
- 8FS8025B USB的PD和OC快充協議電壓誘騙控制器IC技術手冊
- 1.81 MB | 1次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191439次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183353次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81602次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73822次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發燒友App





創作
發文章
發帖
提問
發資料
發視頻
上傳資料賺積分
評論