手头有块FireBeetle 2 ESP32 P4开发板,这块开发板是基于ESP32-P4R32 芯片设计的高性能微控制器(MCU)开发板,支持单精度FPU和AI指令扩展,具有强大的AI处理能力。能支持Arduino,MicroPython,Esp-idf开发。有尝试使用MicroPython和Arduino在这个开发板上编程,还是比较简单,今天尝试一下使用ESP-IDF方式来实现一个SHT30温湿度传感器读取的项目。
使用esp-idf组件读取SHT30温湿度信息。不得不说使用Arduino和Mpy来读取SHT30传感器温湿度信息,还是相当简单的。但是使用esp-idf来实现对我来说就难得多了。正好留意到新版的esp-idf支持组件编程了,基本思想就是将硬件的读取,以组件的形式提供完整的功能模块,只要在程序中调用相应的组件即可,大大简化了编程。
第一步:新建一个工程,这里使用hello_world例程做为基础工程,来创建一个新的工程。
第二步:在esp-idf组件仓库里搜索SHT30,可以找到sht3x的组件库,接下来参考着文档说明,在项目中添加组件。
打开终端,输入“”idf.py add-dependency “esp-idf-lib/sht3x^1.0.8”,系统就会自动将组件依赖关系写到“idf_component.yml”里边去。可以打开这个文件查看,里边有组件的基本说明。
第三步:先编译一下工程。系统会自动检查组件依赖关系,会创建一个“managed_components”文件夹,将需要的组件预先下载下来(如果没有出现这个文件夹,就先清理一下项目,然后再编译就会出现了)。
第四步:参考着组件文件夹里边官方提供的例程,写一个读取SHT30 的代码。
view plaincopy to clipboardprint?
1.
10.
11. #include
12. #include
13. #include
14. #include
15. #include
16. #include
17. #include
18.
19.
20. #ifndef APP_CPU_NUM
21. #defi ne APP_CPU_NUM PRO_CPU_NUM
22. #endif
23.
24. static sht3x_t dev;
25.
26. void task(void *pvParameters)
27. {
28. fl oat temperature;
29. fl oat humidity;
30. esp_err_t res;
31.
32. // Start periodic measurements with 1 measurement per second.
33. ESP_ERROR_CHECK(sht3x_start_measurement( dev, SHT3X_PERIODIC_1MPS, SHT3X_HIGH));
34.
35. // Wait until fi rst measurement is ready (constant time of at least 30 ms
36. / / or the duration returned from *sht3x_get_measurement_duration*).
37. vTaskDelay(sht3x_get_measurement_duration(SHT3X_HIGH));
38.
39. TickType_t last_wakeup = xTaskGetTickCount();
40.
41. while (1)
42. {
43. // Get the values and do something with them.
44. if ((res = sht3x_get_results( dev, temperature, humidity)) == ESP_OK)
45. printf(“SHT3x Sensor: %.2f ℃, %.2f %%n”, temperature, humidity);
46. else
47. printf(“Could not get results: %d (%s)”,res, esp_err_to_name(res));
48.
49. // Wait until 2 seconds (cycle time) are over.
50. vTaskDelayUntil( last_wakeup, pdMS_TO_TICKS(2000));
51. }
52. }
53. void app_main()
54. {
55. ESP_ERROR_CHECK(i2cdev_init());
56. memset( dev, 0, sizeof(sht3x_t));
57. ESP_ERROR_CHECK(sht3x_init_desc( dev, 0x44, 0, 7, 8));
58. ESP_ERROR_CHECK(sht3x_init( dev));
59. xTaskCreatePinnedToCore(task, “sh301x_test”, confi gMINIMAL_STACK_SIZE * 8,NULL, 5, NULL, APP_CPU_NUM);
60. }
这里还不知道如何将组件的“Kconfi g”中的配置,引入到工程的配置中来,所以暂时都是用实际值来代替了配置的值。成功读取到SHT30 的温湿度值。
简单总结一下,使用组件编程,还是蛮方便的,跳过了底层繁琐的硬件驱动部分,可以直接使用已有的代码,避免重复造轮子。



0 条