Я пытаюсь создать мини-ретранслятор Wi-Fi, используя ESP32, но при попытке его создания постоянно получаю ошибку.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Я пытаюсь создать мини-ретранслятор Wi-Fi, используя ESP32, но при попытке его создания постоянно получаю ошибку.

Сообщение Anonymous »

Я здесь новичок, или лучше сказать, что понятия не имею об этом HCI (взаимодействии человека с компьютером).
Я новичок, но я хочу просто создать мини-репитер/расширитель маршрутизатора, который:
-позволяет устройству подключаться к точке доступа ESP32

-позволяет ESP32 быть посредником между устройством и Wi-Fi
Я немного разбираюсь в программировании (im an это студент), но я не копал слишком глубоко. Я заставил ChatGPT написать мне код для ESP32, чтобы сделать это.

Проблема в том, что:

-Arduino IDE не поддерживает NAT (трансляцию сетевых адресов). -ChatGPT

-ESP-IDF всегда отправляет мне ошибки, которые сбивают с толку ChatGPT.

-Я этого не понимаю, поэтому не могу отладить самостоятельно.

Я вставлю коды, написанные ChatGPT, ниже:
C:\Espressif\frameworks\esp-idf-v5.5.1\examples\get-started\wifi_hotspot\main\wifi_hotspot.c:

Код: Выделить всё

#include 
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_wifi.h"
#include "esp_event.h"
#include "esp_log.h"
#include "esp_netif.h"
#include "nvs_flash.h"
#include "esp_netif_nat.h"

#define AP_SSID         "ESP32_Hotspot"
#define AP_PASSWORD     "1111"         // empty for open hotspot
#define AP_MAX_CONN     4

#define STA_SSID        "eren nova"
#define STA_PASSWORD    "12453wtewd" //please note that this information is edited to not match the real one I put in the real code

#define STATUS_LED_PIN  2          // Built-in LED (change if your board differs)

static const char *TAG = "wifi_ap_sta_nat_led";

static void wifi_init(void)
{
ESP_ERROR_CHECK(esp_netif_init());
ESP_ERROR_CHECK(esp_event_loop_create_default());

esp_netif_t *sta_netif = esp_netif_create_default_wifi_sta();
esp_netif_t *ap_netif  = esp_netif_create_default_wifi_ap();

wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));

wifi_config_t sta_config = {
.sta = {
.ssid = STA_SSID,
.password = STA_PASSWORD,
.threshold.authmode = WIFI_AUTH_WPA2_PSK,
},
};

wifi_config_t ap_config = {
.ap = {
.ssid = AP_SSID,
.ssid_len = strlen(AP_SSID),
.channel = 1,
.password = AP_PASSWORD,
.max_connection = AP_MAX_CONN,
.authmode = WIFI_AUTH_OPEN
},
};

ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_APSTA));
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &sta_config));
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_AP, &ap_config));
ESP_ERROR_CHECK(esp_wifi_start());

ESP_LOGI(TAG, "AP+STA initialized: AP SSID:%s | STA SSID:%s", AP_SSID, STA_SSID);

esp_netif_nat_enable(sta_netif, ap_netif);
ESP_LOGI(TAG, "NAT enabled: devices on AP will have internet through STA");
}

void led_task(void *pvParameter)
{
gpio_reset_pin(STATUS_LED_PIN);
gpio_set_direction(STATUS_LED_PIN, GPIO_MODE_OUTPUT);

while (1) {
wifi_sta_list_t sta_list;
esp_err_t err = esp_wifi_ap_get_sta_list(&sta_list);
if (err != ESP_OK) {
vTaskDelay(pdMS_TO_TICKS(500));
continue;
}

int num_devices = sta_list.num;

if (num_devices == 0) {
// No devices: LED ON
gpio_set_level(STATUS_LED_PIN, 1);
vTaskDelay(pdMS_TO_TICKS(500));
} else {
// Blink pattern based on connected devices
for (int i = 0; i < num_devices && i < 4;  i++) { // max 4 blinks
gpio_set_level(STATUS_LED_PIN, 1);
vTaskDelay(pdMS_TO_TICKS(100));
gpio_set_level(STATUS_LED_PIN, 0);
vTaskDelay(pdMS_TO_TICKS(100));
}
// Long pause after the blink sequence
vTaskDelay(pdMS_TO_TICKS(3000));
}
}
}

void app_main(void)
{
esp_err_t ret = nvs_flash_init();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
ESP_ERROR_CHECK(nvs_flash_erase());
ret = nvs_flash_init();
}
ESP_ERROR_CHECK(ret);

wifi_init();

xTaskCreate(&led_task, "led_task", 2048, NULL, 5, NULL);

while (1) {
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
C:\Espressif\frameworks\esp-idf-v5.5.1\examples\get-started\wifi_hotspot\main\CMakeList.txt:

Код: Выделить всё

idf_component_register(
SRCS "wifi_hotspot.c"
INCLUDE_DIRS "."
REQUIRES esp_wifi esp_netif nvs_flash
)
C:\Espressif\frameworks\esp-idf-v5.5.1\examples\get-started\wifi_hotspot\CMakeList.txt:

Код: Выделить всё

cmake_minimum_required(VERSION 3.16)

include($ENV{IDF_PATH}/tools/cmake/project.cmake)

# Minimal build to speed things up
idf_build_set_property(MINIMAL_BUILD OFF)

project(wifi_hotspot)
После запуска возникает много ошибок

Код: Выделить всё

C:\Espressif\frameworks\esp-idf-v5.5.1\examples\get-started\wifi_hotspot>idf.py build
Именно здесь у меня возникли проблемы.
Надеюсь, кто-нибудь сможет мне помочь в этом.

Я также надеюсь, что никто не будет разочарован, если я не пойму инструкции.>

Подробнее здесь: https://stackoverflow.com/questions/798 ... -error-try
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»