Documentation Technique

Fente d’extension

Presque toutes les broches ESP32 E/S sont disponibles sur la fente d’extension. La fente d’extension contient 13 broches en haut, 13 broches en bas et 5 broches en travers. De plus, l’adaptateur de programmation (RX/TX) comporte deux broches d’extension. Toutes les épingles sont inscrites sur le panneau, sur le devant pour des raisons d’espace, en petits caractères, au dos, en caractères bien lisibles :

Nous avons attaché de l’importance à ce que les broches usagées pouvant être utilisées en parallèle (par ex. bouton-poussoir, LED1, LED2, LED2, IO36 pour la mesure de tension) soient également disponibles sur l’emplacement d’extension. De nombreuses possibilités d’extension sont ainsi disponibles.

Selon les besoins, les cartes d’extension peuvent être enfichées par le haut ou par le bas. Les bâtis de prises (2 x 13 broches) ne sont pas soudés, mais inclus dans la livraison, afin de les rendre aussi flexibles que possible.

Interface Arduino SPI et I2C standard

Les interfaces SPI et I2C sont disponibles sur l’emplacement d’extension. L’interface SPI est également utilisée pour LoRa, l’interface I2C est déjà utilisée pour l’horloge (RTC) et pour le capteur de température/humidité externe. Veuillez noter que les interfaces SPI ou I2C ne sont pas utilisées simultanément par le logiciel RadioShuttle et vos propres applications.

Avec I2C, l’utilisation à l’intérieur de la « loop » est une option, puisque RadioShuttle n’y accède pas en même temps.

Avec SPI, il est conseillé d’utiliser SPI uniquement si LoRa n’est pas actif. Avec la fonction UpdateNodeStartup(RS_Node_Offline) LoRa peut être désactivée temporairement. Alternativement, les interruptions peuvent être désactivées pendant l’accès SPI propre.

Installation de l’antenne filaire

Le fil d’antenne fourni doit être soudé dans le trou prévu à cet effet (étiquette « ANT ») en bas à droite de la platine, puis raccourci à 8,2 cm. L’antenne λ/4 est donc adaptée pour 868,1 MHz.

La formule exacte pour calculer la longueur de l’antenne est :

Longueur d'onde = vitesse de la lumière / fréquence

Pour λ/4, cette valeur doit être à nouveau divisée par 4.

Comme le trou de soudure fonctionne déjà comme une antenne et qu’il faut tenir compte d’un facteur de raccourcissement, 8,2 cm sont suffisants.

Carte ESP32 : Affectation des broches et des interruptions

Connecteur d’antenne SMA ou U.FL

La prise SMA peut être facilement soudée. Séparez ensuite le pont de soudure de l’antenne à droite de l’antenne filaire et soudez un pont de soudure vers le haut jusqu’à la ligne SMA.

Une prise U.FL est déjà soudée. Pour cette fonction, le pont de soudure de l’antenne sur le côté droit de l’antenne filaire doit être séparé et un pont de soudure jusqu’à la ligne SMA doit être soudé. Veuillez noter que la douille U.FL n’est conçue que pour quelques opérations d’accouplement, c’est pourquoi nous recommandons une connexion SMA, qui peut être vissée aussi souvent que nécessaire.

Les ponts de soudure de l’antenne doivent être minces et minces, afin de ne pas influencer le fonctionnement. Un seul pont de soudure peut être posé à la fois, antenne filaire, SMA ou U.FL.

Enclencher ou déclencher la tension « VDD-SW » pour charges externes

Un interrupteur de tension interne permet d’allumer ou d’éteindre les consommateurs d’énergie externes afin qu’ils ne consomment pas d’énergie en permanence. La broche d’E/S « EXT_POWER_SW » est définie dans le fichier « PinMap.h » du logiciel RadioShuttle pour la commutation. Il peut être commuté sur « EXT_POWER_ON » ou « EXT_POWER_OFF ». Sur le câble « VDD-SW » se trouve la mesure de la tension de la batterie, qui est mesurée par les broches ADC « BAT_POWER_ADC ». Les fonctions étendues de l’horloge RTC sont déjà utilisées sur le câble « VDD-SW ». Le « VDD-SW » est généralement éteint pour que la carte nécessite le moins de courant possible.

Carte ECO Power : Exécuter la réinitialisation

La carte ECO Power n’a pas la possibilité d’effectuer un reset pour la programmation via USB. La ligne de commande série utilisée avec d’autres modules n’est pas disponible dans l’adaptateur de programmation. Par conséquent, une combinaison de touches spéciale est nécessaire pour la programmation, tous les détails sont décrits dans le chapitre Mise en Service.

Broche 5 V au niveau de la fente d’extension

La broche USB 5 V de l’emplacement d’extension est directement reliée à la broche 5 V de l’adaptateur de programmation ou à l’alimentation externe micro-USB. Il y a un fusible à réarmement automatique (500 mA) pour l’alimentation externe micro-USB. Cependant, il n’y a pas de fusible pour l’alimentation de l’adaptateur de programmation USB. Lors de l’utilisation d’une batterie sans alimentation USB, il n’y a pas de tension au niveau de la broche 5 V.

Si une alimentation externe est raccordée via l’adaptateur de programmation, elle peut également être supérieure à 5 V (max. 9 V). Par conséquent, l’utilisation du câble USB 5-V direct doit être manipulée avec précaution ; un court-circuit peut, comme pour les autres consommateurs USB, détruire le port USB de l’ordinateur.

Capteur de température et d’humidité

Le capteur offre la possibilité de mesurer la température exacte ainsi que l’humidité très économique en énergie. Le feutre blanc du capteur ne doit pas être enlevé car il a une fonction de protection pour assurer le bon fonctionnement du capteur. Le « SI7021-A20-GM1 » de Silicon Labs est utilisé, le pilote est inclus dans le logiciel RadioShuttle.

Raccordement du capteur

Le capteur est connecté via le bus I2C et nécessite quatre lignes (GND, VDD, SCL, SDA). Les options d’installation simples suivantes sont disponibles :

  • Connectez le capteur supérieur gauche à la carte de circuit imprimé
  • Connectez le capteur à la carte en haut à gauche de la face inférieure
  • Le capteur peut être installé à l’extérieur à l’aide d’un câble de rallonge (non fourni), par exemple à l’extérieur du boîtier ou directement sur un chauffage, etc.

L’ordre des broches doit être respecté (« GND » à l’extérieur), car le capteur a deux côtés de raccordement et peut être tourné (en haut ou en bas) en fonction de l’installation.

Remarque :
Sur le capteur, deux composants (résistances optionnelles) sont intentionnellement non équipés, ce sont des résistances I2C pullup, qui sont déjà contenues sous forme de résistances 10 kΩ sur la carte mère. Pour un capteur externe avec de longs fils, il peut être utile de souder deux résistances 1 kΩ (incluses dans la livraison) pour obtenir des signaux stables. Une option supplémentaire est de réduire la vitesse I2C. Nous partagerons notre expérience ici plus tard.

Utilisation logicielle du capteur

S’il est raccordé, le capteur est actif en permanence, mais n’a besoin que d’environ 1 μA tant qu’aucune valeur de capteur n’est lue. Lors de la mise sous tension de la carte ECO Power (mise sous tension ou remise à zéro), le capteur n’est initialisé qu’une seule fois et la température est transmise avec les messages de démarrage. Si la carte est en « deepsleep » (« RadioShuttle RS_Node_Offline »), les valeurs des capteurs sont automatiquement mesurées et affichées à nouveau lorsque la carte se réveille périodiquement (environ toutes les 10 secondes). Le code se trouve dans le fichier « RTCUtil.cpp » de l’exemple « RadioTest ».

Il est recommandé de ne pas lire le capteur inutilement en permanence, car chaque lecture des valeurs prend du temps et consomme de l’électricité pendant ce temps. La lecture de la température dure environ 13 ms, celle de l’humidité environ 20 ms. Pendant ce temps, le MCU ESP32 est actif.

Mesure de la tension de la batterie

Pour mesurer la tension d’alimentation de la DMV (environ 3,3 volts pour l’alimentation par USB, environ 3,0 volts pour le fonctionnement sur batterie), un appareil de mesure est fourni sur la carte. La tension de la batterie est affichée avec une précision d’environ 100 mV. Lors du démarrage ou de la réinitialisation, la tension est mesurée et affichée. La fonction GetBatteryVoltage() dans le fichier « RTCUtil.cpp » mesure et retourne la tension.

Précision du convertisseur analogique-numérique (ADC) de l’ESP32

Afin d’augmenter significativement la précision des mesures ADC sur la carte ECO Power, la référence de tension interne du processeur ESP32 est mesurée pendant la production des cartes « ECO Power » et stockée en interne dans la mémoire eFuse. Via la fonction prop.GetProperty(prop.ADC_VREF, 1100); la valeur en millivolts peut être appelée pour effectuer un calcul exact des mesures ADC. Comme presque tous les modules ESP32 ont une déviation de la tension de référence interne (1.100 volts), l’étalonnage des cartes « ECO Power » est d’un grand avantage pour des mesures ADC plus précises.

La tension de référence analogique interne de l’ESP est d’environ 1,100 volts (réglage « Atténuation ADC_0db »), les autres tensions de référence (exemple 6 db = environ 2,2 V) sont dérivées uniquement de la tension de référence interne de 1,100 volts (0 db). Il est donc recommandé d’utiliser la tension de référence de 1.100 V (« ADC_0db ») pour les mesures ADC, qui est mesurée sur la carte ECO Power et est donc calibrée.

Le convertisseur ADC offre une précision allant jusqu’à 12 bits (12 bits = 4 096 pas) dans une plage de tension de 0-1,100 V (tension de référence env. 1,100 V). Malheureusement, ces 4 096 gradations du convertisseur ADC interne ESP32 ne sont pas linéaires, ce qui affecte la précision des mesures ADC. Pour des mesures ADC plus précises, il est nécessaire de créer et d’utiliser des tables de consultation pour les deux convertisseurs internes, ADC0 et ADC1, pour la linéarisation.

Comme déjà mentionné, des mesures ADC précises avec l’ESP32 ne sont possibles que dans une mesure limitée ou avec un effort de calibration accru. C’est un sujet sur lequel le fabricant Espressif Systems doit continuer à travailler.

ESP32 « deepsleep » et réveil

Pendant le « deepsleep » (par ex.  en mode « Node Offline »), le MCU est éteint pour économiser l’énergie. La seule unité fonctionnant en « deepsleep » est une horloge interne ESP32 (RTC, à ne pas confondre avec le RTC externe !), qui réveille le MCU lors d’événements externes. Ces événements externes peuvent être des changements de broches GPIO ou une alarme régulière.

Les broches suivantes sont supportées en sommeil profond comme broches de réveil :

IO 0
IO 2
IO 4
IO 12-15
IO 25-27
IO 32-39

De plus, le MCU s’active brièvement toutes les 10 secondes et fait clignoter brièvement la LED1 comme indicateur d’activité. Cependant, cela se produit sans que le MCU ne soit complètement mis en service. Chaque minute (réglable), le MCU est démarré complètement afin que les programmes puissent vérifier périodiquement si quelque chose doit être fait – ceci économise de l’énergie. Les fonctions suivantes vous permettent d’influencer la durée du sommeil et le nombre de passages :

FonctionStandardMin … Max
ESP32SetDeepSleepDuration(int ms)10 000 ms200 ms … 1 200 000 ms
ESP32SetDeepSleepBlinkDuration(int µs)100 µsRecommandé jusqu’à max. 10 000, pour que la consommation d’énergie n’augmente pas de manière significative
ESP32SetDeepSleepWakeupInterval(int count)6 passages
A la fin des descentes, un réveil a lieu (durée totale = descentes x durée)

ESP32 « sleep » et réveil

La fonction simple sleep() est utilisée lorsqu’il n’y a plus rien à faire. Il laisse l’unité centrale actuelle en veille et attend des événements tels que des interruptions ou des minuteries. La mémoire complète est conservée et la périphérie continue de fonctionner. En règle générale, il y a une interruption du système 1 000 fois par seconde, de sorte que la LED1 (verte) clignote légèrement. La fonction « sleep » permet également d’économiser de l’énergie afin que l’unité centrale ne chauffe pas. Cependant, malgré le « sleep », un courant d’environ 55 mA est encore nécessaire, avec le « deepsleep », il est d’environ 7 µA.

La fonction sleep() est exécutée dans la fonction loop() dès qu’il n’y a plus rien à faire. Une boucle sans fin dans la boucle (« polling ») n’est pas recommandée et doit être évitée. La programmation propre est basée sur les événements et ne fait pas de sondage. Ceci s’applique non seulement à l’ESP32 mais à tous les programmes, aussi sous Windows, Linux, Mac et surtout dans les applications embarquées.