SSID softAP ESP32 не является постоянным

esp32 wifi espressif esp softap

Я хотел бы установить SSID Wi-Fi в setup(), чтобы я мог настроить его на основе MAC-адреса или чего-то подобного. (избегая использования ESP с одинаковым кодом и одинаковым SSID). Однако, поскольку для этого требуется константа, это кажется невозможным, или я что-то упустил?

Я использую platformIO, если это имеет значение...

, 👍2

Обсуждение

Параметр const говорит, что функция не будет изменять строку. он не требует, чтобы он был константным, @Juraj

не используйте platformIO, если это имеет значение... :), @DataFiddler

@DataFiddler, почему это? Мне нравится PlatformIO в vscode, он творит со мной чудеса!, @Ananas_hoi

Извините, @Ananas_hoi, просто (смешной?) ответ на «Я использую платформу IO, если это имеет значение ...». Я недостаточно знаю платформу IO, но я почти уверен, что условие *if* не будет применяться., @DataFiddler


2 ответа


1

Параметр const функции не определяет, что можно передать. Наоборот, это «обещание». функцией, что она не будет изменять данные, которые вы ей передаете.

В языке C при передаче "строки" (который на самом деле является массивом символов) в функцию, которую вы на самом деле не передаете в строку (как в содержимом). На самом деле вы просто передаете указатель на место в памяти, где хранится строка.

Функция вполне может внести изменения в переданную "строку", что приведет к изменению исходных данных в памяти. Во многих ситуациях это нежелательно.

Поэтому, пометив параметр как const, вы сообщаете компилятору: "С этого момента данные, на которые указывает эта переменная, не должны изменяться". Все попытки записи в память с использованием этой переменной будут заблокированы компилятором.

Нет реальной разницы между, скажем, char * и const char *, кроме того, как компилятор обрабатывает попытки записи в них.

Когда вы передаете char * функции, которая ожидает const char *, указатель "обновляется" в константу, чтобы не было разрешено никаких попыток изменить данные.

Обратное не допускается — вы не можете (или не должны) пытаться преобразовать const char * в char *, как в некоторых системах ( систем с архитектурой «Принстон» с единым монолитным адресным пространством памяти) указатель может указывать на данные, хранящиеся во флэш-памяти, и попытка записи в них явно не удастся.

Функция, которую вы вызываете для установки SSID, просто обещает, что не будет пытаться изменить данные, которые вы ей передаете. Неважно, константа это или нет — и то, и другое будет рассматриваться как константа и не будет изменено.

,

0

Вам может подойти библиотека WifiManager, у нее есть портал авторизации для настройки подключения Wi-Fi на лету. Если я не ошибаюсь, у него есть довольно много вариантов конфигурации, чтобы настроить его по своему усмотрению, надеюсь, он сослужит вам хорошую службу.

,