電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>Serial Studio:串口設(shè)備的儀表盤軟件

Serial Studio:串口設(shè)備的儀表盤軟件

2023-06-13 | zip | 0.00 MB | 次下載 | 2積分

資料介紹

描述

您是否曾經(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年地面站軟件截圖如下

poYBAGSAhEeANucdAAJBvM7h6fM287.png
?

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

pYYBAGSAhEmAHPbCAAES-_6PulE274.jpg
?

如果您有興趣,可在此處獲取 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)出功能也不是很好(請參閱下面的屏幕截圖了解一下):

pYYBAGSAhFCAeC5TAAGCMmg6iKU410.jpg
?

這兩個(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上,此信息以下列方式顯示:

poYBAGSAhFOAbX_FAAD096xiNrA402.png
?

正如您可能推斷的那樣,每個(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)鏈接:

適用于 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)該會看到與此類似的屏幕:

pYYBAGSAhF6ATOn3AAENWC4Yz7s340.png
?

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

poYBAGSAhGCAEkXMAACsxJ419Jc635.png
?

如果您有任何疑問、想法或錯(cuò)誤報(bào)告,請隨時(shí)添加評論、聯(lián)系我或在 GitHub 上提出問題。希望互聯(lián)網(wǎng)上的一些隨機(jī)的人會發(fā)現(xiàn)這很有用:)


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)