esp_idf
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
esp_idf [2024/06/22 13:27] – [ESP-NOW] jp | esp_idf [2024/06/26 00:01] (Version actuelle) – [ADC] jp | ||
---|---|---|---|
Ligne 6: | Ligne 6: | ||
Aller dans le menu " | Aller dans le menu " | ||
Installer l' | Installer l' | ||
+ | Vérifier que vous avez bien la dernière version d' | ||
+ | |||
===== Créer un 1er projet ===== | ===== Créer un 1er projet ===== | ||
Ligne 181: | Ligne 183: | ||
===== String ===== | ===== String ===== | ||
+ | |||
+ | ==== Concaténation ==== | ||
On a souvent besoin de manipuler des chaînes de caractères. | On a souvent besoin de manipuler des chaînes de caractères. | ||
Ligne 206: | Ligne 210: | ||
L' | L' | ||
+ | |||
Avantages :\\ | Avantages :\\ | ||
* Simple à mettre en œuvre | * Simple à mettre en œuvre | ||
* Pas de temps d' | * Pas de temps d' | ||
- | * Pas de réseau (Pas de réseau ESP-NOW à créer, pas de réseau Wifi à rejoindre, pas de gateway, c'est du vrai point point) | + | * Pas de réseau (Pas de réseau ESP-NOW à créer, pas de réseau Wifi à rejoindre, pas de gateway, c'est du vrai point à point) |
* Possibilité de crypter les trames | * Possibilité de crypter les trames | ||
* Pas besoin de déclarer l' | * Pas besoin de déclarer l' | ||
Ligne 377: | Ligne 382: | ||
On peut évidement combiner les codes pour faire un émetteur/ | On peut évidement combiner les codes pour faire un émetteur/ | ||
+ | ===== LOG ===== | ||
+ | |||
+ | Espressif a développé un système de log via la liaison série assez puissant. | ||
+ | Au lieu d' | ||
+ | |||
+ | Texte informatif en vert\\ | ||
+ | <code c> | ||
+ | ESP_LOGI(TAG," | ||
+ | </ | ||
+ | |||
+ | Texte d' | ||
+ | <code c> | ||
+ | ESP_LOGE(TAG," | ||
+ | </ | ||
+ | |||
+ | Texte d' | ||
+ | <code c> | ||
+ | ESP_LOGW(TAG," | ||
+ | </ | ||
+ | |||
+ | TAG va permettre de mettre un prefix devant la ligne afin d' | ||
+ | <code c> | ||
+ | static const char *TAG = " | ||
+ | </ | ||
+ | |||
+ | <code c> | ||
+ | #include < | ||
+ | #include < | ||
+ | #include " | ||
+ | |||
+ | static const char *TAG = " | ||
+ | |||
+ | void app_main(void) | ||
+ | { | ||
+ | uint8_t broadcastAddress[] = {0xFF, 0xFF, | ||
+ | uint8_t len =6; | ||
+ | | ||
+ | ESP_LOGI(TAG," | ||
+ | | ||
+ | ESP_LOGE(TAG," | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | L' | ||
+ | |||
+ | <code c> | ||
+ | esp_log_level_set(" | ||
+ | </ | ||
+ | Uniquement les log d' | ||
+ | |||
+ | <code c> | ||
+ | esp_log_level_set(" | ||
+ | </ | ||
+ | Uniquement les log d' | ||
+ | |||
+ | <code c> | ||
+ | esp_log_level_set(" | ||
+ | </ | ||
+ | Aucun log n'est affiché | ||
+ | |||
+ | Ce qui permet de mettre beaucoup de log mais de n' | ||
+ | |||
+ | ===== ADC ===== | ||
+ | |||
+ | La mise en oeuvre de l'ADC de l' | ||
+ | Il faut savoir que l' | ||
+ | C'est pour cette raison, qu'il est necessaire de réaliser une calibration de cette référence lors de l' | ||
+ | |||
+ | Voici les étapes d' | ||
+ | __Etape 1:__ \\ | ||
+ | Configuration de l'ADC1 pour une lecture ponctuelle. | ||
+ | Cette méthode retourne un handle vers l'ADC1 | ||
+ | <code c> | ||
+ | adc_oneshot_unit_init_cfg_t init_config1 = { | ||
+ | .unit_id = ADC_UNIT_1, | ||
+ | }; | ||
+ | ESP_ERROR_CHECK(adc_oneshot_new_unit(& | ||
+ | </ | ||
+ | |||
+ | __Etape 2:__ \\ | ||
+ | Configuration de l'ADC pour retourner une valeur sur 12bits et d’atténuer le signal d' | ||
+ | Ce qui veut dire que l' | ||
+ | La tension appliquée sur l' | ||
+ | Donc 3.3V donnera 0.828V sur l' | ||
+ | |||
+ | On configure également l' | ||
+ | <code c> | ||
+ | adc_oneshot_chan_cfg_t config = { | ||
+ | .bitwidth = ADC_BITWIDTH_DEFAULT, | ||
+ | .atten = ADC_ATTEN_DB_12, | ||
+ | }; | ||
+ | ESP_ERROR_CHECK(adc_oneshot_config_channel(adc1_handle, | ||
+ | </ | ||
+ | |||
+ | __Etape 3:__ | ||
+ | |||
+ | Une fois la configuration terminée, on lance la calibration de l'ADC. | ||
+ | <code c> | ||
+ | adc_cali_curve_fitting_config_t cali_config = { | ||
+ | .unit_id = ADC_UNIT_1, | ||
+ | .chan = ADC_CHANNEL_5, | ||
+ | .atten = ADC_ATTEN_DB_12, | ||
+ | .bitwidth = ADC_BITWIDTH_DEFAULT, | ||
+ | }; | ||
+ | esp_err_t ret = adc_cali_create_scheme_curve_fitting(& | ||
+ | </ | ||
+ | |||
+ | __Etape 4:__ | ||
+ | Une fois la configuration réalisée, il ne reste plus qu'à lire la valeur mesurée par l' | ||
+ | La mesure se fait en 2 étapes. La première consiste à récupérer la valeur brute de l'ADC et la 2ème consiste à convertir cette tension par rapport à l' | ||
+ | |||
+ | <code c> | ||
+ | ESP_ERROR_CHECK(adc_oneshot_read(adc1_handle, | ||
+ | ESP_LOGI(TAG, | ||
+ | | ||
+ | ESP_ERROR_CHECK(adc_cali_raw_to_voltage(adc1_cali_chan0_handle, | ||
+ | ESP_LOGI(TAG, | ||
+ | </ | ||
+ | |||
+ | Exemple complet: | ||
+ | <code c> | ||
+ | |||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include " | ||
+ | #include " | ||
+ | #include " | ||
+ | #include " | ||
+ | #include " | ||
+ | #include " | ||
+ | #include " | ||
+ | |||
+ | const static char *TAG = " | ||
+ | |||
+ | adc_oneshot_unit_handle_t adc1_handle; | ||
+ | | ||
+ | |||
+ | static int adc_raw; | ||
+ | static int voltage; | ||
+ | |||
+ | static void init_adc() | ||
+ | { | ||
+ | // | ||
+ | adc_oneshot_unit_init_cfg_t init_config1 = { | ||
+ | .unit_id = ADC_UNIT_1, | ||
+ | }; | ||
+ | ESP_ERROR_CHECK(adc_oneshot_new_unit(& | ||
+ | |||
+ | // | ||
+ | adc_oneshot_chan_cfg_t config = { | ||
+ | .bitwidth = ADC_BITWIDTH_DEFAULT, | ||
+ | .atten = ADC_ATTEN_DB_12, | ||
+ | }; | ||
+ | ESP_ERROR_CHECK(adc_oneshot_config_channel(adc1_handle, | ||
+ | |||
+ | // | ||
+ | adc_cali_curve_fitting_config_t cali_config = { | ||
+ | .unit_id = ADC_UNIT_1, | ||
+ | .chan = ADC_CHANNEL_5, | ||
+ | .atten = ADC_ATTEN_DB_12, | ||
+ | .bitwidth = ADC_BITWIDTH_DEFAULT, | ||
+ | }; | ||
+ | esp_err_t ret = adc_cali_create_scheme_curve_fitting(& | ||
+ | |||
+ | if (ret == ESP_OK) { | ||
+ | ESP_LOGI(TAG, | ||
+ | } else if (ret == ESP_ERR_NOT_SUPPORTED) { | ||
+ | ESP_LOGW(TAG, | ||
+ | } else { | ||
+ | ESP_LOGE(TAG, | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void app_main(void) | ||
+ | { | ||
+ | init_adc(); | ||
+ | |||
+ | |||
+ | while (1) { | ||
+ | ESP_ERROR_CHECK(adc_oneshot_read(adc1_handle, | ||
+ | ESP_LOGI(TAG, | ||
+ | | ||
+ | ESP_ERROR_CHECK(adc_cali_raw_to_voltage(adc1_cali_chan0_handle, | ||
+ | ESP_LOGI(TAG, | ||
+ | | ||
+ | vTaskDelay(1000/ | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | {{: | ||
esp_idf.1719055650.txt.gz · Dernière modification : 2024/06/22 13:27 de jp