Ошибка типа переменной

b_calavasov
Offline
Зарегистрирован: 11.01.2019

Дано:

Пример из стандартной библиотеки WiFi.h, в котором в самом начале объявляются две переменные:

// Please input the SSID and password of WiFi
const char* ssid     = " ";           //
const char* password = " ";           //

Я, как честный Буратино, вставляю в кавычки имя своей Wi-Fi сети, а затем - PublickKey, пароль то бишь...

Пускаю на компиляцию - здрасьте-нате:

invalid conversion from 'const char*' to 'char*' [-fpermissive]

Указывают на строку с инициализацией Wi-Fi модуля:

 WiFi.begin(ssid, password);

...и подчеркивают переменную 'password'.

Но мы же умные! Мы же знаем, что в библиотеке надо посмотреть, как именно объявлены типы данных для этой процедуры! Смотрю:

int WiFiClass::begin(char* ssid, const char *passphrase){}

И вот тут я уже понимаю, что ничего не понимаю! А разве в самом начале, еще перед всеми Void, не было человеческим языком С++ объявлено, что переменная 'password' имеет именно тот тип, который нужен процедуре?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, скетч секретный, полный текст сообщения - секретный, а потом и причина проблемы - тоже секретна

b_calavasov
Offline
Зарегистрирован: 11.01.2019

Сказано выше, что пример из библиотеки WiFi.h. Или на свете существует множество разных библиотек WiFi.h для Arduino? Покажите мне, я только одну во всем интернете нашел. А cкетч для примера ньюбай может выбрать только один - WiFiclient.ino

/*
 *  This sketch sends data via HTTP GET requests to data.sparkfun.com service.
 *
 *  You need to get streamId and privateKey at data.sparkfun.com and paste them
 *  below. Or just customize this script to talk to other HTTP servers.
 *
 */

#include <WiFi.h>

const char* ssid     = "your-ssid";
const char* password = "your-password";

const char* host = "data.sparkfun.com";
const char* streamId   = "....................";
const char* privateKey = "....................";

void setup()
{
    Serial.begin(115200);
    delay(10);

    // We start by connecting to a WiFi network

    Serial.println();
    Serial.println();
    Serial.print("Connecting to ");
    Serial.println(ssid);

    WiFi.begin(ssid, password);

    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }

    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
}

int value = 0;

void loop()
{
    delay(5000);
    ++value;

    Serial.print("connecting to ");
    Serial.println(host);

    // Use WiFiClient class to create TCP connections
    WiFiClient client;
    const int httpPort = 80;
    if (!client.connect(host, httpPort)) {
        Serial.println("connection failed");
        return;
    }

    // We now create a URI for the request
    String url = "/input/";
    url += streamId;
    url += "?private_key=";
    url += privateKey;
    url += "&value=";
    url += value;

    Serial.print("Requesting URL: ");
    Serial.println(url);

    // This will send the request to the server
    client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                 "Host: " + host + "\r\n" +
                 "Connection: close\r\n\r\n");
    unsigned long timeout = millis();
    while (client.available() == 0) {
        if (millis() - timeout > 5000) {
            Serial.println(">>> Client Timeout !");
            client.stop();
            return;
        }
    }

    // Read all the lines of the reply from server and print them to Serial
    while(client.available()) {
        String line = client.readStringUntil('\r');
        Serial.print(line);
    }

    Serial.println();
    Serial.println("closing connection");
}

 

Гриша
Offline
Зарегистрирован: 27.04.2014

b_calavasov пишет:

 Или на свете существует множество разных библиотек WiFi.h для Arduino? Покажите мне, я только одну во всем интернете нашел. 

на этом ресурсе смотрели? и в этом месте

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b_calavasov пишет:

Или на свете существует множество разных библиотек WiFi.h для Arduino? 

Или да.

b_calavasov пишет:

Покажите мне, я только одну во всем интернете нашел.

Фига-се! А Вы хоть что-нибудь в Интернете умеете находить? Ну, хоть рекламу там или порнуху?

Вот, две: первая, вторая. И, уверяю Вас, есть ещё штук пять, как минимум.

b_calavasov пишет:

А cкетч для примера ньюбай может выбрать только один - WiFiclient.ino

Я должен был об этом догадаться?

----------

В общем, я понял Ваш пост так: чтобы помочь Вам правильно, я должен был найти библиотеку, догадаться какой пример Вы взяли, угадать что Вы в нём поменяли, а потом решить Вашу проблему. 

А Вы, часом, ухи не объелись?

(P.S. Если бы Вы, вместо того, чтобы читать мне нотации и учить как правильно помогать, просто выложили скетч и сообщение об ошибке, проблема уже была бы решена. Вот и думайте, как себя вести на форумах и не забывайте всем рассказывать какая я сволочь. Ну или о том, что я сам не знаю ответа, а здесь только щёки надуваю).

b_calavasov
Offline
Зарегистрирован: 11.01.2019

2Гриша:

На гитхабе в разделе issues упоминания такой проблемы нет. На Arduino.cc вообще не видно обсуждений - только сама библиотека лежит.

b707
Offline
Зарегистрирован: 26.05.2017

b_calavasov - компилятор у вас ругается не на переменную password. а на ssid - а вот у них как раз типы в библиотеке и в вашем скетче разные

А вообще - вместо того чтоб ругаться вбили бы текст ошибки в Гугль - я например нашел ответ в первой же ссылке

b_calavasov
Offline
Зарегистрирован: 11.01.2019

To b707:

Спасибо! Такой совет я тоже нашел (исправить тип для первой переменной), но тогда при компиляции одна ошибка меняется на другую:

ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]

При этом, правда, скетч копмилируется, но WiFi все равно не работает должным образом: на Access Point даже не видно попыток подключения от платы. Т.е. WiFi все равно не стартует.

Я бы посыпал голову пеплом и постоянно каялся, но это все - стандартные примеры из совершенно стандартной библиотеки из совершенно стандартного средства разработки - Arduino IDE. Как так?

b707
Offline
Зарегистрирован: 26.05.2017

b_calavasov пишет:

Я бы посыпал голову пеплом и постоянно каялся, но это все - стандартные примеры из совершенно стандартной библиотеки из совершенно стандартного средства разработки - Arduino IDE. Как так?

да очень просто - версия компилятора и его настройки от версии к версии меняются, а примеры в библиотеках остаются старые. Вот и текст этого примера стал несовместим с новыми версиями Ардуино ИДЕ.

Ошибка стандартная, решение ее есть в Гугле

kalapanga
Offline
Зарегистрирован: 23.10.2016

b_calavasov, вы бы хоть сказали, что у Вас за wi-fi на ардуино? Только не говорите, что стандартный!

В природе существует WiFi Shield. Библиотека WiFi,  имеющаяся на arduino.cc, рассчитана на работу с этим шилдом. И там же есть примеры для неё, и синтаксис там правильный.

А Ваш пример, по-моему от ESP, и он для другой библиотеки писан. Ошибок компилятор выдаёт далеко не одну - очевидно, что эти библиотека и скетч не родные! Или уж очень разных версий.

Я это всё к тому, что хоть может они все и делают практически одно и то же, но считать, что существует единственная "стандартная" библиотека WiFi - большое заблуждение.

b_calavasov
Offline
Зарегистрирован: 11.01.2019

Проблема решена. На не-скажу-какой-по-счету странице Гугла было найдено решение. Тривиально простое. Объявление этих двух несчастных переменных надо было написать по-другому:

char ssid[]     = "my_AP";
char password[] = "my_pass"; 

После этого компилятор не выдает ни одной ошибки. Собственно об этом я только и спрашивал: как правильно объявить переменные.

2 kalapanga:

Нет, ошибка выдавалась одна и только та, которую я указал.

Да, это не стандартный шилд от ArduinoUno, а интегрированный в ESP32 модуль. Но к нему заявлена в поддержку та же самая библиотека 'WiFi.h by Arduino', более того, в самой библиотеке указана совместимость со следующими платформами: Atmel AVR, Atmel SAM, Espressif 32, Espressif 8266, Intel ARC32, Microchip PIC32, Nordic nRF51, Nordic nRF52, ST STM32, Teensy, Tl MSP430.

b707
Offline
Зарегистрирован: 26.05.2017

b_calavasov пишет:

Проблема решена. На не-скажу-какой-по-счету странице Гугла было найдено решение.

ну молодец - нашел-таки. У меня этот ответ был на первой странице поиска. Хотя возможно я просто знал, что искать :)

b_calavasov
Offline
Зарегистрирован: 11.01.2019

2 b707:

Спасибо! Прямо на душе как-то теплее стало! Очень греет, что пока ты тратишь время на поиск, кто-то уже нашел, а теперь сидит довольный и ждет, когда же ты сам найдешь ответ... Это так приятно!

Вообще, при каждом обращении за помощью на этом форуме почему-то вспоминается старый анекдот... Уж не знаю даже и почему...

В один из моментов Развитого Социализма в СССР по торговому ведомству объявили "месячник заботы о покупателях", т.е. когда напрямую отказывать покупателям нельзя, и говорить "Товара нет!" тоже нельзя... а надо вести себя вежливо и обходительно.

И вот приходит супружеская пара в Универсам покупать женское пальто... А им продавец: "А с какой сумочкой вы носить пальто собираетесь? А с какими туфлями? А с какой прической? А шарфик/кофточка у вас какие? А шляпка? Будет гораздо лучше, если вы наденете все это, сделаете прическу и в этом всем к нам придете - мы сразу вам пальтишко-то и подберем!"

Удивленная пара разворачивается и идет к выходу, а им навстречу - мужик с унитазом в обнимку. На недоуменные взгляды и возгласы отвечает: "Да они уже и про цвет кафеля в моём туалете спрашивали, и ж$$у я им показывал... вот унитаз несу - может хоть теперь туалетную бумагу продадут!"

К чему этот анекдот вспоминается - даже и не знаю...

sadman41
Offline
Зарегистрирован: 19.10.2016

К тому, что вы форум с универсамом постоянно пытаетесь путать.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

и жопу готовы показать, только-бы бумагу продали.

Гриша
Offline
Зарегистрирован: 27.04.2014

b_calavasov пишет:

Вообще, при каждом обращении за помощью на этом форуме почему-то вспоминается старый анекдот... Уж не знаю даже и почему...

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

форум создан помогать и делиться опытом, но никто не обещал, что первый же человек будет волшебником и решит все проблемы ТС. И некоторые вещи кажутся очевидными для ТС, и совсем не очевидными для постороннего человека. 

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

b_calavasov пишет:

Вообще, при каждом обращении за помощью на этом форуме 

Опять начал учить как тебе правильно помогать? Один старожил тебя за это уже послал нах, добиваешься чтобы и все остальные послали?

b707
Offline
Зарегистрирован: 26.05.2017

как у них всех, блин, башню-то срывает от того, что не могут освоить "детский конструктор" Ардуино. Типа все должно быть легко и просто...

Только никому не приходит в голову. что этот "детский конструктор" - для программистов. А если ты не программист, то никаких скидок на "детство" - учиться придется по-взрослому.

bwn
Offline
Зарегистрирован: 25.08.2014

b707 пишет:

Только никому не приходит в голову. что этот "детский конструктор" - для программистов. А если ты не программист, то никаких скидок на "детство" - учиться придется по-взрослому.

Да ну нахрен. На 99% обычные тривиальные задачи и программистом-математиком для них быть не нужно. Просто голову включи, распиши последовательность действий и переведи ее в полсотни операторов языка. Возможно будет коряво и неоптимально, но главное, работоспособно. А для хобби ничего иного и не нужно. Повысится скилл, появится желание, перепишешь красивее. ИМХО.

Гриша
Offline
Зарегистрирован: 27.04.2014

bwn пишет:

Да ну нахрен. На 99% обычные тривиальные задачи и программистом-математиком для них быть не нужно. Просто голову включи, распиши последовательность действий и переведи ее в полсотни операторов языка. Возможно будет коряво и неоптимально, но главное, работоспособно. А для хобби ничего иного и не нужно. Повысится скилл, появится желание, перепишешь красивее. ИМХО.

не совсем согласен, обычно из-за отсутствия знаний, новички ставят недостижимые задачи и наоборот - кто с опытом, частенько недооценивает своих возможностей... Я досих пор тока if , for применяю :))) и ничего, часы с термометром прекрасно это переносят, даже есть настройка даты и времени на 2х кнопках и это все в atmege8 с saa1064 на борту... и это я уже не первый год ХОББИ свое развиваю. А новички, частенько, сразу начинают сотовый телефон "изобретать" из "говна и палок" если и ошибаюсь, то не очень сильно...

bwn
Offline
Зарегистрирован: 25.08.2014

Гриша пишет:

 А новички, частенько, сразу начинают сотовый телефон "изобретать" из "говна и палок" если и ошибаюсь, то не очень сильно...

Умные шлёмы это отдельная песня. Я про адекватномыслящих, а то b707 такие страсти понаписал, я  ардуину чуть в окно не выкинул.))))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

bwn пишет:
я  ардуину чуть в окно не выкинул.))))
Значит, какой-то пацанёнок её не найдёт, не заинтересуется "а что это?" и мир не получит нового Лебедева или Глушкова.

Вот так некоторые не в меру уравноешенные люди и губят прогресс :(((

bwn
Offline
Зарегистрирован: 25.08.2014

ЕвгенийП пишет:

Значит, какой-то пацанёнок её не найдёт, не заинтересуется "а что это?" и мир не получит нового Лебедева или Глушкова.

Вот так некоторые не в меру уравноешенные люди и губят прогресс :(((

Эт да, эт конешно, но сейчас бесполезно, снегу каждое утро - вагон. Весной обдумаю, как помочь прогрессу.)))

sadman41
Offline
Зарегистрирован: 19.10.2016

С другой стороны - может это паренек не станет злым гением и не уничтожит мир, а будет простым дворником.