IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Encore un problème de String avec wifi.begin(box,pass) [Arduino ESP32]


Sujet :

Arduino

  1. #1
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut Encore un problème de String avec wifi.begin(box,pass)
    Bonjour à tous
    J'ai besoin de rentrer d'une façon dynamique la clé d'une box et le mot de passe.
    Je stocke ceux dans la mémoire SPIFFS d'un ESP32.
    Mon problème est que mes variables créées en String:
    sont incompatibles avec la procédure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WiFi.begin(laBox, lePass);
    qui attend un pointeur vers une constante.
    Y a t'il une solution ?
    Merci

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 197
    Billets dans le blog
    47
    Par défaut
    Salut,

    Essaie avec c_str() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WiFi.begin(laBox.c_str(), lePass.c_str());
    Mais étais-tu vraiment obligé de passer par ces String ?

  3. #3
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut
    Mais étais-tu vraiment obligé de passer par ces String ?
    Je pense que non; il y a sûrement une solution avec un tableau de caractères. J'ai essayé mais je m'emmêle les crayons avec les pointeurs:
    Je déclare:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *laBox[], *lePass[]
    Puis pour charger mon tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    File fic;
        fic = SPIFFS.open("/ssid.txt","r");
        for(int i=0;i<fic.size();i++){
          laBox[i] = (char)fic.read();
        }
        fic.close();
    Là j'ai un message d'erreur:
    impossible d'assigner une valeur de type "char" à une entité de type "char *"C/C++(513)
    Et puis c'est tellement simple avec l'objet String
    Merci pour ton aide.

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 197
    Billets dans le blog
    47
    Par défaut
    Dans ce cas tu devrais pouvoir récupérer le ssid avec readString() (je crois qu'il faut prévoir un saut de ligne en fin de fichier ssid.txt) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    File fic;
        fic = SPIFFS.open("/ssid.txt", "r");
        if (fic) {
            Serial.println(fic.readString());
            fic.close();
        }
        else {
            Serial.println("Bug !"); 
        }

  5. #5
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut
    Merci F-leb cela a bien résolu mon problème.

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 197
    Billets dans le blog
    47
    Par défaut
    Aujourd'hui, on préfère utiliser le système de fichiers LittleFS, plus efficace que SPIFFS (avec une utilisation quasi-identique)...

  7. #7
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut Retour sur les problème de pointer avec des strings
    Je reviens sur mon incompréhension d'utilisation des pointers sur les tableaux de strings.
    Je crée un tableau ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const char *msg[2][28] PROGMEM = {"Touches non enregistrees   ",
                                      "Enregistrez la telecommande"};
    je crée une routine d'affichage ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //*************Affichage des messages roulants************************************
    void affMsgScroll(char *msg, uint16_t dure){
      matrice.displayClear();
      matrice.displayText(msg,PA_CENTER,VITESSE,dure,PA_SCROLL_LEFT,PA_SCROLL_LEFT);
    }
    Pour afficher un message je tente de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    affMsgScroll(msg[0],1000);
    Mais bien sûr cela se plante avec le message:
    const char *msg[2][28]
    l'argument de type "const char **" est incompatible avec le paramètre de type "char *"C/C++(167)
    Pouvez-vous m'expliquer la façon correcte de faire?
    merci

  8. #8
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 197
    Billets dans le blog
    47
    Par défaut
    Salut,

    This library is now part of Arduino esp32 core v2.

    Tu la trouves sur le Github d'Espressif : espressif/arduino-esp32/libraries/LittleFS/. Dans les exemples, tu as la procédure pour PlatformIO.

    Tu as peut-être à faire une mise à jour du core Arduino pour l'ESP32 (voir https://www.developpez.net/forums/d2.../#post11890785).

  9. #9
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 197
    Billets dans le blog
    47
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //*************Affichage des messages roulants************************************
    void affMsgScroll(const char *msg, uint16_t dure){
      matrice.displayClear();
      matrice.displayText(msg,PA_CENTER,VITESSE,dure,PA_SCROLL_LEFT,PA_SCROLL_LEFT);
    }
    à voir...

  10. #10
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut
    c'est bien la solution à mon problème.
    De plus j'ai modifié ma déclaration de tableau ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const char *msg[2] PROGMEM = {"Touches non enregistrees   ",
                                  "Enregistrez la telecommande"};
    Merci beaucoup F-leb

    Cordialement
    Michel

  11. #11
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 908
    Par défaut
    et sur ESP32 PROGMEM ne sert à rien, donc pas la peine de vous embêter avec ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    const char *msg[] = {"Touches non enregistrees   ",  "Enregistrez la telecommande"};
    const size_t nbMsg = sizeof msg / sizeof * msg; // ici 2 puisqu'on a 2 messages enregistrés dans le tableau

  12. #12
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut
    Merci JAY M
    En effet j'ai réussi à lire cette info quelque part: l'ESP32 ne gère pas PROGMEM.
    Cordialement
    Michel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème authentification radius avec wifi
    Par chocofusee dans le forum Windows Serveur
    Réponses: 9
    Dernier message: 26/05/2014, 08h44
  2. Problème pointer/string avec gcc
    Par nikobordx dans le forum C
    Réponses: 2
    Dernier message: 12/08/2011, 20h30
  3. Encore un problème d'échelle avec Matlab
    Par morpheusmg dans le forum Signal
    Réponses: 11
    Dernier message: 22/03/2011, 18h55
  4. Problème Connection String avec plusieurs projets.
    Par Nadiya dans le forum Windows Forms
    Réponses: 0
    Dernier message: 20/11/2008, 23h11
  5. Encore un probléme de date avec TADO !
    Par bNoureddine dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/02/2004, 18h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo