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.
La carte Eagle: pin and interrupt assignment
Connecteur d’antenne U.FL
Une prise U.FL est déjà soudée. Veuillez noter que la prise U.FL n’est conçue que pour quelques connexions.
Précision du convertisseur analogique-numérique (ADC) de l’ESP32
Afin d’augmenter significativement la précision des mesures ADC sur la carte Eagle, la référence de tension interne du processeur ESP32 est mesurée pendant la production des cartes Eagle 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 Eagle 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 Eagle 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 correspondances 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
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-34
IO 36-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 :
Fonction | Standard | Min … Max |
---|---|---|
ESP32SetDeepSleepDuration(int ms) | 10 000 ms | 200 … 1 200 000 ms |
ESP32SetDeepSleepBlinkDuration(int µs) | 100 µs | Recommandé 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 800 µ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.