簡體   English   中英

Arduino Ethernet Shield client.connect() 總是返回錯誤

[英]Arduino Ethernet Shield client.connect() always returns error

我一直在尋找這個問題幾天,但仍然沒有找到答案。

我正在嘗試根據 Arduino IDE 提供的示例代碼與 arduino 擴展板建立簡單的 Webclient 連接。 這是我嘗試執行的簡化版本:

#include <Ethernet.h>
#include <SPI.h>


byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte server[] = { 173 ,194, 46, 34 }; // Google

EthernetClient client;

void setup()
{
  Ethernet.begin(mac);
  Serial.begin(9600);

  delay(1000);

  Serial.println(Ethernet.localIP());

  Serial.println("connecting...");

  if (client.connect(server, 80)) {
    Serial.println("connected");
    client.println("GET /search?q=arduino HTTP/1.0");
    client.println();
  } else {
    Serial.println("connection failed");
  }
}

void loop()
{
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    for(;;)
      ;
  }
}

並且總是得到答案:

192.168.0.103
connecting...
connection failed

disconnecting.

這意味着 client.connect(server, 80) 失敗了。 我嘗試了幾個 IP 地址,結果都一樣。 盾牌工作正常,因為我已經嘗試了 WebServer 示例,而且似乎工作得很好。

硬件上的 PS:我正在使用基於 W5100 的 Arduino UNO R3 和以太網擴展板

有什么建議?

我查看了以太網庫的源代碼,假設您有最新版本的庫。 在我看來,Arduino EthernetClient connect()函數需要一個IPAddress對象或一個帶有遠程主機名稱的字符串( char * )。 您正在向它傳遞一個字節數組,我的猜測是它可能將其解釋為字符串。 嘗試改為如下聲明server全局變量:

IPAddress server(173 ,194, 46, 34);

如果它有效,則表明您可能從中獲取代碼的官方文檔已過時。

此外,您可以嘗試將所有其他參數作為IPAddress對象提供給begin()函數,以便不使用 DHCP,並且您可以排除自動配置問題。 原型是:

void begin(uint8_t *mac_address, IPAddress local_ip, IPAddress dns_server, IPAddress gateway, IPAddress subnet);

這么晚才回復很抱歉。

只需在調用client.connect()之前添加 6 秒的延遲

所以初始化以太網屏蔽需要時間...... - 根據經驗

我設法提出了一種解決方法。 似乎 client.connect 僅在第一次調用時失敗。 所以我在 1 秒延遲后(在進行真正的呼叫之前)添加了一個虛擬呼叫。

這並沒有回答問題,但確實解決了問題。 歡迎任何關於為什么會發生這種情況的反饋。

delay(1000);
client.connect(server, 80); // Dummy call

好吧,我的解決方案是自己把所有的配置; google dns(8.8.8.8)、網關、子網、ip。 我認為主要的技巧是在 Ethernet.begin 之后有一個甜蜜的延遲。 我給出了 3000 的延遲,以便可以很好地建立連接並親自動手......

我的客戶端代碼遇到了類似的問題,直到我發現是我的防病毒防火牆阻止了 arduino 的客戶端連接。

我在我的防病毒軟件中添加了一個例外,現在它工作正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM