- /* ULP Example
- This example code is in the Public Domain (or CC0 licensed, at your option.)
- Unless required by applicable law or agreed to in writing, this
- software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
- CONDITIONS OF ANY KIND, either express or implied.
- */
- #include <stdio.h>
- #include "esp_sleep.h"
- #include "nvs.h"
- #include "nvs_flash.h"
- #include "soc/rtc_cntl_reg.h"
- #include "soc/sens_reg.h"
- #include "soc/rtc_periph.h"
- #include "driver/gpio.h"
- #include "driver/rtc_io.h"
- #include "esp32/ulp.h"
- #include "ulp_main.h"
- #include "esp_bt.h"
- #include "esp_gap_ble_api.h"
- #include "esp_gatts_api.h"
- #include "esp_bt_main.h"
- #include "gatts_table_creat_demo.h"
- #include "esp_gatt_common_api.h"
- extern const uint8_t ulp_main_bin_start[] asm("_binary_ulp_main_bin_start");
- extern const uint8_t ulp_main_bin_end[] asm("_binary_ulp_main_bin_end");
- static void init_ulp_program(void);
- static void update_pulse_count(void);
- void app_main(void)
- {
- esp_sleep_wakeup_cause_t cause = esp_sleep_get_wakeup_cause();
- if (cause != ESP_SLEEP_WAKEUP_ULP) {
- printf("Not ULP wakeup, initializing ULP\n");
- init_ulp_program();
- } else {
- printf("ULP wakeup, saving pulse count\n");
- update_pulse_count();
- }
- printf("Entering deep sleep\n\n");
- ESP_ERROR_CHECK( esp_sleep_enable_ulp_wakeup() );
- esp_deep_sleep_start();
- }
- static void init_ulp_program(void)
- {
- esp_err_t err = ulp_load_binary(0, ulp_main_bin_start,
- (ulp_main_bin_end - ulp_main_bin_start) / sizeof(uint32_t));
- ESP_ERROR_CHECK(err);
- /* GPIO used for pulse counting. */
- gpio_num_t gpio_num = GPIO_NUM_2;
- int rtcio_num = rtc_io_number_get(gpio_num);
- assert(rtc_gpio_is_valid_gpio(gpio_num) && "GPIO used for pulse counting must be an RTC IO");
- /* Initialize some variables used by ULP program.
- * Each 'ulp_xyz' variable corresponds to 'xyz' variable in the ULP program.
- * These variables are declared in an auto generated header file,
- * 'ulp_main.h', name of this file is defined in component.mk as ULP_APP_NAME.
- * These variables are located in RTC_SLOW_MEM and can be accessed both by the
- * ULP and the main CPUs.
- *
- * Note that the ULP reads only the lower 16 bits of these variables.
- */
- ulp_debounce_counter = 1;
- ulp_debounce_max_count = 1;
- ulp_next_edge = 0;
- ulp_io_number = rtcio_num; /* map from GPIO# to RTC_IO# */
- ulp_edge_count_to_wake_up = 1000;
- /* Initialize selected GPIO as RTC IO, enable input, disable pullup and pulldown */
- rtc_gpio_init(gpio_num);
- rtc_gpio_set_direction(gpio_num, RTC_GPIO_MODE_INPUT_ONLY);
- rtc_gpio_pulldown_dis(gpio_num);
- rtc_gpio_pullup_dis(gpio_num);
- rtc_gpio_hold_en(gpio_num);
- /* Disconnect GPIO12 and GPIO15 to remove current drain through
- * pullup/pulldown resistors.
- * GPIO12 may be pulled high to select flash voltage.
- */
- rtc_gpio_isolate(GPIO_NUM_12);
- rtc_gpio_isolate(GPIO_NUM_15);
- esp_deep_sleep_disable_rom_logging(); // suppress boot messages
- /* Set ULP wake up period to T = 20ms.
- * Minimum pulse width has to be T * (ulp_debounce_counter + 1) = 80ms.
- */
- ulp_set_wakeup_period(0, 200);
- /* Start the program */
- err = ulp_run(&ulp_entry - RTC_SLOW_MEM);
- ESP_ERROR_CHECK(err);
- }
- static void update_pulse_count(void)
- {
- /* ULP program counts signal edges, convert that to the number of pulses */
- uint32_t pulse_count_from_ulp = (ulp_edge_count & UINT16_MAX) / 2;
- /* In case of an odd number of edges, keep one until next time */
- ulp_edge_count = ulp_edge_count % 2;
- printf("Pulse count from ULP: %5d\n", pulse_count_from_ulp);
- }
ULP+BLE
-
- Posts: 2
- Joined: Tue Apr 05, 2022 2:28 pm
ULP+BLE
Hi, I wanna use the ULP processor as a pulse counter together with BLE on the main processor. I ran the ULP example code and it works fine. Once I enable BLE through the sdkconfig or idf.py menuconfig and add the all the neccesary BLE includes it doesn't work. It gives me an error saying: "main/ulp_example_main.c:22:10: fatal error: esp_bt.h: No such file or directory". How can I fix this problem?
- Attachments
-
- ulp_example_main.c
- (3.63 KiB) Downloaded 147 times
-
- Posts: 2
- Joined: Tue Apr 05, 2022 2:28 pm
Re: ULP+BLE
So I got it working, but whenever it goes into sleep mode the ULP pulse counter seems a bit unstable. Without going into sleep mode the value changes -+1 and with sleep mode enabled it changes -+5. Is there a way to make it more stable?
Re: ULP+BLE
How did you fix the esp_bt.h not found issue? I am seeing the same thing with the ULP + BLE. Many thanks!
Who is online
Users browsing this forum: Corand, sirOwlBeak and 103 guests