Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| dev:iot:riot:esp32:utiliser_convertisseur_analogique_numerique [2021/04/17 19:04] – créée 77.192.232.26 | dev:iot:riot:esp32:utiliser_convertisseur_analogique_numerique [2021/04/18 16:49] (Version actuelle) – 77.192.232.26 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | {{tag> | + | {{tag> |
| - | ====== Utiliser | + | ====== Utiliser |
| - | Les GPIOs liées aux convertisseurs analogiques numériques pour les cartes de type ESP32-DEVKIT, | + | RIOT propose une abstraction simple pour utiliser les convertisseurs analogiques numériques (CAN ou ADC) intégrés dans la plupart des MCU: le pilote ADC (periph/ |
| + | |||
| + | Pour pouvoir lire (échantillonner) une valeur, il faut au préalable initialiser **la bonne ligne ADC**, pour cela on précise le numéro de ligne que l'on souhaite utiliser: | ||
| + | |||
| + | <code c> | ||
| + | #include " | ||
| + | |||
| + | //Pour l' | ||
| + | #define ADC_GPIO33 ADC_LINE(11) | ||
| + | ... | ||
| + | |||
| + | if(adc_init(ADC_GPIO33) < 0 ) { | ||
| + | printf(" | ||
| + | } else { | ||
| + | printf(" | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | Pour garantir au maximum la portabilité, | ||
| + | |||
| + | Pour déterminer quel GPIO correspond à quelle ligne, il faut consulter directement le code source. Les GPIO liées aux convertisseurs analogiques numériques pour les cartes de type ESP32-DEVKIT, | ||
| <code c> | <code c> | ||
| Ligne 14: | Ligne 35: | ||
| </ | </ | ||
| - | Le fichier utilise cette déclaration pour initaliser | + | Le fichier utilise cette déclaration pour initialiser |
| <code c> | <code c> | ||
| Ligne 22: | Ligne 43: | ||
| </ | </ | ||
| - | Pour initialiser la bonne ligne avec ADC_LINE(), il faut repérer | + | Pour initialiser la bonne ligne, il faut déterminer l' |
| + | |||
| + | Par exemple si le montage utilise la GPIO12, cette GPIO est le 4ième élément du tableau, son index est 3 | ||
| + | |||
| + | ===== Exemple ===== | ||
| + | |||
| + | ==== Montage ==== | ||
| + | |||
| + | On branche un potentiomètre sur le GPIO33 du d'une carte de type ESP32-DEVKIT. On cherche ici à afficher régulièrement sa valeur sur le port série. | ||
| + | |||
| + | Note: Note that the call to adc_init is needed for the reads to work. I remeber that the ESP8266 had a 1.0 V reference, maybe this is also the case here? | ||
| + | |||
| + | ==== Code ==== | ||
| + | |||
| + | Déclarer l' | ||
| + | <code makefile Makefile> | ||
| + | # a minimal application Makefile | ||
| + | APPLICATION = hello_adc | ||
| + | |||
| + | BOARD ?= esp32-wroom-32 | ||
| + | PORT ?= / | ||
| + | |||
| + | RIOTBASE ?= $(CURDIR)/ | ||
| + | |||
| + | FEATURES_REQUIRED += periph_timer | ||
| + | FEATURES_REQUIRED += periph_adc | ||
| + | |||
| + | # Pour une application simple n' | ||
| + | # le module core_msg peut être désactivé pour optimiser | ||
| + | # l' | ||
| + | |||
| + | # DISABLE_MODULE += core_msg | ||
| + | |||
| + | USEMODULE += xtimer | ||
| + | # Le module suivant est chargé seulement pour la cible ESP32 | ||
| + | ifeq ($BOARD, es32-wroom-32) | ||
| + | | ||
| + | endif | ||
| + | |||
| + | |||
| + | include $(RIOTBASE)/ | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | <code c main.c> | ||
| + | #include < | ||
| + | |||
| + | #include " | ||
| + | #include " | ||
| + | |||
| + | #define RES ADC_RES_10BIT | ||
| + | #define ADC_GPIO33 ADC_LINE(11) | ||
| + | |||
| + | int main(void) | ||
| + | { | ||
| + | int sample = 0; | ||
| + | |||
| + | printf(" | ||
| + | // | ||
| + | if(adc_init(ADC_GPIO33) < 0 ) { | ||
| + | printf(" | ||
| + | } else { | ||
| + | printf(" | ||
| + | } | ||
| + | |||
| + | while(1) | ||
| + | { | ||
| + | |||
| + | //lecture du CAN | ||
| + | sample = adc_sample(ADC_GPIO33, | ||
| + | if (sample < 0) { | ||
| + | printf(" | ||
| + | } else { | ||
| + | printf(" | ||
| + | } | ||
| + | |||
| + | xtimer_sleep(2); | ||
| + | } | ||
| + | |||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Une fois le code compilé et flashé, on pourra lire sur le port série via un programme comme **minicom**. | ||
| ===== Références ===== | ===== Références ===== | ||