这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【STM32WBA55CG开发板】便携式健康仪【成果贴】

共5条 1/1 1 跳转至

【STM32WBA55CG开发板】便携式健康仪【成果贴】

助工
2025-01-02 16:52:18   被打赏 50 分(兑奖)     打赏

感谢EEPW推出的“ST NUCLEO-WBA55CG无线MCU开发大作战”活动,之前分享的过程贴链接:

【STM32WBA55CG开发板】便携式健康仪-TFT屏幕驱动【过程贴】 https://forum.eepw.com.cn/thread/388989/1

【STM32WBA55CG开发板】便携式健康仪-DHT11温湿度传感器驱动【过程贴】 https://forum.eepw.com.cn/thread/389137/1

【STM32WBA55CG开发板】便携式健康仪-MAX30102心跳血氧传感器驱动【过程贴】 https://forum.eepw.com.cn/thread/389138/1

本次完成的小制作是利用WBA55CG的强大性能和丰富外设接口,分别驱动了SPI接口的屏幕,I2C接口的传感器与单总线接口的温湿度传感器。成功实现了心率、心跳、环境温湿度数据的采集。并且利用板卡的BLE特性,上报了心率与心跳数据到上位机的BLE客户端。实现了数据的无线传输。

项目的软件流程图如下:

image.png


项目的主程序如下:

int main(void)
{

/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

/* MCU Configuration--------------------------------------------------------*/

/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Config code for STM32_WPAN (HSE Tuning must be done before system clock configuration) */
MX_APPE_Config();

/* USER CODE BEGIN Init */

/* USER CODE END Init */

/* Configure the system clock */
SystemClock_Config();

/* Configure the peripherals common clocks */
PeriphCommonClock_Config();

/* USER CODE BEGIN SysInit */

/* USER CODE END SysInit */

/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_GPDMA1_Init();
MX_RAMCFG_Init();
MX_RTC_Init();
MX_RNG_Init();
MX_ICACHE_Init();
MX_SPI1_Init();
MX_I2C1_Init();
/* USER CODE BEGIN 2 */
LOG_INFO_APP("\r\n Version 0.3");
	u8 i,j;
	float t=0;
	LCD_Init();//LCD
	LCD_Fill(0,0,LCD_W,LCD_H,WHITE);
	LCD_ShowString(0,0,"MAX30102 Pulse Oximiter Data",RED,WHITE,16,0);
	LCD_ShowString(180,10,"ver:0.3",RED,WHITE,16,0);
	LCD_ShowString(0,40,"LCD_W:",RED,WHITE,16,0);
	LCD_ShowIntNum(48,40,LCD_W,3,RED,WHITE,16);
	LCD_ShowString(80,40,"LCD_H:",RED,WHITE,16,0);
	LCD_ShowIntNum(128,40,LCD_H,3,RED,WHITE,16);
	LCD_ShowString(80,40,"LCD_H:",RED,WHITE,16,0);
	LCD_ShowString(0,70,"Increaseing Nun:",RED,WHITE,16,0);

#ifdef  USE_FULL_ASSERT
	LCD_ShowString(0,90,"USE FULL ASSERT DEFINED",RED,WHITE,16,0);
#else
	LCD_ShowString(0,90,"USE FULL ASSERT NOT DEFINED",RED,WHITE,16,0);
#endif
	LCD_ShowFloatNum1(128,70,t,4,RED,WHITE,16);
	t+=0.11;

	LCD_ShowPicture(40*0,120+0*40,40,40,gImage_1);
	LCD_ShowString(80,120,"Temperature:    °C",RED,WHITE,16,0);
	LCD_ShowString(80,140,"Humidity:      %RH",RED,WHITE,16,0);

	LCD_ShowString(0,190,"Heart Rate (BPM): ",RED,WHITE,16,0);
	LCD_ShowString(0,210,"Oxygen Saturation SpO2(%):",RED,WHITE,16,0);

	HAL_Delay(1000);

	long currentMillis = 0;
	long lastMillis = 0;


/* USER CODE END 2 */

/* Init code for STM32_WPAN */
MX_APPE_Init(NULL);

/* Infinite loop */
/* USER CODE BEGIN WHILE */
Max30102_reset();     
MAX30102_Config();    
currentMillis = millis();

DHT11_Init();

while (1)
{
	MX_APPE_Process();
	//blood_Loop();
	/* USER CODE BEGIN 3 */
	LCD_ShowFloatNum1(128,70,t,4,RED,WHITE,16);
	t+=0.11;
	currentMillis = millis();
	if( currentMillis - lastMillis > 5000 ){
		DHT11_Read_Data(&temperature, &humidity);	//读取温湿度值
		printf("温度:%d℃   湿度:%d%%RH\r\n", temperature, humidity);
		LCD_ShowIntNum(180,120,temperature,2,RED,WHITE,16);
		LCD_ShowIntNum(180,140,humidity,2,RED,WHITE,16);

		lastMillis = currentMillis;
	}
}


while (1)
{
	blood_Loop();
	currentMillis = millis();
	if( currentMillis - lastMillis > 1000 )
	{
		LCD_ShowFloatNum1(200,170,0,4,RED,WHITE,16);
		LCD_ShowFloatNum1(200,190,heart,4,RED,WHITE,16);
		LCD_ShowFloatNum1(200,210,SpO2,4,RED,WHITE,16);
		printf("心率%3d/min 血氧%2d%%\n\r", heart, (int)SpO2);
		lastMillis = currentMillis;
	}
/* USER CODE END WHILE */
MX_APPE_Process();

/* USER CODE BEGIN 3 */
	LCD_ShowFloatNum1(128,70,t,4,RED,WHITE,16);
	t+=0.11;
}


/* USER CODE END 3 */
}


实物效果:温湿度数据与小米的米家温湿度数据做比对,比较接近。

心率76,血氧 99与medisana (73 BPM, 98% SpO2)做比较。

image.png

image.png

上位机采用ST的官方app ST BLE Toolbox:

image.png

项目演示视频和完整代码见附件:

便携式健康检测仪.zip





院士
2025-01-02 16:58:19     打赏
2楼

确实挺准的啊


专家
2025-01-07 17:59:47     打赏
3楼

这个有意思了,感谢开源


菜鸟
2025-01-08 10:32:56     打赏
4楼

不错,感谢分享!


院士
2025-01-08 14:18:32     打赏
5楼

学习了,谢谢分享。


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]