ESP32 Wifi mode AP

Bonjour,

ESP32 + Wifi ......

Les tests se font avec une Lolin32 (modèle qui a l'usb et prise batterie à 90°).

1 Le décor : Je fais Je recopie mot à mot un exemple basique en mode point d'accès.
Ça fonctione.

2 Je fais une manip à la c*n : je prends ma tablette (android), je mets en route l'appli Wifi Analyseur et j'observe que mon AP, de ssid "Dudule", occupe le double de bande passante par rapport aux box détectées (agrume et autres).

3 Je teste la variation de niveaux. Les mesures de niveaux avec Wifi Analyser sont à la louche pas trop précise, mais suffisante pour dire que globalement cela suis.

Sauf pour le cas "WIFI_POWER_MINUS_1dBm" qui au lieu de donner la puissance d'émission la plus faible donne la plus élevée :rage:

J'utilise la méthode getTxPower pour contrôler ce que je fais, l'indication renvoyée est assez fluctuante.
Exemple pour 11dBm je devrais obtenir le nombre 44 et j'obtiens les nombres 41, 40 , 43 etc

Impossible de trouver si ce que retourne cette méthode est une mesure ou une valeur écrite en dur dans le code.

typedef enum {
    WIFI_POWER_19_5dBm = 78,// 19.5dBm
    WIFI_POWER_19dBm = 76,// 19dBm
    WIFI_POWER_18_5dBm = 74,// 18.5dBm
    WIFI_POWER_17dBm = 68,// 17dBm
    WIFI_POWER_15dBm = 60,// 15dBm
    WIFI_POWER_13dBm = 52,// 13dBm
    WIFI_POWER_11dBm = 44,// 11dBm
    WIFI_POWER_8_5dBm = 34,// 8.5dBm
    WIFI_POWER_7dBm = 28,// 7dBm
    WIFI_POWER_5dBm = 20,// 5dBm
    WIFI_POWER_2dBm = 8,// 2dBm
    WIFI_POWER_MINUS_1dBm = -4// -1dBm
} wifi_power_t;

Étape 2 : Régler son compte à la bande passante.
Après des fouilles archéologiques chez Espressif, je trouve dans ESP-IDF une fonction qui a l'air de bien aller.

#include<esp_wifi.h>
esp_wifi_set_protocol(WIFI_IF_AP, WIFI_PROTOCOL_11B);

J'ai pas mal ramé parce que le squelette de la fonction indiquait :
esp_err_t esp_wifi_set_protocol(wifi_interface_t ifx, uint8_t protocol_bitmap);

Avant de trouver ce qu'il fallait mettre pour ifx, il s'est passé quelques heures.

Conclusion (provisoire) : Victoire, la bande passante est maintenant de 22 Mhz.

Où cela se gâte :

C'est bien beau de réussir à ramener la bande passante de 40 MHz à 22 MHz, mais si on fait le travail correctement, on repasse de 22 à 40 MHz pour être sûr de ce que l'on fait, on n'est pas sur youtube ici.

Eh bien impossible de revenir en arrière.
J'ai essayé le mode 11B, 11N et LR (propriétaire Espressif).
Rien n'y fait : bloqué en 22 MHz.

Autre point (très désagréable) :
Mon premier essai était en mode station, toujours un exemple pompé.

Quand maintenant j'active la fonction :
WiFi.printDiag(Serial);
pour afficher les indications fournies par printDiag
Horreur, je retrouve écrit en clair le SSID et surtout le mot de passe de ma Box de l'essai précédent, c'est inacceptable.

À quoi cela sert de l'avoir en écrit dans mon dos dans un coin inconnu de la flash ?
Comment l'effacer ?
Comment l'empêcher à l'avenir ?

Sortie moniteur lors de mes essais :
Mode: AP
Channel: 7
SSID (12): Livebox-SECRET :grinning:
Passphrase (18): C'est pas le bon :rofl:

Suite
getMode = 2
getTxPower = 75
getHostname =
getStatusBits = 8193
************************************************
Etape 3
Nouvelle carte vierge de toute manipulation (ESP-CAM première mise sous tension) :

J'ai lancé une compilation en commentant la ligne
esp_wifi_set_protocol(WIFI_IF_AP, WIFI_PROTOCOL_11B);

La bande passante est de 40 MHz, c'est bien une configuration par défaut.
Je n'y touche pas pour le moment.

Diagnostics pour la nouvelle carte :
Mode: AP
Channel: 7
SSID (0): // C'est bien vide
Passphrase (0): // C'est bien vide
BSSID set: 0

Suite
getMode = 2
getTxPower = 71
getHostname =
getStatusBits = 8193

****************************************
Code : fichier principal

#include <WiFi.h>
#include <WebServer.h>
#include"chip.h"
#include<esp_wifi.h>

// SSID & Mot de passe
const char* ssid = "Dudule";  
//const char* password = "machintruc";
const char* password = NULL;

// Configuration adresse IP Accès Point
IPAddress local_ip(192, 168, 1, 1) ;
IPAddress gateway(192, 168, 1, 1)  ;
IPAddress subnet(255, 255, 255, 0) ;

// Création d'un objet Webserver
WebServer dudule(80);  // 80 est le port par défaut

bool debug = true;

void setup() 
{
  Serial.begin(115200);
  if(debug) 
  {
    Serial.printf("Identification de la puce ESP32 \n");
    identification_chip();
  }
  
  WiFi.mode(WIFI_AP);
  WiFi.softAP(ssid, password, 7);
  WiFi.softAPConfig(local_ip, gateway, subnet);
  WiFi.setTxPower(WIFI_POWER_19dBm);

  esp_wifi_set_protocol(WIFI_IF_AP, WIFI_PROTOCOL_11B);

  Serial.println("\nDiagnostics");
  WiFi.printDiag(Serial);
  //Wifi.setPhyMode(WIFI);

  Serial.println("\nSuite ");
  Serial.print("getMode = ")      ; Serial.println(WiFi.getMode());
  Serial.print("getTxPower = ")   ; Serial.println(WiFi.getTxPower());
  Serial.print("getHostname = ")  ; Serial.println(WiFi.getHostname());
  Serial.print("getStatusBits = "); Serial.println(WiFi.getStatusBits());
}

void loop() 
{}

Et les deux fichiers accessoires pour l'identification de la puce ESP32 :

#ifndef CHIP_ESP_H
#define CHIP_ESP_H
#include<Arduino.h>

void identification_chip();

#endif // CHIP_ESP

et

#include<Arduino.h>
#include"chip.h"

void identification_chip()
{
    uint32_t chipId = 0;
    for(int i=0; i<17; i=i+8) 
    { chipId |= ((ESP.getEfuseMac() >> (40 - i)) & 0xff) << i;}
    Serial.printf("ESP32 Chip model = %s Rev %d\n", ESP.getChipModel(), ESP.getChipRevision());
	Serial.printf("This chip has %d cores\n", ESP.getChipCores());
    Serial.print("Chip ID: "); Serial.println(chipId);
}

PS dans les deux cas la puce a la même référence :

ESP32 Chip model = ESP32-D0WDQ6 Rev 1
This chip has 2 cores

Les numéro de série sont :
ESP32 Lolin32 : Chip ID: 4163544
ESP32-CAM : Chip ID: 3027024

Merci pour votre patience.

Bonsoir @68tjs

je n'ai pas joué en profondeur comme tu le fais ici !

pour ce qui est de la 'rémanence' de la configuration, un balayage rapide pointe vers le paramètre eraseap de la fonction disconnect()

https://docs.espressif.com/projects/arduino-esp32/en/latest/api/wifi.html

une recherche plus poussé en dirait sans doute davantage sur cette mémorisation (optionnelle ?)

ici il est question d'un

WiFi.persistent(false);

a appeler avant

WiFi.persistent(false);

J'ai essayé de jouer sur "persistent" tout ce que j'ai obtenu, c'est un blocage de l'émission :rage:

Mes anciens collègues parlaient de "Bernard et ses manips à la con", c'est dans les gènes de développeur qui n'aime pas ce qui tombe en marche :grinning:

Bonsoir Bernard

je comprend tout à fait cette approche mais de plus en plus je me contente de ce qui 'tombe régulièrement en marche' !!

Après avoir galéré avec des soc WiFi d'un 'grand constructeur' , le CC3200 de Texas instrumnents, je me satisfait au quotidien des ESP 'tels qu'ils sont et non tels qu'ils devraient être' !!

Si tu as un doute je t'offre une carte Launchpad CC3200 LAUNCHXL de Texas Instruments pour goûter à la concurrence ! :wink: (sans ingénieur d'application TI à ta disposition c'est inexploitable)

Merci beaucoup, mais je ne voudrais pas te priver, je ne voudrais pas que cela te manque . :grinning:

En fait moins je maitrise plus je cherche à être rigoureux, c'est en quelque sorte une armure de sécurisation.

Cela fait la 3e fois que je ressors ces foutus espressifs du tiroir.
Si ça coince on va faire une nouvelle pause, je ne suis pas pressé.

Edit :

Voilà ce que je viens de lire sur le forum expressif :

Funcions are defined into ESP32 WiFi Library whose source can't be seen by SDK Developer. So, You can not get function definition of each declared function of this header files.
Hope this will answer your questions in basic overview.
Regards,
Ritesh Prajapati

Et vive l'open source !
Cette réponse ne donne pas envie d'acheter leur produits.
Ça me casse.

Suite et fin pour moi.

J'ai posé la question sur le forum officiel Espressif
Actuellement, je suis passé en page 2 c'est à dire invisible.

J'ai eu 77 lectures et 0 réponse.
Même Espressif ne sait pas répondre.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.