EPTmachine

  • 2025-06-08
  • 回复了主题帖: 【CY8CKIT_062S2_AI测评】3、雷达存在检测以及MQTT数据上报

    lugl4313820 发表于 2025-6-8 09:45 这个雷达可以检测的项目多吗?比如能检测活体存吗? 可以,区域内的活动检测是可以实现的。

  • 2025-06-02
  • 发表了主题帖: 【CY8CKIT_062S2_AI测评】3、雷达存在检测以及MQTT数据上报

    本帖最后由 EPTmachine 于 2025-6-2 10:36 编辑 开发板板载的雷达芯片为XENSIV 60GHz RADAR sennor。型号为BGT60TR13,雷达的配置1发1收的配置,只可以检测距离信息。 雷达芯片的介绍网站为 https://www.infineon.com/cms/en/product/sensor/radar-sensors/radar-sensors-for-iot/60ghz-radar/bgt60tr13c/ 该款雷达芯片有配套的 Radar Development Kit用于配置雷达芯片的工作模式以及数据处理接口函数。 雷达的工作原理是通过发出FMCW(Frequency Modulated Continuous Wave,调频连续波),接收反射的电磁波,依据反射的时间和波形来确定物体的存在信息。在使用雷达前需要对雷达芯片发出的波形的进行配置。雷达波形可以通过json文件来描述。 ```bash ./bgt60-configurator-cli -c radar_low_framerate_config.json -d -o radar_low_framerate_config.h ``` 得到的`radar_low_framerate_config.h`文件中存放配置雷达芯片寄存器的值,用于雷达发送设定的FMCW波。英飞凌官方示例中有雷达探测的示例,参考其中的示例的流程,可以快速实现雷达探测输出的应用。 # 1、添加工程需要的库 在library manager中打开添加库的界面,搜索FreeRTOS、雷达探测相关的库 添加完成后,点击library manager中的Update按钮,对库进行更新,然后关闭该界面。 回到主工程,在工程顶层目录中创建src文件夹用于存放源代码,将main.c文件移动该文件夹。 在mtb_shared文件夹中可以找到添加的库组件的ReadME.md文件,依据其中的说明,修改工程配置,从而可以使用库开发应用程序。 # 2、初始化雷达芯片 设定雷达芯片使用的SPI引脚和通讯速率,用于初始化用于与雷达芯片通讯的SPI接口。 ```c++ #define PIN_XENSIV_BGT60TRXX_SPI_SCLK CYBSP_RSPI_CLK #define PIN_XENSIV_BGT60TRXX_SPI_MOSI CYBSP_RSPI_MOSI #define PIN_XENSIV_BGT60TRXX_SPI_MISO CYBSP_RSPI_MISO #define PIN_XENSIV_BGT60TRXX_SPI_CSN CYBSP_RSPI_CS #define PIN_XENSIV_BGT60TRXX_IRQ CYBSP_RSPI_IRQ #define PIN_XENSIV_BGT60TRXX_RSTN CYBSP_RXRES_L ``` 之前获得`radar_low_framerate_config.h`可以用于配置雷达芯片发出指定的Chirp。定义用于处理雷达数据就绪中断的回调函数,将数据传输到radar_data_management模块,用于后续的处理。 ```c++ static int32_t init_sensor(void) { if (cyhal_spi_init(&spi_obj, PIN_XENSIV_BGT60TRXX_SPI_MOSI, PIN_XENSIV_BGT60TRXX_SPI_MISO, PIN_XENSIV_BGT60TRXX_SPI_SCLK, NC, NULL, 8, CYHAL_SPI_MODE_00_MSB, false) != CY_RSLT_SUCCESS) { printf("[MSG] ERROR: cyhal_spi_init failed\n"); return -1; } /* Reduce drive strength to improve EMI */ Cy_GPIO_SetSlewRate(CYHAL_GET_PORTADDR(PIN_XENSIV_BGT60TRXX_SPI_MOSI), CYHAL_GET_PIN(PIN_XENSIV_BGT60TRXX_SPI_MOSI), CY_GPIO_SLEW_FAST); Cy_GPIO_SetDriveSel(CYHAL_GET_PORTADDR(PIN_XENSIV_BGT60TRXX_SPI_MOSI), CYHAL_GET_PIN(PIN_XENSIV_BGT60TRXX_SPI_MOSI), CY_GPIO_DRIVE_1_8); Cy_GPIO_SetSlewRate(CYHAL_GET_PORTADDR(PIN_XENSIV_BGT60TRXX_SPI_SCLK), CYHAL_GET_PIN(PIN_XENSIV_BGT60TRXX_SPI_SCLK), CY_GPIO_SLEW_FAST); Cy_GPIO_SetDriveSel(CYHAL_GET_PORTADDR(PIN_XENSIV_BGT60TRXX_SPI_SCLK), CYHAL_GET_PIN(PIN_XENSIV_BGT60TRXX_SPI_SCLK), CY_GPIO_DRIVE_1_8); /* Set the data rate to 25 Mbps */ if (cyhal_spi_set_frequency(&spi_obj, XENSIV_BGT60TRXX_SPI_FREQUENCY) != CY_RSLT_SUCCESS) { printf("[MSG] ERROR: cyhal_spi_set_frequency failed\n"); return -1; } #if defined (TARGET_APP_CYSBSYSKIT_DEV_01) || (TARGET_APP_KIT_BGT60TR13C_EMBEDD) /* Enable LDO */ if (cyhal_gpio_init(PIN_XENSIV_BGT60TRXX_LDO_EN, CYHAL_GPIO_DIR_OUTPUT, CYHAL_GPIO_DRIVE_STRONG, true) != CY_RSLT_SUCCESS) { printf("[MSG] ERROR: LDO_EN cyhal_gpio_init failed\n"); return -1; } #endif /* Wait LDO stable */ (void)cyhal_system_delay_ms(5); if (xensiv_bgt60trxx_mtb_init(&bgt60_obj, &spi_obj, PIN_XENSIV_BGT60TRXX_SPI_CSN, PIN_XENSIV_BGT60TRXX_RSTN, register_list_macro_only, // default config with macro settings XENSIV_BGT60TRXX_CONF_NUM_REGS_MACRO) != CY_RSLT_SUCCESS) { printf("[MSG] ERROR: xensiv_bgt60trxx_mtb_init failed\n"); return -1; } if (xensiv_bgt60trxx_mtb_interrupt_init(&bgt60_obj, NUM_SAMPLES_PER_FRAME*2, PIN_XENSIV_BGT60TRXX_IRQ, GPIO_INTERRUPT_PRIORITY, xensiv_bgt60trxx_interrupt_handler, NULL) != CY_RSLT_SUCCESS) { printf("[MSG] ERROR: xensiv_bgt60trxx_mtb_interrupt_init failed\n"); return -1; } return 0; } #if defined(CYHAL_API_VERSION) && (CYHAL_API_VERSION >= 2) static void xensiv_bgt60trxx_interrupt_handler(void *args, cyhal_gpio_event_t event) #else static void xensiv_bgt60trxx_interrupt_handler(void *args, cyhal_gpio_irq_event_t event) #endif { CY_UNUSED_PARAMETER(args); CY_UNUSED_PARAMETER(event); mgr.run(true); } ``` # 3、创建数据采集任务 使用示例程序的radar_date_managment结构体以及接口函数,使用一个可以容纳6帧雷达数据的FIFO,设置FIFO的可读出的帧个数为2,当通过SPI总线读取的雷达数据达到两帧后,在雷达数据就绪中断函数中调用`mgr.run(true)`进行数据的缓存和发布。调用TasKNotifyGive函数通知订阅雷达数据的main_task任务处理读取出的数据。 ```c /* * trigger radar data manager */ #ifdef FREERTOS_AWARE void radar_data_manager_run(bool run_from_isr) #else void radar_data_manager_run() #endif { uint32_t samples; if (manager.tail < manager.buff_size) { int32_t result = manager_interface->in_read_radar_data((void*)(manager.buffer + manager.tail), &samples, (manager.buff_size - manager.tail)); if (result >= 0) { if ( samples = manager.fill_level) { #ifdef FREERTOS_AWARE //now inform all subscribers about available data for (int sub = 1; sub range_bin, event->timestamp); snprintf(publisher_q_data.data, sizeof(publisher_q_data.data), "{\"PRESENCE\": \"IN macro%d\"}",event->range_bin); break; case XENSIV_RADAR_PRESENCE_STATE_MICRO_PRESENCE: cyhal_gpio_write(USER_LED1, true); cyhal_gpio_write(USER_LED2, false); printf("[INFO] micro presence %" PRIi32 " %" PRIi32 "\n", event->range_bin, event->timestamp); break; case XENSIV_RADAR_PRESENCE_STATE_ABSENCE: printf("[INFO] absence %" PRIu32 "\n", event->timestamp); cyhal_gpio_write(USER_LED1, false); cyhal_gpio_write(USER_LED2, true); snprintf(publisher_q_data.data, sizeof(publisher_q_data.data), "{\"PRESENCE\": \"OUT\"}"); break; default: printf("[MSG] ERROR: Unknown reported state in event handling\n"); break; } /* Send message back to publish queue. */ xQueueSendToBack(publisher_task_q, &publisher_msg, 0 ); } ``` # 6、运行演示 将编译好的程序烧录到开发板,在电脑上部署MQTT服务器。 开发板连接到电脑后,可以在收集端的APP对雷达的检测效果进行查看,可以看到可以检测到活动的物体出现在不同的检测区域。由于雷达是1发1收的,只能检测到距离信息。 [localvideo]12105a4080e2b5e7aa78619df079da6e[/localvideo] # 7、总结 英飞凌的雷达芯片的探测和反应速度都比较平稳,在市面上也可以找到很多采用英飞凌的雷达模块,而且英飞凌提供的库函数支持便于使用,使用英飞凌做雷达应用很方便。完整的程序在附件中

  • 2025-05-24
  • 发表了主题帖: 【CY8CKIT_062S2_AI测评】2、AI处理IMU传感器数据,识别不同轨迹

    本帖最后由 EPTmachine 于 2025-5-25 15:54 编辑 2023年5月17日,英飞凌宣布已收购瑞典斯德哥尔摩初创企业Imagimob。经过整合之后,现在使用DEEPCRAFT Studio来表示英飞凌的边缘AI开发工具。该工具安装在ModusTool Setup查看安装状态。 # 1、DEEPCRAFT Studio开发流程 以下链接为DEEPCRAFT Studio的使用说明。本文根据以下链接中的指南进行,具体开发时建议参考官方最新文档操作,版本更新变化会导致以下操作对不上。 https://developer.imagimob.com/ DEEPCRAFT Studio集成数据采集和标注、管理、分析并处理数据用于构建模型,迭代选取最优模型,并最终部署到边缘AI设备整套流程的功能。利用DEEPCRAFT Studio开发边缘AI的流程如下。 按照上述流程,通过收集在不同运动轨迹(圆形、水平、上下、静止)下IMU惯性传感器的数据,对数据进行收集、标注后,训练轨迹识别模型。部署模型到开发板,采集IMU数据,通过部署的模型识别轨迹的类型,并通过串口上报。 # 2、Data Preparation数据收集 CY8CKIT_062S2_AI开发套件烧录支持Tensor Streaming Protocol Version 2传输协议的固件`streaming-firmware-ai-eval-kit.hex`。关于固件的具体烧录方法可以查看以下链接。 https://developer.imagimob.com/getting-started/infineon-ai-evaluation-kit 使用ModusToolBox Programmer烧录采集采集传感器信息的固件。 烧录完成后,PC与开发板的J1 USB接口连接,在DEEPCRAFT Studio中进行数据收集。 DEEPCRAFT Studio中创建Graph UX工程,通过图形化的方式完成数据收集和标记的过程。在工程的Node Explore中添加IMU数据输入点。 同时添加一个Visualization->Data Track用于收集数据,连接创建出来的连个结点,从而创建一个收集IMU数据的工作流。 点击工具栏中的Start按钮,开始收集IMU数据。采集时长为一分钟的数据,保持开发板在某种轨迹中运动,采集满一分钟后停止数据记录。 保存采集到的数据,设置采集的数据集名称为对应的运动轨迹(这样有助于模型训练进行分类) 重复上述过程,收集开发板在四种不同运动(static、circle、horizontal、vertical)状态下的IMU数据,每种状态收集25组数据用于模型的训练。 # 3、Preprocessing数据预处理 创建Classification工程用于对采集到数据进行处理和后续的模型训练。 将收集到的数据复制粘贴到工程的Data文件中(如果没有,则创建一个Data文件夹),导入数据后,在面板上可以查看数据的状态。 数据出错一般是有在采集数据时标注的范围有问题,打开有问题的文件,拖动标注条即可。修改该完成后,重新扫描数据集即可。 数据校验完成后,对数据集进行分配,分别用于模型训练过程中的训练和验证,以及模型的测试。 接下来在Preprocessor栏中添加数据预处理项。 添加完成后,执行相应的配置,完成对数据的预处理 # 4、Model Training模型训练 完成上述数据处理流程,在Training面板,设置模型的参数。 点击“Start New Training Job”登录到Imagimob Cloud执行模型训练任务。 在Imagimob Cloud的面板中可以查看当前任务的进度。等待模型训练完成即可 模型训练完成后可以查看训练的效果。 # 5、Code Generation and Model Deployment 代码生成和模型部署 从Imagimob Cloud下载训练完成的模型。 打开下载文件中.h5文件,设定代码生成的目标芯片、模型文件路径以及加速参数,生成相应的代码文件。 得到的文件中模型代码文件为model.c/h,模型函数接口说明如下。 https://developer.imagimob.com/deployment 在英飞凌的官方示例中,给出了一个IMU传感器进行运动检测的`DEEPCRAFT_Deploy_Model_Motion`示例,将训练好的模型文件model.c/h替换掉工程中原有的文件即可对训练好的模型进行验证,替换完成后编译工程。 烧录到开发板上后,通过串口获取模型识别结果。 可以正确识别出轨迹的发生,但是识别的稳定性存在抖动,IMU这种灵敏的传感器,在AI的加持下可以用来识别轨迹,但是也存在不稳定的问题。 # 6、总结 英飞凌的DEEPCRAFT Studio提供从数据采集、标注、模型训练、模型优化以及代码部署的功能,工具提供的功能可以满足开发者的需要,使用起来还是很方便的。

  • 2025-05-23
  • 回复了主题帖: 2025ST峰会见闻和感受

    秦天qintian0303 发表于 2025-5-23 12:10 老哥收获满满啊      上午场发了块板卡,参加活动很不错

  • 回复了主题帖: 2025ST峰会见闻和感受

    吾妻思萌 发表于 2025-5-23 16:04 最后那个残影是拍摄原因还是屏幕原因啊?我感觉不应该啊 应该是设置问题,TouchGFX用得不熟练

  • 回复了主题帖: 2025ST峰会见闻和感受

    nmg 发表于 2025-5-23 14:20 这些GUI的效果很cool啊   “STLINK-V3PWR测量STM32U3在不同功耗模式下的电流消耗”, ... 出了很久了,只不过因为价格高,用的人少

  • 2025-05-22
  • 发表了主题帖: 2025ST峰会见闻和感受

    本帖最后由 EPTmachine 于 2025-5-23 11:44 编辑 本次ST峰会有幸得到ST和EEWorld论坛提供的特邀参会机会。展会展出ST以及合作伙伴的产品的最新进展。 # 1 展会见闻 在N6的展台,星瞳科技和正点原子都在展位上展出自家基于STM32N6的开发板。星瞳科技的OpenMV系列产品专门为视觉应用准备,外观小巧,搭载STM32N6,很适合创客开发有创意的视觉应用。正点原子的ATK-DNN647开发目前还在SOP阶段,相信很快就能上市与开发者见面,搭载的芯片为STM32N647XOH3Q,提供的很多的接口,比如CAN-FD、RS232、RS485、以太网接口、音频输入输出接口、USB、RGBLCD、MIPI、CSI等。 在低功耗产品展台,展示的STM32U3系列芯片在Standby模式下的电流值为9.8μA,使用的测量工具是STLINK-PWRV3。这样的低功耗设计,在业内算是排得上号的。 STM32MP系列的展台比较多,展示合作伙伴的产品,比如正点原子的ATK-DLMP257B开发板. STM32MP系列部署Codesys构成的传感器监控网络和显示面板. 在慕尼黑上展示的STM32MP2视觉手势识别控制机械手的方案在现场也有展示,效果挺好. [localvideo]89f9561b2913b2cf1fedb80072953c03[/localvideo] STM32在智能家居方面展出KNX连接智能家居的解决方案,在树莓派上部署HomeAssistant显示连接的智能家居产品,比如ToF传感器,触摸面板,空调控制器,RGB驱动,STM32系列产品在智能家居中给的解决方案形式还是很多的,其中的一些成品可以参考. # 2 现场实训 ST在现场还提供不同产品的实训,上午参加U3超低功耗编程,体验如何使用STLINK-V3PWR测量STM32U3在不同功耗模式下的电流消耗.经过现场的实操,在开启SMPS功能后,在run模式下的电流消耗在2000μA.Sleep模式下能达到800μA,STOP2模式下在20μA,Standby模式下在10μA.和展台上展示的效果是一致的. 同时体验如何开启在STOP模式下的调试功能,一方面要确认Debug接口的引脚配置为调试模式,另一方面要在程序中调用以下函数. ```c HAL_DBGMCU_EnableDBGStopMode(); ``` 这样就可以在STOP模式中使用调试功能来调试代码. 下午场参加GUI解决方案的实训,现场使用正点原子的H7RX开发板体验lvgl解决方案,同时修改原有代码,调用lvgl函数实现界面之间的跳转,实际效果如下. 后续还使用TouchGFX设计界面UI实现动态的GUI效果. 通过参加上述两场实训,收获很多,体验不同产品的同时,而且锻炼自己的编程技巧,是不可多得的好活动. # 3 总结 这次ST峰会不仅展示不同产品的解决方案,同时也提供现场的操作演示,在现场就可以了解产品的实际性能,是十分不错的活动.

  • 2025-05-14
  • 发表了主题帖: 【CY8CKIT_062S2_AI测评】1、MQTT监控开发板LED、按键和气压传感器信息

    本帖最后由 EPTmachine 于 2025-5-15 16:41 编辑 开发板的系统框图如下,其中带有Wifi模块,可以用于MQTT应用。 在VSCode中创建新的工程,在弹出的BSP选择页面中,根据开发板的类型选择CY8CKIT-062S2-AI。 在应用选择界面,选择MQTT应用实例,并设置工程名。完成后,点击创建按钮,完成工程创建。 在该示例的基础上进行修改即可实现MQTT应用。 ## 1、硬件资源 板载的两个LED灯,一个SW2用户按键,一个dps368气压计、bmi270六轴惯性传感器、bmm350磁力计。使用不同的MQTT TOPIC来管理不同外设的信息,在对应的TOPIC值中设置对象的字符串信息,调用MQTT的消息API,对开发板上的外设进行管理。 https://www.infineon.com/cms/en/product/evaluation-boards/cy8ckit-062s2-ai/ 通过上面的链接查看CY8CKIT-062S20AI的产品页面,下载开发套件的用户手册。 在硬件介绍页面可以找到上述硬件的原理图和引脚信息。 LED的信息如下 SW2的信息如下 DPS368气压传感器的信息如下,I2C地址为0x77 ## 2、程序开发 CY8CKIT-062S20AI是英飞凌官方的开发套件,开发板上的外设都有相应的示例程序和库函数用于开发,很多程序可以参考官方的示例来实现。在参考示例的前提下,实现通过MQTT协议,监控板载的按键、气压传感器、六轴惯性传感器和三轴磁力计的数据; 英飞凌提供的示例代码结构清晰,注释也很多。板上外设都有对应的驱动库,只需要添加相应的库函数,通过调用接口API,就可以完成相应的应用。 这里参考示例中的Wifi MQTT Client来实现MQTT通讯。 ### 2.1 运行示例 修改Wifi MQTT Client示例`configs/wifi_config.h`的WIFI_SSID和WIFI_PASSWORD,指定连接Wiif热点信息,和`configs/mqtt_client_config.h`的MQTT_BROKER_ADDRESS等MQTT通讯配置信息。编译工程后,就可以运行示例。 在PC端使用mosquitto部署本地的MQTT服务器用于演示。下载安装mosquitto软件。 https://mosquitto.org/download/ 修改安装路径下的mosquitto.conf文件,设置MQTT Borker服务器的监听地址、登录授权配置。 ```bash listener 1883 #服务器监听端口 allow_anonymous false #禁止匿名登录 password_file pwfile.example #指定验证信息位置 ``` 在命令行中运行下列指令,添加登录ID,根据提示输入密码,完成登录账户的配置 ```powershell “./mosquitto_passwd -c pwfile.example eeworld ``` 运行`.\mosquitto -c .\mosquitto.conf -v`运行配置好的服务器。 利用手机端的MQTT客户端配置服务器,可以看到服务器端接收连接和订阅信息。 示例程序中通过发布和订阅“ledstatus”的主题,实现板载LED的控制。在手机端的MQTT客户端配置主题为“ledstatus”的控件。 打开示例程序后,在VSCode中选择Terminal->Run_Task指令。 在弹出的对话框中选择编译和烧录任务,将程序烧录到开发板上。 程序运行后,设备连接到搭建好的MQTT服务器,可以通过按键改变LED状态,发布“ledstatus”主题的消息,在APP上现实。同时也可以通过APP应用发布相同的主题消息,来控制板载LED。 ### 2.2 程序修改 Wifi MQTT Client示例实现对板载的LED的状态控制,在示例的基础上,添加读取气压传感器、六轴IMU传感器和三轴磁力计数据的程序,并将数据以不同的MQTT消息,发布到MQTT网络中,即可实现对开发板状态的监控。 在英飞凌官方的驱动库中,可以找到板载传感器的驱动库,使用Library Manager工具可以对工程需要使用的库进行管理。 在Library Manager界面中根据需要添加额外的库文件。 在VSCode的文件标签栏中,可以查看添加的库文件中的ReadME.md文件,了解如何使用接口API。 dps368气压传感器可用于监测环境的气压值。查看库函数的ReadMe.md可以了解如何初始化传感器和获取气压数据。主要使用的库函数如下. ```c xensiv_dps3xx_mtb_init_i2c(&pressure_sensor, &i2c, XENSIV_DPS3XX_I2C_ADDR_DEFAULT); xensiv_dps3xx_read(&pressure_sensor, &pressure, &temperature); ``` 参考英飞凌例程中用于采集传感器数据的例程,添加读取气压传感器数据并发送到MQTT网络的功能. 在工程新添加的文件夹和文件如下. dev_dps368.h/c中完成传感器的初始化和数据读取函数.主要的函数如下. ```c typedef struct { float data_buffer[2]; xensiv_dps3xx_t dps3xx; } dev_dps368_t; static dev_dps368_t* dps368_p; /******************************************************************************* * Function Prototypes *******************************************************************************/ static bool _init_hw(dev_dps368_t* dps, cyhal_i2c_t* i2c) { cy_rslt_t result; /* Initialize pressure sensor */ result = xensiv_dps3xx_mtb_init_i2c(&dps->dps3xx, i2c, DPS368_ADDRESS); if (result != CY_RSLT_SUCCESS) { return false; } printf("dps368: Initialized device.\r\n"); return true; } bool dev_dps368_register(cyhal_i2c_t* i2c) { int status; dps368_p= (dev_dps368_t*)malloc(sizeof(dev_dps368_t)); if(dps368_p == NULL) { return false; } memset(dps368_p, 0, sizeof(dev_dps368_t)); /* Initialize the DPS device with the provided I2C interface */ if(!_init_hw(dps368_p, i2c)) { free(dps368_p); return false; } return true; } void dev_dps368_read(float* p_pressure,float* p_temperature) { xensiv_dps3xx_read(&dps368_p->dps3xx, p_pressure, p_temperature); } ``` system.c/h中完成I2C外设和传感器的初始化.主要的代码如下 ```c static bool _init_i2c(cyhal_i2c_t* i2c) { cy_rslt_t result; /* I2C config structure */ cyhal_i2c_cfg_t i2c_config = { .is_slave = false, .address = 0, .frequencyhal_hz = 400000 }; /* Initialize I2C for IMU communication */ result = cyhal_i2c_init(i2c, CYBSP_I2C_SDA, CYBSP_I2C_SCL, NULL); if(result != CY_RSLT_SUCCESS) { return false; } /* Configure the I2C */ result = cyhal_i2c_configure(i2c, &i2c_config); if(result != CY_RSLT_SUCCESS) { return false; } return true; } void system_load_device_drivers(void) { static cyhal_i2c_t i2c; /* Enable i2c */ if(!_init_i2c(&i2c)) { printf("Init i2c failed.\n"); } #ifdef IM_ENABLE_DPS368 if(!dev_dps368_register(&i2c)) { printf("DPS368 registration failed.\n"); } #endif } ``` dps_task.c/h完成周期读取传感器数据,并发送数据到MQTT发布队列中,触发MQTT消息发布.任务函数如下 ```c void dps368_task(void *pvParameters) { publisher_data_t publisher_q_data; /* Assign the publish command to be sent to the publisher task. */ publisher_q_data.cmd = PUBLISH_MQTT_MSG_DPS368; while(true) { dev_dps368_read(&dps368_data_buff.press,&dps368_data_buff.temprature); /* Send the command and data to publisher task over the queue */ xQueueSend(publisher_task_q, &publisher_q_data,portMAX_DELAY); vTaskDelay(30000); } } ``` 在publish_task.c/h中添加用于管理dps368数据发布的定义和函数调用,相关的代码如下 ```c /* Commands for the Publisher Task. */ typedef enum { PUBLISHER_INIT, PUBLISHER_DEINIT, PUBLISH_MQTT_MSG_BUTTON, PUBLISH_MQTT_MSG_DPS368 } publisher_cmd_t; void publisher_task(void *pvParameters) { ...... case PUBLISH_MQTT_MSG_DPS368: { sprintf(dsp368_msg,"press is %f,temp is %f\n",dps368_data_buff.press,dps368_data_buff.temprature); publish_dps368.payload=dsp368_msg; publish_dps368.payload_len=strlen(publish_dps368.payload); result = cy_mqtt_publish(mqtt_connection, &publish_dps368); if (result != CY_RSLT_SUCCESS) { printf(" Publisher: MQTT Publish failed with error 0x%0X.\n\n", (int)result); /* Communicate the publish failure with the the MQTT * client task. */ mqtt_task_cmd = HANDLE_MQTT_PUBLISH_FAILURE; xQueueSend(mqtt_task_q, &mqtt_task_cmd, portMAX_DELAY); } print_heap_usage("publisher_task: After publishing an MQTT message"); break; } ...... } ``` 添加上述代码后,实现5秒更新一次传感器数据的功能。发出的数据消息在APP上以文字标签的样式显示。订阅设定的MQTT主题,连接开发板后,可以看到程序接收到开发板发送的气压传感器数据. [localvideo]64343133c0637703a257947e21e764d3[/localvideo] 同样地,在按键按下后,根据当前按键控制的状态变量的值,切换不同的消息,以MQTT信息的方式发布到MQTT网络中。相关的代码如下 ```c //按键回调函数,检测按键事件,发送发布MQTT数据的信号量 static void isr_button_press(void *callback_arg, cyhal_gpio_event_t event) { BaseType_t xHigherPriorityTaskWoken = pdFALSE; publisher_data_t publisher_q_data; /* To avoid compiler warnings */ (void) callback_arg; (void) event; /* Assign the publish command to be sent to the publisher task. */ publisher_q_data.cmd = PUBLISH_MQTT_MSG_BUTTON; if(current_button_state==BUTTON_ON_STATE) { publisher_q_data.data = (char *)MQTT_BUTTON_PRESSED_MESSAGE; current_button_state = BUTTON_OFF_STATE; } else { publisher_q_data.data = (char *)MQTT_BUTTON_RELEASED_MESSAGE; current_button_state = BUTTON_ON_STATE; } /* Send the command and data to publisher task over the queue */ xQueueSendFromISR(publisher_task_q, &publisher_q_data, &xHigherPriorityTaskWoken); portYIELD_FROM_ISR(xHigherPriorityTaskWoken); } //发布按键事件对应的MQTT消息。 case PUBLISH_MQTT_MSG_BUTTON: { /* Publish the data received over the message queue. */ publish_info.payload = publisher_q_data.data; publish_info.payload_len = strlen(publish_info.payload); printf("\nPublisher: Publishing '%s' on the topic '%s'\n", (char *) publish_info.payload, publish_info.topic); result = cy_mqtt_publish(mqtt_connection, &publish_info); if (result != CY_RSLT_SUCCESS) { printf(" Publisher: MQTT Publish failed with error 0x%0X.\n\n", (int)result); /* Communicate the publish failure with the the MQTT * client task. */ mqtt_task_cmd = HANDLE_MQTT_PUBLISH_FAILURE; xQueueSend(mqtt_task_q, &mqtt_task_cmd, portMAX_DELAY); } print_heap_usage("publisher_task: After publishing an MQTT message"); break; } ``` 在接收到信息后改变APP端的图标状态。 [localvideo]1be5c2bbf8b1477564b7399c17e92657[/localvideo] 在APP上设置状态切换控件,通过发布“TURN ON”和“TURN OFF”两个不同的消息。开发板的订阅任务通过订阅"ledstatus"主题的消息,控制开发板上的LED灯状态。主要的代码如下。 ```c //接收到订阅的消息后,对消息数据进行解析,发送更新状态的信号量。 void mqtt_subscription_callback(cy_mqtt_publish_info_t *received_msg_info) { /* Received MQTT message */ const char *received_msg = received_msg_info->payload; int received_msg_len = received_msg_info->payload_len; /* Data to be sent to the subscriber task queue. */ subscriber_data_t subscriber_q_data; printf(" \nSubsciber: Incoming MQTT message received:\n" " Publish topic name: %.*s\n" " Publish QoS: %d\n" " Publish payload: %.*s\n", received_msg_info->topic_len, received_msg_info->topic, (int) received_msg_info->qos, (int) received_msg_info->payload_len, (const char *)received_msg_info->payload); /* Assign the command to be sent to the subscriber task. */ subscriber_q_data.cmd = UPDATE_DEVICE_STATE; /* Assign the device state depending on the received MQTT message. */ if ((strlen(MQTT_DEVICE_ON_MESSAGE) == received_msg_len) && (strncmp(MQTT_DEVICE_ON_MESSAGE, received_msg, received_msg_len) == 0)) { subscriber_q_data.data = DEVICE_ON_STATE; } else if ((strlen(MQTT_DEVICE_OFF_MESSAGE) == received_msg_len) && (strncmp(MQTT_DEVICE_OFF_MESSAGE, received_msg, received_msg_len) == 0)) { subscriber_q_data.data = DEVICE_OFF_STATE; } else { printf(" Subscriber: Received MQTT message not in valid format!\n"); return; } print_heap_usage("MQTT subscription callback"); /* Send the command and data to subscriber task queue */ xQueueSend(subscriber_task_q, &subscriber_q_data, portMAX_DELAY); } //根据更新信号,设置LED灯状态。 case UPDATE_DEVICE_STATE: { /* Update the LED state as per received notification. */ cyhal_gpio_write(CYBSP_USER_LED, subscriber_q_data.data); /* Update the current device state extern variable. */ current_device_state = subscriber_q_data.data; print_heap_usage("subscriber_task: After updating LED state"); break; } ``` LED灯的变化以及MQTT数据的变化如下。 [localvideo]f802b548001466c2f89645d752f1be23[/localvideo] # 总结 在英飞凌提供的MQTT示例基础上,添加传感器读取和消息发布的功能,可以快速开发类似的应用,进行原型验证。本文对示例程序进行修改,添加dps368气压传感器的数据库,实现对开发板上按键、LED和气压传感器数据的监控。

  • 2025-05-12
  • 回复了主题帖: 【CY8CKIT-062S2-AI】0.ModusToolBox环境搭建以及注意事项

    lugl4313820 发表于 2025-5-12 17:59 他这个支持matter协议吗?如果可以,大佬是否出个教程。 暂时没有了解Matter的示例,会尝试做一个。

  • 回复了主题帖: 【CY8CKIT-062S2-AI】0.ModusToolBox环境搭建以及注意事项

    Jacktang 发表于 2025-5-12 07:45 VSCode用的人也比较多,安装相对不很复杂 Eclipse IDE用起来存在代码引用的问题(官方现在也没有解决办法),VSCode却没有,VSCode对于一般用户来说,功能够用了。

  • 2025-05-11
  • 发表了主题帖: 【CY8CKIT-062S2-AI】0.ModusToolBox环境搭建以及注意事项

    # 开发环境搭建 英飞凌提供的开发工具支持Eclipse、VSCode、CLI多个平台,其中使用VSCode开发体验最好。以下是VSCode安装环境的使用手册的连接。 https://www.infineon.com/dgdl/Infineon-Visual-Studio-Code-user-guide-UserManual-v07_00-EN.pdf?fileId=8ac78c8c92416ca50192787be52923b2 根据手册中的安装指导,首先安装ModusToolBoxsetup。 下载[ModusToolBoxsetup](https://softwaretools.infineon.com/tools/com.ifx.tb.tool.modustoolboxsetup),方便管理安装ModusTool Box配套工具,使用该工具额可以查看已安装软件,并且提示用户缺少的依赖项。 接下来安装开发所需的工具链、编译工具等,[ModusToolBox Installation Guide](https://www.infineon.com/ModusToolboxInstallguide)文档介绍如何安装,文档详细介绍如何安装ModusTool Box相关的软件。需要安装的软件有多个,要耐心读完开发指南,避免使用的时候无从下手。 软件的安装方式分为在线安装和离线安装,在线安装对网络的要求高,对网络不稳定和无法访问网络的用户,参考[ModusToolBox 离线安装指南](https://www.infineon.com/cms/en/design-support/tools/sdk/modustoolbox-software/modustoolbox-offline-installation/)对如何进行离线安装进行介绍。 最后安装在VSCode中所需的插件,到此开发所需的开发环境搭建完成。通过ModusToolBoxsetup可以查看软件的安装情况。 ## 关于应用开发的软件支持包 在VSCode中创建新的工程应用。弹出的"Project Creator"界面中根据芯片和开发板来选择不同的应用模板和示例。 在数据源设置国内数据源,提高访问速度。这种方式是在线的,速度受网络连接限制。 对于离线开发的情况,英飞凌提供离线功能。可以在网络连接有效时使用lcs-mananger-cli来使用Local Content Storage(LCS)功能来管理本地的离线BSP支持。以下为工具说明书的链接。 https://www.infineon.com/ModusToolboxLCSManager 在Windows上使用需要运行modus_shell,在搜索栏内输入"modus_shell",在搜索结果中运行modus_shell。 打开shell后,根据手册中的指引找到lcs-manager-cli工具的安装目录,运行 在用户的环境变量中设置`MTB_LOCAL_CONTENT_PATH`为数据库的安装位置,参考手册的第2节,运行“--add-all”指令,可以把在线的数据库复制到本地,大约5,6个G。 在实际使用时,Local Content的选项有时候选不上,本文的解决方法是,在用户的环境变量中添加 `MTB_USE_LOCAL_CONTENT`为True,强制使用本地数据库,这样就可以使用本地的离线数据进行开发。如果要使用在线的,将环境变量删除,注销重新登录即可。 # 总结 在安装开发环境时,软件有的功能在不断迭代和更新,参考官方最新的文档操作。

  • 2025-05-10
  • 回复了主题帖: ESP32P4-Function-EV-Board小智AI演示

    小智AI接口不收费,移植到H7上,语音唤醒功能可以不实现,实时音频传输功能需要想办法实现。

  • 2025-05-08
  • 发表了主题帖: ESP32P4-Function-EV-Board小智AI演示

    # ESP32P4-Function-EV-Board小智AI演示 小智AI在ESP32系列芯片上有很多实现方案,最近尝试在ESP32P4上移植小智AI,屏大看上去感觉不错。分享下移植的效果。 [localvideo]09eb518a9268a29553b12e70ab8e0260[/localvideo]

  • 2025-05-03
  • 发表了主题帖: ESP32P4-Function-EV-Board 参考资料

    # ESP32P4-Function-EV-Board 参考资料 乐鑫开发板的优势是示例程序丰富,程序开源。ESP32P4相关的资料也有很多。ESP32P4-Function-EV-Board官方的介绍页面提供开发的简要说明和硬件说明书。 https://docs.espressif.com/projects/esp-dev-kits/zh_CN/latest/esp32p4/esp32-p4-function-ev-board/user_guide.html 在ESP32P4页面可以找到芯片使用的具体说明,不过乐鑫资料之间的缺少相互索引功能,找资料时有些困难。 https://docs.espressif.com/projects/esp-idf/zh_CN/v5.4.1/esp32p4/index.html ESP-IDF中提供芯片外设的使用示例,同时其中也有开发板的示例。包括外设的基本使用、音频、物联网应用等,配合乐鑫的idf.py 工具,方便开发应用。 对于音频应用,乐鑫的ADF框架提供了很多不同场景的示例,包括音频录播、HTTP推流等。 https://docs.espressif.com/projects/esp-adf/en/latest/get-started/index.html https://github.com/espressif/esp-adf AI语音方面,乐鑫提供的esp-skainet,智能语音助手方案,支持命令词唤醒等智能音频功能。 https://www.espressif.com/zh-hans/solutions/audio-solutions/esp-skainet/overview ESP32P4的一个亮点时视频功能,在视频应用方面,乐鑫推出esp-brookesia IOT UI设计框架,为UI设计提供便利。 https://github.com/espressif/esp-brookesia 来自开源社区的资源更多,包括最近火爆的基于ESP32S3的小智AI。相比EPS32S3,ESP32P4的性能更为强大,ESP32P4正式上市后,可以期待更多有趣的应用。

  • 2025-05-02
  • 回复了主题帖: ESP32P4-Function-EV-board JTAG调试问题

    秦天qintian0303 发表于 2025-5-2 23:17 官方板不给带调试接口?   官方的串口支持下载、输出log。JTAG的USB接口没有接出来,需要连接额外的USB线。

  • 发表了主题帖: ESP32P4-Function-EV-board JTAG调试问题

    ESP32P4-Function-EV-board开发板提供USB转串口的数据传输,但是该接口只提供烧录和log打印功能。无法进行JTAG调试,参考esp32p4文档中关于JTAG调试文档,利用ESP32P4内置的JTAG调试器进行相关的操作。 https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.4/esp32p4/api-guides/jtag-debugging/index.html 在工程板上用于使用内置JTAG的P24和P25引脚没有被引出到USB口,需要自制一根USB线。官方关于调试器配置的说明中GPIO25接USB D-,GPIO24接USB D+。 https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.4/esp32p4/api-guides/jtag-debugging/configure-builtin-jtag.html v5.4 这里的说明是错误的。 查看正点原子的硬件原理图,GPIO25接USB D-,GPIO24接USB D+。对换接线即可正常使用ESP32P4的内置JTAG调试器,在ESP32P4-Function-EV-board上调试程序。

  • 回复了主题帖: ESP32-P4-Function-EV-Board 运行官方示例

    秦天qintian0303 发表于 2025-5-1 22:10 今明两面P4会大量出现吧    各家的开发板出了不少了,应该快了。

  • 2025-04-30
  • 发表了主题帖: ESP32-P4-Function-EV-Board 运行官方示例

    本帖最后由 EPTmachine 于 2025-5-1 14:52 编辑 # 认识ESP32-P4-Function-EV-Board ESP32-P4工程评估板在官网上有相关的介绍页面。 https://docs.espressif.com/projects/esp-dev-kits/zh_CN/latest/esp32p4/esp32-p4-function-ev-board/user_guide.html 开发板系统框图如下: 官方工程板套件包含的内容包含 - ESP32-P4-Function-EV-Board 主板 - 7 英寸 MIPI DSI 电容式触摸屏,分辨率为 1024 x 600 像素,以及FPC排线 - 200 万像素 MIPI CSI 接口摄像头、转接板和配件 开发板、屏幕和摄像头组装后,如下所示。 # VSCode开发拓展 使用VScode的ESP-IDF扩展管理ESP32芯片开发十分方便。 ESP-IDF扩展提供便捷的开发环境的配置和应用开发工具。 同时官方的[在线文档](https://docs.espressif.com/projects/vscode-esp-idf-extension/zh_CN/latest/index.html)指导用户使用相关的工具。 # 示例程序 对ESP32-P4-Function-EV-Board,乐鑫官方提供综合应用、Lvgl的Demo示例,用于展示开发板的功能和提供开发示例。相关的代码可以从[ESP32-Kit-Dev](https://github.com/espressif/esp-dev-kits/tree/master/examples/esp32-p4-function-ev-board)中获取相关的示例代码。 ### lvgl示例 乐鑫提供lvgl运行示例。在下载下来的示例代码文件夹中打开VSCode,加载示例工程,通过VSCode底部的图标工具设置工程的目标芯片、通讯端口、烧录方式,然后编译和烧录工程。 开发板上电后,的运行效果如下图所示。 开发板的屏幕刷新频率能达到60fps。 ### 综合应用示例 官方提供基于 [ESP_Brookesia](https://github.com/espressif/esp-brookesia),展示了一个类似 Android 的界面,其中包含许多不同的应用程序。该示例使用了开发板的 MIPI-DSI 接口、MIPI-CSI 接口、ESP32-C6、SD 卡和音频接口。示例代码中提供计算器、相机(带有人脸检测模式)、2048游戏、音乐播放器、视频播放器。 计算器运行演示 时钟演示 音乐播放器演示 # 总结 ESP32-P4-Function-EV-Board 开发板搭配的外设很多,ESP-IDF开发工具使用方便,便于开发应用。 现在也有一些开源项目来展示芯片的可能应用 https://oshwhub.com/esp-college/esp-hdmi-bridge

  • 2025-04-27
  • 回复了主题帖: 测评入围名单: 多传感器的AI评估板CY8CKIT-062S2-AI

    已查看我的测评计划,可在活动期间内完成并发帖分享;

  • 2025-04-25
  • 回复了主题帖: 聊一聊:从ARM到RISC-V,架构的变化,对单片机开发者有何影响?

    只要生态支持的够好,硬件性能的API的支持好,开发都差不多。

统计信息

已有115人来访过

  • 芯积分:658
  • 好友:--
  • 主题:56
  • 回复:139

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言