資料介紹
描述
您是否曾經需要在儀表板上顯示來自微控制器的數據,并花更多的時間開發(和修復)您的儀表板軟件,而不是實際處理您的 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 上提出問題。希望互聯網上的一些隨機的人會發現這很有用:)
- 集成TPMS功能的電動汽車儀表盤設計 1次下載
- 基于μCOSⅡ的CAN總線汽車儀表盤研制 1次下載
- 克服汽車儀表盤電源設計難題 3次下載
- 大彩串口屏控件教程5 - 串口屏表盤應用
- 汽車組合式儀表盤的渲染優化 10次下載
- ?電動汽車數字儀表盤背后的秘密 10次下載
- 汽車儀表盤的EMC解決方案詳細資料概述 10次下載
- 如何使用虛擬儀器實現汽車儀表盤的仿真設計 37次下載
- 基于LightTools的汽車儀表盤導光按鈕設計解析 1次下載
- 集成TPMS功能的電動汽車儀表盤設計解析 2次下載
- 集成TPMS功能的儀表盤設計方案解析 0次下載
- 基于汽車儀表盤中的高級圖形功能應用 13次下載
- 電子圖形儀表盤解決方案-瑞薩-彭總 16次下載
- 工業自動化儀表盤、柜、臺、箱_國家行業標準 10次下載
- 基于MC9S12HY32的電動汽車儀表盤設計 71次下載
- 一個嵌入式數據可視化工具——Serial Studio 614次閱讀
- 基于FreeRTOS+LVGL V8智能家居儀表盤設計 974次閱讀
- 1988年美國飛機儀表盤內部拆解 234次閱讀
- 艾為之家車規級36路RGB LED驅動芯片在汽車儀表盤中的應用 1687次閱讀
- 汽車儀表盤EMC問題剖析 473次閱讀
- 汽車信息娛樂、儀表盤和遠程信息處理需要靈活的穩壓器 640次閱讀
- 汽車儀表儀器車載設備解決方案案例簡介 2410次閱讀
- 具體介紹常見儀器儀表的防爆知識 6394次閱讀
- 儀表盤、儀表操作臺、PLC柜和DCS系統柜的配線基本技術要求 1.1w次閱讀
- 一種新型的儀表設計方案 6673次閱讀
- 開發汽車儀表盤的TMS470PLF221RFPQ1方案介紹 4814次閱讀
- 汽車儀表盤圖標大全_汽車儀表盤圖標圖解 32.4w次閱讀
- 汽車儀表盤維修_汽車儀表盤可以修理嗎_汽車儀表盤維修多少錢 6.2w次閱讀
- 汽車儀表盤圖標大全攻略一覽 25.3w次閱讀
- 揭秘汽車電子技術之汽車儀表盤MCU 5714次閱讀
下載排行
本周
- 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次下載 | 免費
評論
查看更多