我正在構建一個需要從運行django web應用程序的Raspberry Pi服務器狀態的arduino項目。該Web應用程序很簡單,它將一個開關的狀態存儲在數據庫中(True或False意思是On或Off)。我有一個視圖,返回簡單的字符串,狀態爲「狀態:1」或「狀態:0」。Django http有時會響應包含unicode字符的長字符串
問題是,有時來自服務器的響應是由包含unicode字符的長字符串組成的。當我從Arduino IDE串行監視器複製粘貼它們時,我不知道這些字符,它們看起來像這樣:'⸮'。 arduino代碼重複加載此頁面並檢查狀態以更新項目中的硬件。這個字符串的長度是完全隨機的,有時甚至是無限的。發生也是隨機的,所以我無法預測它何時發生,爲什麼會發生。
它造成我的問題是,我解析從我的arduino服務器的響應,當這個無限字符串發生板上的程序凍結,因爲它永遠解析它實際。這簡直是不能接受的。
讀取從Arduino的服務器響應的代碼是:
while(client.connected() || client.available()){
char c = client.read();
Serial.print(c);
}
這不是我用解析響應代碼,它只是代碼我用來找出由outputing是什麼問題響應。我正在連接串行監視器窗口的屏幕,以便您可以看到問題(問題結束時)。爲了解析響應,我使用了TextFinder。
創建在Django響應視圖代碼:
def state(request, room_name):
room = Light.objects.get(light_name=room_name)
out = ""
if room.light_status:
out = "Status:1\t"
else:
out = "Status:0\t"
return HttpResponse(out)
做任何你有任何想法,這可能是造成這個問題呢?
我還有一個問題可能與這個問題有關,但我不確定。有時候響應值是錯誤的,導致LED閃爍(只是在隨機時間進行一次迭代,這可能是由服務器知道的延遲引起的)。
編輯:我認爲該字符的ASCII值可能有一定的用處。它是255(最後一個ASCII字符)。
The screen of the response in Arduino Serial Monitor
out是字符串故意,HttpResponse需要字符串返回相同的方式,它需要以字符串形式的HTML頁面,如果我想要完整的網頁。 這就是問題,我輸出的字符串中沒有非ASCII字符,它是硬編碼的字符串,因此不能有任何字符。 你的意思是哪個白色空格? – Dominik
我給出的鏈接是這個人正在使用'white-space'替換非ascii字符,所以你可以只使用一個空字符串''''。 –
是的,太棒了!但它仍然不能解釋爲什麼如果我將硬編碼字符串作爲不包含任何非ascii字符的輸出發送非ASCII字符。我正在以「狀態:1」格式響應字符串,那裏有沒有非ascii字符? – Dominik