Ошибка подключения к сети ESP32 - PullRequest
0 голосов
/ 03 декабря 2018

Попытка создать пример приложения для подключения к серверу MQTT. Обнаружение 2 различных ситуаций

Случай 1: _client-> connect (this-> ip, this-> port) возвращает 0, если я использую Ethernet2библиотека.Все значения были проверены.

Случай 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 голосов
/ 04 декабря 2018

Вы на самом деле используете Ethernet или WiFi?Вы смешиваете два в своем коде, и это две отдельные сети.Ваш код подключается к WiFi, поэтому я предполагаю, что вы на самом деле не используете ethernet.

Если вы не используете ethernet - и почти никто не использует ESP32 - тогда нет никакого способа EthernetClientбудет работать для вас.

В этом случае ваш код должен выглядеть примерно так:

WiFiClient wifiClient;  
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(wifiClient); 
  client.setServer(server, 1883);

Кроме того, ваш вывод говорит, что вы используете ESP32, а не ESP8266 (как в вашем вопросе).

...