Arduino Wifi работает в одну сторону, но не в другую? (ESP32) (Возможная проблема с типом переменной)
Я работаю над кодом, который принимает входные данные от последовательного монитора и подключается к Wi-Fi, и у меня возникли проблемы.
Мой SSID для моего Wi-Fi — «SamF», но по какой-то причине Arduino принимает его только тогда, когда я инициализирую его сверху, а не тогда, когда я принимаю его из последовательного монитора, хотя они одинаковы..
Пример. Следующий код работает:
#include <WiFi.h>
char ssid[] = "SamF"; //ИЛИ const char* = "SamF"
char pass[] = "secretPassword";
void setup()
{
WiFi.begin(ssid, pass);
}
void loop () {}
Код ниже не работает..
#include <WiFi.h>
char pass[] = "secretPassword";
void setup()
{
ssidSerial = my code that receives Serial input and converts to char
for(int k=0;k<=3;k++){
ssidPlaceHolder[k]=ssidSerial[k];
}
const char* ssid = ssidPlaceHolder;
WiFi.begin(ssid, pass);
}
void loop () {}
Все отлично компилируется, я отлаживал с помощью Serial.print, и они оба отображают «SamF», а sizeof(ssid) для обоих равен 4... так что я не уверен, почему один работает, а другой нет? Есть идеи?
Заранее спасибо за любую помощь, и если кому-то понадобится код после того, как я закончу, я буду более чем рад поделиться им на git!
@AceSammy, 👍0
Обсуждение1 ответ
Лучший ответ:
Базовая строка в C — это массив символов, завершающийся 0. Все функции, принимающие char* или const char*, используют этот 0 для определения конца строки, поскольку другой информации о длине этой строки нет.
В вашем вопросе вы копируете символы из одного буфера символов в другой, но не устанавливаете конечный 0, поэтому функция begin
принимает данные после указателя pass
до некоторой случайной ячейки памяти с 0.
- ESP32 - "Детектор Браунаута был активирован" при запуске Wi-Fi
- Контакты RX и TX на esp32
- Максимальное количество подключений точки доступа ESP32: 4 или 10?
- Почему OTA не работает с платой ESP32-CAM Ai-Thinker?
- ESP32 открывает "captive portal" при подключении
- Аналоговое чтение не работает при использовании WiFi
- Автоматическая веб-страница ESP32 AP
- Чтение данных из Google Таблиц с помощью Nodemcu
добавьте завершающий 0 к концу ssidPlaceholder. Для строки из 4 символов требуется массив из 5 символов, чтобы пятая позиция была установлена на 0., @Juraj
почему вы копируете строку из ssidSerial в ssidPlaceHolder и для чего происходит присвоение указателю
ssid
?, @JurajСпасибо за ответ, Юрай. Я попробую добавить завершающий 0 к переменной, как только приду домой, и сообщу, что получится. Я скопировал его, потому что ssidSerial добавляет в конец ненужные данные. Поскольку я использую Bluetooth Serial, ssidSerial — это «мусорный символ SamF», а мне нужен был «SamF», поэтому я его и копирую., @AceSammy
просто для большей ясности, после получения последовательных данных Bluetooth переменная ssidSerial становится "мусорным символом/данными SamF" длиной 10, что, как я думал, все испортит. Библиотека Wi-Fi принимает данные в форме указателя, поэтому она там и есть, я знаю, что это то же самое, что и просто ssidPlaceHolder, но я подумал, что это поможет, @AceSammy
возможно, вы отправляете символ(ы) новой строки \n или \r\n, а не мусор, @Juraj
интересно... я распечатаю шестнадцатеричное значение, чтобы увидеть, какие именно дополнительные данные, @AceSammy
->Так что проблема была в том, что я не завершил персонажа, я не знал, что вам нужно вручную завершить их по какой-то причине. Спасибо за ответ, пожалуйста, ответьте на вопрос ниже, чтобы я мог выбрать ваш ответ, а вы могли получить репутацию! ->Кроме того, если вам интересно или любопытно, "мусорные данные" в конце массива были какими-то символами и отрицательными подтверждениями, это было ",@NAK? NAK". Что может исходить от Bluetooth ESP32? Может быть, так Bluetooth заканчивает свое сообщение, я не слишком хорошо разбираюсь в сетях. Спасибо еще раз!, @AceSammy