主頁 > .NET開發 > 阿杜諾和洛拉。并非所有位元組都被接收

阿杜諾和洛拉。并非所有位元組都被接收

2022-11-09 23:13:26 .NET開發

我正在與 Arduino 和 Lora 合作。Arduino A 有相機、收音機和 SD 卡。Arduino B 具有相同的設定,但沒有相機。

目標是將圖片從 A 發送到 B。下面的代碼應該從 SD 卡 A 中讀取 32 個位元組(感謝mmixLinus),并通過 LoRa 發送到 Arduino B,將這 32 個位元組保存到它的自己的SD卡。該檔案將一次發送 32 個位元組,直到其全部 53k 到達。

經過一些故障排除,并認為我正在丟失資料包,我決定計算發送的數量與接收的數量。他們匹配。

我還發送到控制臺每個資料包的位元組數。他們匹配。

但是,保存在接收 SD 卡中的結果檔案比發送 SD 卡上的原始檔案小。它無法使用。

我注意到的是,我期望每個資料包都是 32 位元組,除了最后一個可能更小。但是,即使發送和接收的位元組匹配,我也不確定為什么我的代碼不會占用每個檔案讀取的全部 32 個位元組。

這些是我的主要問題。

  1. 你能幫我找出我做錯了什么嗎?
  2. 什么是實作錯誤檢查的理想簡單方法,確保發送的每個資料包在收到時都經過檢查和驗證,并讓發送者知道它可以發送下一個資料包?

這是發件人的代碼。

oFile = SD.open("ring.jpg", FILE_READ); //open source file for read.
long cByteTotal = oFile.size(); //get total bytes
Serial.print("Original size: ");
Serial.println(cByteTotal);
while (cByteTotal > 0) {
  int length = cByteTotal < 32 ? cByteTotal : 32;
  if (length < 32) {
    Serial.println("Sending last packet."); //info
  }
  oFile.read(cArray, length); //read 32 bytes from file
  cArray[length] = '\0'; // terminate the char array
  sendMessage(String(cArray)); //send the file via Lora after casting to string
  delay(250); // just in case to give time to receiver to process
  cByteTotal -= length;
}
oFile.close();
Serial.println("Done Sending.");

void sendMessage(String cArray) {
  LoRa.beginPacket();
  LoRa.write(cArray.length());
  LoRa.write(cArray);
  LoRa.endPacket();
}

這是接收方的代碼。

void loop() {
  onReceive(LoRa.parsePacket());
}

void onReceive(int packetSize) {
  if (packetSize == 0) {
    return;
  }
  packageTotal  ;
  byte incomingLength = LoRa.read();
  String incoming = "";
  while (LoRa.available()) {
    incoming  = (char)LoRa.read();
  }
  if (incomingLength != incoming.length()) {
    // check length for error
    Serial.println("LENGHT [ERROR]"); // this does not get triggered, which is good.
    return; // skip rest of function
  } else {
    cFile = SD.open("wimage.jpg", FILE_WRITE);
    cFile.print(incoming);
    cFile.close();
  }
}

我正在使用以下Lora 庫

謝謝您的幫助!

uj5u.com熱心網友回復:

您在這里犯的主要錯誤是您將文??件內容視為字串,您絕對不應該這樣做。一個二進制檔案可以有0x00,字串終止符,這肯定會毀了你的午餐。

您首先需要做的是將 32 位元組塊按應有的方式處理,作為二進制 blob,然后使用write(const uint8_t *buffer, size_t size);. 此外,您正在使用LoRa.write(cArray.length());,它不會做任何事情:它不會告訴 LoRa 庫您正在發送多少位元組,并且接收器無論如何都知道接收了多少位元組。您的函式應如下所示:

void sendMessage(String cArray) {
  LoRa.beginPacket();
  LoRa.write(cArray, cArray.length());
  LoRa.endPacket();
}

接下來,傳輸本身。您正在while回圈傳輸,延遲非常小,至少有兩個原因太小了,并且沒有檢查接收器是否確實收到了塊 #x,并且正確接收了它。這會導致很多問題...

您已經有一個回圈,即 aptly-named loop(),因此您不需要另一個回圈。相反,在內部loop,從卡中讀取 32 個位元組,將它們發送到包含塊號、資料和基本 CRC 的資料包中。例如,添加資料包中的每個位元組,并將其用作 16 位數字,作為資料包的最后 2 個位元組。您將擁有 2 [計數器] 32 [資料] 2 [CRC] 的結構。

然后切換到“等待確認”模式。直到您收到接收器的回復,向您發送 4 個位元組,2 個用于索引,2 個用于 CRC,您什么都不做。如果發回的 CRC 錯誤,則不要增加計數器。如果 CRC 正確,則遞增。然后切換到發送模式。沖洗并重復。

在接收器上,您處于待機模式。當您收到一個資料包時,您計算 CRC 并進行比較——如果它不正確,您將其發回,然后回傳接收模式。如果正確,則將 32 個位元組保存在緩沖區內的正確位置。并回傳索引 CRC。最后你保存。

哦,這是receEIve,不是receive...

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/530471.html

標籤:C错误处理Arduino劳拉

上一篇:在C中產生帕斯卡三角形的最佳方法是什么

下一篇:在c中的函式之間傳遞變數而不使用全域變數

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • C#多執行緒學習(二) 如何操縱一個執行緒

    <a href="https://www.cnblogs.com/x-zhi/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2943582/20220801082530.png" alt="" /></...

    uj5u.com 2023-04-19 09:17:20 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    C#多執行緒學習(二) 如何操縱一個執行緒 執行緒學習第一篇:C#多執行緒學習(一) 多執行緒的相關概念 下面我們就動手來創建一個執行緒,使用Thread類創建執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒干什么事) 在C#中,執行緒入口是通過ThreadStart代理(delegate)來提供的 ......

    uj5u.com 2023-04-19 09:16:49 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    <a href="https://www.cnblogs.com/huangxincheng/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/214741/20200614104537.png" alt="" /&g...

    uj5u.com 2023-04-18 08:39:04 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    一:背景 1. 講故事 前段時間協助訓練營里的一位朋友分析了一個程式卡死的問題,回過頭來看這個案例比較經典,這篇稍微整理一下供后來者少踩坑吧。 二:WinDbg 分析 1. 為什么會卡死 因為是表單程式,理所當然就是看主執行緒此時正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ......

    uj5u.com 2023-04-18 08:33:10 more
  • SignalR, No Connection with that ID,IIS

    <a href="https://www.cnblogs.com/smartstar/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u36196.jpg" alt="" /></a>...

    uj5u.com 2023-03-30 17:21:52 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:15:33 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:13:31 more
  • C#遍歷指定檔案夾中所有檔案的3種方法

    <a href="https://www.cnblogs.com/xbhp/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/957602/20230310105611.png" alt="" /></a&...

    uj5u.com 2023-03-27 14:46:55 more
  • C#/VB.NET:如何將PDF轉為PDF/A

    <a href="https://www.cnblogs.com/Carina-baby/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2859233/20220427162558.png" alt="" />...

    uj5u.com 2023-03-27 14:46:35 more
  • 武裝你的WEBAPI-OData聚合查詢

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-03-27 14:46:16 more