在C+中的ESP32上连接wifi+; 我一直试图让我的ESP32与C++连接到WiFi。我有一个小问题,我一点也不明白。并最终将其连接到AWS物联网。我用ARDUIO本地语言完全没有问题,但是当试图用C++运行它时,我连WiFi连接都没有。

在C+中的ESP32上连接wifi+; 我一直试图让我的ESP32与C++连接到WiFi。我有一个小问题,我一点也不明白。并最终将其连接到AWS物联网。我用ARDUIO本地语言完全没有问题,但是当试图用C++运行它时,我连WiFi连接都没有。,c++,esp32,C++,Esp32,运行connectWifi()函数(arduino代码)时,当我在循环中读回localIP时,它很容易读回IP,我已经将它与其他代码完美地结合在一起。当尝试运行initialiseWifi()函数(C++)时,它似乎不起作用,并返回0.0.0.0的IP 我从一个ESP32 AWS IOT教程中得到了这个代码,使用VisualStudio PrPosio上找到的C++,并且我也不能让教程工作。< /P> 我觉得这是一个简单的错误,我对C++是新的,所以我希望有人能指出它,这样我就可以修复它了。p>

运行connectWifi()函数(arduino代码)时,当我在循环中读回localIP时,它很容易读回IP,我已经将它与其他代码完美地结合在一起。当尝试运行initialiseWifi()函数(C++)时,它似乎不起作用,并返回0.0.0.0的IP

我从一个ESP32 AWS IOT教程中得到了这个代码,使用VisualStudio PrPosio上找到的C++,并且我也不能让教程工作。< /P> 我觉得这是一个简单的错误,我对C++是新的,所以我希望有人能指出它,这样我就可以修复它了。p>

#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);
}
#包括“secrets.h”
#包括
#包括
#包括
#包括“WiFi.h”
#包括
#包括
#包括
#包括
#包括
#包括
#包括“freertos/freertos.h”
#包括“freertos/task.h”
#包括“freertos/event_groups.h”
#包括“esp_system.h”
#包括“esp_wifi.h”
#包括“esp\u事件\u循环.h”
#包括“esp_log.h”
#包括“esp\U vfs\U fat.h”
#包括“driver/sdmmc_host.h”
#包括“lwip/inet.h”
#包括“lwip/dns.h”
const int CONNECTED_位=位0;
WiFiClientSecure net=WiFiClientSecure();
MQTTClient=MQTTClient(256);
void messageHandler(字符串和主题、字符串和负载){
Serial.println(“传入:“+topic+”-“+payload”);
}
静态esp错误事件处理程序(void*ctx,system\u event\u t*event)
{
开关(事件->事件\u id){
案例系统事件开始:
esp_wifi_connect();
打破
案例系统\u事件\u状态\u获得\u IP:
打破
案例系统事件状态断开:
/*这是一个解决方案,因为ESP32 WiFi LIB目前没有
自动重新关联*/
esp_wifi_connect();
打破
违约:
打破
}
返回ESP_OK;
}
void初始化无线网络(void)
{
tcpip_适配器_init();
wifi_event_group=xEventGroupCreate();
ESP_错误检查(ESP_事件_循环_初始化(事件处理程序,NULL));
wifi_init_config_t cfg=wifi_init_config_DEFAULT();
ESP_错误检查(ESP_wifi_初始化(&cfg));
ESP_错误检查(ESP_wifi_设置_存储(wifi_存储_RAM));
//为结构分配存储
wifi_config_t wifi_config={};
//分配ssid和密码字符串(&S)
strcpy((char*)wifi_config.sta.ssid,“xxxxxxxxx”);
strcpy((char*)wifi_config.sta.password,“xxxxxxxxxx”);
wifi_config.sta.bssid_set=false;
//ESP_LOGI(标签,“设置WiFi配置SSID%s…”,WiFi_配置sta.SSID);
ESP_错误检查(ESP_wifi_设置_模式(wifi_模式_STA));
ESP_错误检查(ESP_wifi_set_配置(wifi_IF_STA和wifi_配置));
ESP_错误检查(ESP_wifi_start());
}
void connectWifi(){
WiFi.模式(WiFi_STA);
WiFi.begin(WiFi\u SSID、WiFi\u密码);
Serial.println(“连接到Wi-Fi”);
while(WiFi.status()!=WL_已连接){
延迟(500);
连续打印(“.”);
}
printf(“\n”);
printf(“你好,世界!\n”);
printf(“本地IP:”);
Serial.println(WiFi.localIP());
}
无效设置(){
Serial.begin(9600);
//连接WiFi();
初始化_wifi();
}
void循环(){
Serial.println(WiFi.localIP());
延迟(1000);
}

<代码> >“ARDUINO母语”是C++。你所说的“C++”并不是一种不同的语言,它是调用ESP IDF的,底层是AdUINO核心构建在上面的库。如果你能在Arduino通话中正常工作,为什么你还要麻烦你的
initialise_wifi()
code?因为我想尝试在不使用Arduino内核的情况下让它工作。因为我将要使用的许多其他函数都不会使用Arduino内核。您是否能够轻松组合并互换使用它们?