在C ++中的ESP32上连接wifi

时间:2020-09-18 07:47:15

标签: c++ esp32

我一直试图用C ++将ESP32连接到Wifi。我有一个小问题,一点都不明白。并最终将其连接到AWS IOT。我可以使它们与Arduino本地语言完美配合,没有任何问题,但是当尝试使其与C ++一起运行时,我什至无法连接wifi。

当我在运行connectWifi()函数(arduino代码)时在循环中重新读取localIP时,它可以轻松地读取IP,并且我已经将其与其他代码完美地与AWS IOT一起使用。尝试运行InitializeWifi()函数(C ++)时,它似乎不起作用,并且返回的IP为0.0.0.0。

我是从Visual Studio PlatformIO上使用C ++的ESP32 AWS IOT教程中获得此代码的,而我也无法使该教程正常工作。

我觉得这是一个简单的错误,我是C ++的新手,所以希望有人可以指出来,以便我进行修复!

#include "secrets.h"
#include <WiFiClientSecure.h>
#include <MQTTClient.h>
#include <ArduinoJson.h>
#include "WiFi.h"
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <unistd.h>
#include <limits.h>
#include <string.h>

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/event_groups.h"
#include "esp_system.h"
#include "esp_wifi.h"
#include "esp_event_loop.h"
#include "esp_log.h"
#include "esp_vfs_fat.h"
#include "driver/sdmmc_host.h"
#include "lwip/inet.h"
#include "lwip/dns.h"

const int CONNECTED_BIT = BIT0;

WiFiClientSecure net = WiFiClientSecure();
MQTTClient client = MQTTClient(256);

void messageHandler(String &topic, String &payload) {
  Serial.println("incoming: " + topic + " - " + payload);
}

static esp_err_t event_handler(void *ctx, system_event_t *event)
    {
        switch(event->event_id) {
        case SYSTEM_EVENT_STA_START:
            esp_wifi_connect();
            break;
        case SYSTEM_EVENT_STA_GOT_IP:
           
            break;
        case SYSTEM_EVENT_STA_DISCONNECTED:
            /* This is a workaround as ESP32 WiFi libs don't currently
            auto-reassociate. */
            esp_wifi_connect();
           
            break;
        default:
            break;
        }
        return ESP_OK;
    }

void initialise_wifi(void)
    {
        tcpip_adapter_init();
        wifi_event_group = xEventGroupCreate();
        ESP_ERROR_CHECK( esp_event_loop_init(event_handler, NULL) );
        wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
        ESP_ERROR_CHECK( esp_wifi_init(&cfg) );
        ESP_ERROR_CHECK( esp_wifi_set_storage(WIFI_STORAGE_RAM) );
        //Allocate storage for the struct
        wifi_config_t wifi_config = {};

        //Assign ssid & password strings
        strcpy((char*)wifi_config.sta.ssid, "XXXXXXXXXX");
        strcpy((char*)wifi_config.sta.password, "XXXXXXXXXXX");
        wifi_config.sta.bssid_set = false;
       // ESP_LOGI(TAG, "Setting WiFi configuration SSID %s...", wifi_config.sta.ssid);
        ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) );
        ESP_ERROR_CHECK( esp_wifi_set_config(WIFI_IF_STA, &wifi_config) );
        ESP_ERROR_CHECK( esp_wifi_start() );
    }

void connectWifi() {
        WiFi.mode(WIFI_STA);
        WiFi.begin(WIFI_SSID, WIFI_PASSWORD);

        Serial.println("Connecting to Wi-Fi");

        while (WiFi.status() != WL_CONNECTED){
            delay(500);
            Serial.print(".");
        }

        printf("\n");
        printf("Hello world!\n");
        printf("Local IP: ");

        Serial.println(WiFi.localIP());
    }

void setup() {
  Serial.begin(9600);
  //connectWifi();
  initialise_wifi();
}

void loop() {
  Serial.println(WiFi.localIP());
  delay(1000);
}

0 个答案:

没有答案