Bonjour,
Puisque, jour exceptionnel, je me lance dans la "radio" j'ai évidement quelques questions.
La première concerne le réglage du Wifi.
Dans la doc de l'ESP32, car bien évidement j'ai cherché de la doc avant de mettre sous tension, j'ai lu que l'ESP32, comme l'ESP12, "supportait" plusieurs bandes passantes d'émission et pouvait émettre à différentes puissance.
Je me suis dit que pour envoyer quelques malheureux octets il suffisait de choisir en émission la bande passante la plus étroite qui permet d'obtenir un meilleur rapport signal sur bruit et par conséquent une meilleure sensibilité en réception.
Et au final de baisser la puissance d'émission ce qui permet d''éviter de consommer inutilement.
Sauf que je suis jusqu'à présent incapable de trouver les "bibliothèques magiques" qui me permettraient de le faire.
Et la documentation Espressif est complètement indigente.
il existe un livre de Niel Kolban (gratuit si l'acquéreur fixe à 0 le prix), compilation de nombreuses sources.
l'ESP32 par Arduino est marginal chez Espressif, leur outil est le SDK "IDF", la surcouche Arduino étant développée en marge par qq salariés d'Espressif disponibles....( Les outils Arduino pour ESP8266 sont le travail de 'makers' , embauchés par la suite par Espressif à la sortie de l'ESP32, comme si ST embauchait Roger Clark pour son travail antérieur pour SMT32/Arduino....)
Avec le lancement imminent du prochain produit les efforts sur ce terrain se sont relâchés ces derniers temps....
Ajustement de bande passante vaia Arduino , jamais vu.
Ajustement de puissance via Arduino : peut être , comment ? je n'ai pas testé ce qui est OK pour l'ESP8266 avec la surcouche Arduino
WiFi.setOutputPower(16.0);
Avec l'ESP32 il faut distinguer 3 niveaux (décroissants du point de vue 'richesse')
-ce que la puce peut faire (hardware)
-ce qui est gérable à l'instant t avec le framework IDF d'Espressif
-ce qui est gérable à l'instant t via la surcouche Arduino
(il existe il me semble une possibilité d'accéder sous IDE Arduino à certaines fonctions IDF, non encore 'encapsulées Arduino')
Par contre aucune trace d'une fonction permettant de fixer la bande passante
Le sujet est évoqué dans cette doc d'Espressif mais j'y vois plutôt un paramètre de compilation, il s'agit du menu de configuration du Framework.
Merci pour ces recherches.
Donc si je comprend on ne sait pas régler la bande passante et pire on ne sait pas celle qui est active par défaut !
C'est probablement celle qui est la plus large donc le mode de réception le moins performant.
En espérant que la puissance d'émission et la bande passante ne soient pas liée ce qui me semble impossible à exclure.
La doc espressif est volumineuse en nombre de pages mais question efficacité et clarté elle est loin de celle d'un Atmel ou d'un ST pour ne citer que ceux que je connaissais préalablement.
Il est vrai que ce micro est particulier : ce n'est pas Espressif qui l'a conçu mais Tensilica, Espressif ne fait qu'y ajouter des fonctions. Tensilica n'est pas en contact avec les utilisateurs finaux il n'a qu'une doc pour développeur matériel.
Je ne trouve pas deux exemples qui utilisent les mêmes fonctions pour lancer le Wifi et comme mon but n'est pas de faire une réalisation mais de comprendre et bien je rame surtout que les années commencent à peser et que me taper des dizaines et des dizaines de page en anglais commence à me gonfler.
La bande passante parait en WiFi être négociée entre station et point d'accès, une possibilité de forçage semble exister à la compilation.
Ajout : Sur la Freebox le choix de B.P 20MHz ou 40MHz se fait dans l'onglet "Configuration radio' de la page WiFI
il y a au moins la facilité de fixer la puissance d'émission et bien sûr le canal
Les ESP pour moi c'est : 'radio Espressif' sur 'processeur Tensilica de Cadence'' (ils lorgnent vers RiscV en remplacement de Tensilica ) Pour moi une partie du succès d'Espressif vient de l'efficacité (technico-economique) de la partie radio.
Ils se sont fait la main avec une puce WiFI pour tablettes avant de voir le potentiel....et de bien l'exploiter en ESP8266, ESP32 et le prochain (intermédiaire mais avec USB)
La doc a fait beaucoup de progrès en 2 ou 3 ans mais je suis d'accord pour dire qu'elle n'est pas encore à la hauteur de celles des 'anciens'
mon but n'est pas de faire une réalisation mais de comprendre
je suis dans la même démarche, mes petites réalisations ne sont que des 'travaux pratiques' pour retraité qui ne peut pas 'décrocher' !!
Intéressant, ce topic me fait découvrir cette fonction setTxPower(), mais j'ai du mal à trouver de la doc sur ses effets, en matière de consommation de courant.
Y a t'il un potentiel significatif de réduction de la consommation d'un ESP ?
L'effet est direct sur l'amplitude des pics de courant engendrés par le WiFi, pas sur le courant en dehors de ces pics.
Ces pics sont brefs et l'incidence sur la consommation globale est modérée
(pics à 400mA, paliers à 70mA... le profil du courant est très accidenté)
Plus qu'un gain côté consommation j'ai constaté un gain en autonomie qui m'a paru découler principalement de la réduction des pics de courants , donc des creux de tension, ça reporte l'apparition des 'brownout' , la batterie reste exploitable un peu plus longtemps dans sa décharge.
C'est sensible avec des batteries LiPo de portable 'un pau fatiguées' dont la résistance interne est de plusieurs dixièmes d'ohm.
Dans une doc de l'ESP8266 (p 23) on voit ce tableau comparant le courant moyen (pas les pics) pour diverses puissances d'émission :
Une autre doc que je ne retrouve pas évalue les pics de courants pour diverses puissances d'émission
Ben justement : quand on veut faire fonctionner un ESP sur batterie sur de longues périodes, en mode deep sleep et réveils réguliers, la consommation est importante en pics à chaque réveil, pendant la négociation du wifi.connect(), et dure 2 à 3 secondes.
Je me disais que ce paramètre peut diminuer la conso pendant cette phase, et donc augmenter significativement l'autonomie du montage.
Je me disais que ce paramètre peut diminuer la conso pendant cette phase, et donc augmenter significativement l'autonomie du montage.
Pour cette raison j'ajuste dans le code la puissance d'émission en fonction de la distance entre bidule et box.
Double gain d'autonomie : mAh consommés + moindre effet de la résistance interne de la batterie pendant les pics de connection (la batterie s'écroule moins pendant les 'forts puisages')
al1fch:
Pour cette raison j'ajuste dans le code la puissance d'émission en fonction de la distance entre bidule et box.
Double gain d'autonomie : mAh consommés et moindre effet de la résistance interne de la batterie pendant les pics de connection
T'inquiète je vais tester la bestiole.
Si le résultat est significatif, il sera toujours possible de pondre un code qui adapte automatiquement la puissance du tx wifi au niveau minimum requis pour ne pas avoir d'erreur.
Mais attention les fichiers pour l'ESP32 sont les fichiers de l'ESP8266 qui ont été modifiés : le code est bon mais les commentaires sont encore ceux de l'ESP8266.
Quand je vous dit qu'espressif c'est un foutoir sans nom.
C'est dans ces fichiers qu'on peut changer le "mode".
Mode de quoi ? Bande passante à l'émission ?
Autant pour la puissance d'émission c'est assez clair autant pour le "mode" je n'ai pas encore trouvé de documentation.
De toute façon suite çà la réponse d'Al1fch le réglage de la bande passante n'est utile qu'en AP (point d'accès à internet). Je crains qu'en mode Station si on impose un débit faible la "box" s'alignera sur ce débit et les tablettes et téléphone se retrouveront avec un débit minable : cela risque de rougnier dans les foyers. Et pas assuré que la box retrouvera son débit "normal" à la déconnexion de l'espressif, un redémarage obligatoire ne me surprendrais pas.
bande passante, 20MHZ/40Mhz... canaux groupés.... des infos ici
Dans le contexte Arduino il me semble que le 'mode' désigne : SoftAP / STA / STA+SoftAP
J'ai l'impression que le choix 20MHz/40MHz figure dans le menu de configuration du projet dans la chaîne de développement d'Espressif (IDF) et qu'il n'y a pas de commande (API) pour changer ce choix dans un programme développé avec cette chaîne , encore moins donc avec le 'sous-produit' qu'est la couche Arduino pour les divers ESP (à l'origine ce n'est pas une initiative d'Espressif mais principalement d'une personne qui par la suite a été embauchée par Espressif pour développer l'IDF.... pas la couche Arduino).
Hello
Je viens de tomber sur ceci : painlessMesh, une API pour créer des réseau mesh avec des ESP8266 et ESP32. Je n'ai pas encore eu le temps de creuser, je vous laisse regarder.
Intro to painlessMesh
painlessMesh is a library that takes care of the particulars of creating a simple mesh network using esp8266 and esp32 hardware. The goal is to allow the programmer to work with a mesh network without having to worry about how the network is structured or managed.
True ad-hoc networking
painlessMesh is a true ad-hoc network, meaning that no-planning, central controller, or router is required. Any system of 1 or more nodes will self-organize into fully functional mesh. The maximum size of the mesh is limited (we think) by the amount of memory in the heap that can be allocated to the sub-connections buffer and so should be really quite high.
JSON based
painlessMesh uses JSON objects for all its messaging. There are a couple of reasons for this. First, it makes the code and the messages human readable and painless to understand and second, it makes it painless to integrate painlessMesh with javascript front-ends, web applications, and other apps. Some performance is lost, but I haven’t been running into performance issues yet. Converting to binary messaging would be fairly straight forward if someone wants to contribute.
Wifi & Networking
painlessMesh is designed to be used with Arduino, but it does not use the Arduino WiFi libraries, as we were running into performance issues (primarily latency) with them. Rather the networking is all done using the native esp32 and esp8266 SDK libraries, which are available through the Arduino IDE. Hopefully though, which networking libraries are used won’t matter to most users much as you can just include painlessMesh.h, run the init() and then work the library through the API.
painlessMesh is not IP networking
painlessMesh does not create a TCP/IP network of nodes. Rather each of the nodes is uniquely identified by its 32bit chipId which is retrieved from the esp8266/esp32 using the system_get_chip_id() call in the SDK. Every node will have a unique number. Messages can either be broadcast to all of the nodes on the mesh, or sent specifically to an individual node which is identified by its `nodeId.