ESP32网络连接失败

时间:2018-12-03 20:16:17

标签: arduino esp8266 spi

尝试构建示例应用程序以连接到MQTT服务器 遇到2种不同情况

情况1:如果使用Ethernet2库,则_client-> connect(this-> ip,this-> port)返回0。所有值都已检查。

情况2:下面将详细介绍编译错误。 如果我可以编译

案例1-说明: 使用Ethernet2,我可以编译和上传。我可以连接到WIFI,并在setup()函数中使用以下命令在网络上看到它:

EthernetClient ethClient;  
PubSubClient client;
void setup() {
  Serial.begin(115200);
  while (!Serial);
  WiFi.begin(ssid, password);
  delay(1500);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Establishing connection to WiFi..");
    delay(500);
  }

  ipIP =  WiFi.localIP() ; // 192.168.8.104 - good
  WiFi.macAddress(mac); // MAC returned - good
  // Connecting to MQTT Server
  client.setClient(ethClient); 
  client.setServer(server, 1883);
  client.setCallback(callback);
  while (!client.connected()) { .   //fails here, always 0
      Serial.print("Attempting MQTT connection...");
      if (client.connect("dev001")) {
            Serial.println("connected");
            // Once connected, publish an announcement...
            client.publish("garden/light","works");
       // and so on
       }

PubSubClient调用_client.connect,它来自基类Client:public Stream。 这是一个虚函数,我的C ++不足以知道其背后的代码以进行进一步调试。

<情况>下面说明情况2。所有依赖项似乎都需要SPI版本1,并且在与w5100.cpp有关的底部可以看到编译器问题。 我在网上看到了一些非常相似的情况,但对这些东西的了解还不够,无法解决。

CONFIGURATION: 
PLATFORM: Espressif 32 > Heltec WIFI LoRa 32
HARDWARE: ESP32 240MHz 320KB RAM (4MB Flash)
Library Dependency Finder -> 
LDF MODES: FINDER(chain) COMPATIBILITY(soft)
Collected 29 compatible libraries
Scanning dependencies...
Dependency Graph
|-- <PubSubClient> 2.7
|-- <Wire> 1.0
|-- <ESP8266_SSD1306> 4.0.0
|   |-- <Wire> 1.0
|   |-- <SPI> 1.0
|-- <SPI> 1.0
|-- <LoRa> 0.5.0
|   |-- <SPI> 1.0
|-- <WiFi> 1.0
|-- <Ethernet> 2.0.0
|   |-- <SPI> 1.0
Compiling .pioenvs/heltec_wifi_lora_32/lib677/Ethernet_ID872/utility/w5100.cpp.o
Compiling .pioenvs/heltec_wifi_lora_32/FrameworkArduino/HardwareSerial.cpp.o
.piolibdeps/Ethernet_ID872/src/utility/w5100.cpp: In static member function 'static uint16_t W5100Class::write(uint16_t, const uint8_t*, uint16_t)':
.piolibdeps/Ethernet_ID872/src/utility/w5100.cpp:315:22: error: no matching function for call to 'SPIClass::transfer(uint8_t [8], int)'
SPI.transfer(cmd, 4);
^

您能否给我一些想法,请问如何解决? 非常感谢 凯文

1 个答案:

答案 0 :(得分:2)

您实际上在使用以太网还是WiFi?您在代码中混合了两者,它们是两个独立的网络。您的代码正在连接到WiFi,所以我猜您实际上并不是在使用以太网。

如果您不使用以太网-几乎没有人在ESP32上使用以太网-那么findOrFail()将无法为您工作。

在这种情况下,您的代码应更像:

EthernetClient

您的输出还显示您使用的是ESP32,而不是ESP8266(如您的问题所示)。