SSID softAP ESP32 не является постоянным
Я хотел бы установить SSID Wi-Fi в setup(), чтобы я мог настроить его на основе MAC-адреса или чего-то подобного. (избегая использования ESP с одинаковым кодом и одинаковым SSID). Однако, поскольку для этого требуется константа, это кажется невозможным, или я что-то упустил?
Я использую platformIO, если это имеет значение...
@EbenenBonobo, 👍2
Обсуждение2 ответа
Параметр const
функции не определяет, что можно передать. Наоборот, это «обещание». функцией, что она не будет изменять данные, которые вы ей передаете.
В языке C при передаче "строки" (который на самом деле является массивом символов) в функцию, которую вы на самом деле не передаете в строку (как в содержимом). На самом деле вы просто передаете указатель на место в памяти, где хранится строка.
Функция вполне может внести изменения в переданную "строку", что приведет к изменению исходных данных в памяти. Во многих ситуациях это нежелательно.
Поэтому, пометив параметр как const
, вы сообщаете компилятору: "С этого момента данные, на которые указывает эта переменная, не должны изменяться". Все попытки записи в память с использованием этой переменной будут заблокированы компилятором.
Нет реальной разницы между, скажем, char *
и const char *
, кроме того, как компилятор обрабатывает попытки записи в них.
Когда вы передаете char *
функции, которая ожидает const char *
, указатель "обновляется" в константу, чтобы не было разрешено никаких попыток изменить данные.
Обратное не допускается — вы не можете (или не должны) пытаться преобразовать const char *
в char *
, как в некоторых системах ( систем с архитектурой «Принстон» с единым монолитным адресным пространством памяти) указатель может указывать на данные, хранящиеся во флэш-памяти, и попытка записи в них явно не удастся.
Функция, которую вы вызываете для установки SSID, просто обещает, что не будет пытаться изменить данные, которые вы ей передаете. Неважно, константа это или нет — и то, и другое будет рассматриваться как константа и не будет изменено.
Вам может подойти библиотека WifiManager, у нее есть портал авторизации для настройки подключения Wi-Fi на лету. Если я не ошибаюсь, у него есть довольно много вариантов конфигурации, чтобы настроить его по своему усмотрению, надеюсь, он сослужит вам хорошую службу.
- ESP32 открывает "captive portal" при подключении
- Автоматическая веб-страница ESP32 AP
- Не удается включить распознавание лиц на esp32 cam : CORRUPT HEAP: Bad head at 0x3ffe2eb4. Expected 0xabba1234 got 0x00000008 abort()
- Использование или создание подключения Wi-Fi Direct (P2P) на ESP8266
- Как назначить точке доступа ESP8266 имя хоста, которое может быть разрешено станциями?
- Код сканирования Wi-Fi для esp32 wroom 32
- Неудачные попытки входа в систему на SoftAP
- Сколько мА / ч в ESP8266-01 Работает в LiPo-аккумуляторе, если функция WI-FI постоянно включена
Параметр const говорит, что функция не будет изменять строку. он не требует, чтобы он был константным, @Juraj
не используйте platformIO, если это имеет значение... :), @DataFiddler
@DataFiddler, почему это? Мне нравится PlatformIO в vscode, он творит со мной чудеса!, @Ananas_hoi
Извините, @Ananas_hoi, просто (смешной?) ответ на «Я использую платформу IO, если это имеет значение ...». Я недостаточно знаю платформу IO, но я почти уверен, что условие *if* не будет применяться., @DataFiddler