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
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
Passphrase (18): C'est pas le bon
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.