亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用請求從 NodeMCU 上的 micropython POST 時 ECONNABORTED

使用請求從 NodeMCU 上的 micropython POST 時 ECONNABORTED

繁花不似錦 2021-06-16 18:01:37
我有一個小型 Python 服務器,我可以向它發送命令以控制我的 LIFX 燈。從郵遞員那里,我可以隨心所欲地發送垃圾郵件,永遠不會看到錯誤,但我要做的是構建幾個墻壁開關,使用 NodeMCU 板觸發燈,從那里,我收到了 ECONNABORTED 錯誤大約五分之一的請求。我到處尋找解決方案,問題實際上是服務器配置錯誤或客戶端配置錯誤,但我想知道這里是否還有其他問題。我的服務器代碼很簡單,而且,正如我所說,它似乎在從我的 NodeMCU 板以外的任何地方觸發時都能工作。主要.py:from machine import Pin, resetfrom time import sleepimport urequests# set these two pins as required to up/downbuttonUp = Pin(4, Pin.IN, Pin.PULL_UP)buttonDown = Pin(5, Pin.IN, Pin.PULL_UP)light = "LightName"# button can be pressed, held or double pressed# press = 1x press, 1x release in .5 seconds# hold = 1x press, 0x release# double = 2x press, 2x release in .5 secondsdef detectPress():    pressed = False    press = 0    direction = 'up'    release = 0    if not buttonUp.value() or not buttonDown.value:        pressed = True    if not buttonDown.value():        direction = 'down'    while buttonUp.value() and buttonDown.value():        sleep(.01)  # wait for a button push    for x in range(8):        if pressed == False:            if not buttonUp.value():                direction = 'up'                pressed = True                press += 1            if not buttonDown.value():                direction = 'down'                pressed = True                press += 1        else:            if direction == 'up':                if buttonUp.value():                    pressed = False                    release += 1            else:                if buttonDown.value():                    pressed = False                    release += 1        sleep(.1)    return press, release, direction我懷疑這是一個套接字問題,但不知道還能做些什么來調試它。在重新設置時,我幾乎可以保證前 4 或 5 次傳輸會正常工作。我也幾乎可以保證按住按鈕(每秒左右觸發一個命令)會在 3 或 4 次傳輸后失敗。有時重試有效,但更多時候無效。大多數情況下,在失敗后,等待 5 秒然后重試會起作用,但有時不會。大多數情況下,長時間延遲(> 1 分鐘)后的初始按下會起作用,但有時不會。
查看完整描述

2 回答

?
12345678_0001

TA貢獻1802條經驗 獲得超5個贊

在嘗試了所有我能想到的方法來解決這個問題后,我得出的結論是 ESP8266 無法處理來自服務器的初始握手。我相信它可能只是無法管理網絡上的流量,所以它會卡住。在服務器上運行 wiresharkTCP Spurious Retransmission當我收到失敗的響應時,我看到了幾個s。


我訂購了一塊 ESP32 板,這應該可以讓我測試我的理論。


編輯:我終于發現問題是 urequests 在所有地方都打開了套接字。因此我們需要正確關閉響應:


response = urequests.post(url, ...)


... 


response.close()

這解決了我的問題,盡管我無法解釋的是為什么套接字在帖子末尾沒有關閉,這似乎是庫的功能。


查看完整回答
反對 回復 2021-06-22
  • 2 回答
  • 0 關注
  • 492 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號