血氧检测设备,esp8266改造成nodemcu,lua编程解决连接onenet不稳定情况

1、项目简介

2、实现逻辑

#检测血氧
#超阈值蜂鸣器报警
#通过esp8266串口传输数据给onenet

3、应用场景

#血氧检测
#远程血氧检测

4、核心代码梳理

##stm32代码//机智云协议初始化
void Gizwits_Init(void)
{   TIM3_Int_Init(9,7199);//1MS系统定时usart3_init(9600);//WIFI初始化memset((uint8_t*)&currentDataPoint, 0, sizeof(dataPoint_t));//设备状态结构体初始化gizwitsInit();//缓冲区初始化
}//数据采集
void userHandle(void)
{currentDataPoint.valueheart = heart;currentDataPoint.valuehpo2  = hpo2;currentDataPoint.valuepre   = pre;currentDataPoint.valuestart = beep_flag;
}//WiFi连接控制
void WIFI_Contection(u8 key)
{if(key==4){printf("WIFI进入AirLink连接模式\r\n");gizwitsSetMode(WIFI_AIRLINK_MODE);//Air-link模式接入}
}int main(void)
{   int i=0,count=0;USART_CONFIG();delay_init();              //延时函数初始化LED_Init();KEY_Init(); Adc1_Channe_Init();         //ADC初始化TIM4_Int_Init(2000,7199);   //200ms系统定时printf("这是串口调试助手\r\n");OLED_Init();                //OLED初始化OLED_Clear();IIC_GPIO_INIT();          //MAX30102中断引脚初始化MAX30102_GPIO();           //MAX30102接口引脚初始化Max30102_reset();          //MAX30102寄存器复位MAX30102_Config();           //MAX30102配置DS18B20_Init();             //DS18B20引脚初始化Gizwits_Init();               //机智云初始化for(i = 0;i < 128;i++) {while(MAX30102_INTPin_Read()==0){//读取FIFOmax30102_read_fifo();}}GUI_DrawFont16(0,0,"心率检测",0);GUI_DrawFont16(0,2,"血氧检测",0);GUI_DrawFont16(0,4,"血压检测",0);GUI_DrawFont16(0,6,"健康状态",0);OLED_ShowString(64,0,":",16);OLED_ShowString(64,2,":",16);OLED_ShowString(64,4,":",16);OLED_ShowString(64,6,":",16);GUI_DrawFont16(72,6,"正常",0);sprintf(buff,"%3d/Min",0);OLED_ShowString(72,0,buff,16);sprintf(buff,"%3d%%",0);OLED_ShowString(72,2,buff,16);sprintf(buff,"%3dmmHg",0000);OLED_ShowString(72,4,buff,16);// STMFLASH_Write(FLASH_SAVE_ADDR+50,&heart_up,2);
//  STMFLASH_Write(FLASH_SAVE_ADDR+12,&heart_dw,2);
//  STMFLASH_Write(FLASH_SAVE_ADDR+14,&A_preup,2);
//  STMFLASH_Write(FLASH_SAVE_ADDR+16,&A_predw,2);
//  STMFLASH_Write(FLASH_SAVE_ADDR+18,&A_hpo2,2);//读取阈值数据STMFLASH_Read(FLASH_SAVE_ADDR+50,&heart_up,2);STMFLASH_Read(FLASH_SAVE_ADDR+12,&heart_dw,2);STMFLASH_Read(FLASH_SAVE_ADDR+14,&A_preup,2);STMFLASH_Read(FLASH_SAVE_ADDR+16,&A_predw,2);STMFLASH_Read(FLASH_SAVE_ADDR+18,&A_hpo2,2);while(1){  Key_Value = KEY_Scan(0);//按键键值获取//强制心率值120控制if(Key_Value == 3){heart_beep++;if(heart_beep>=2) heart_beep = 0;if(heart_beep == 0){device_state = 0;beep_flag = 0;heart = 0;}}//心率算法检测if(heart_beep == 0){blood_Loop();if(MAX30102_flag == 1 && g_blooddata.heart != 46){MAX30102_flag = 0;LED0 = 0;BEEP = 1;device_state = 1;heart = AD_CH_LV1(10,g_blooddata.heart);hpo2  = AD_CH_LV2(10,(u8)g_blooddata.SpO2);//AD_CH_LV2(10,(u8)g_blooddata.SpO2);//(u8)g_blooddata.SpO2;delay_ms(100);LED0   = 1;BEEP   = 0;}else{   }if(g_blooddata.heart == 46)  {heart  = 0;hpo2   = 0;heart_start=0;device_state = 0;}}else{heart = 120;hpo2   = 0;device_state = 1;}//系统数据显示display0(72,0,heart);display1(72,2,hpo2);display_pre(72,4,pre);display_heart_start(72, 6, beep_flag);//系统蜂鸣器报警控制if((device_state == 1 && ((heart < heart_dw || heart > heart_up || hpo2 < A_hpo2))) || ((pre > A_preup) || (pre < A_predw))){beep_flag = 1;}else{BEEP = 0;//LED0 = 1;beep_flag = 0;}//机智云数据上传userHandle();gizwitsHandle((dataPoint_t *)&currentDataPoint);//协议处理WIFI_Contection(Key_Value);count++;//系统阈值控制SYS_Set(Key_Value);                                                                      }
}void display0(u8 x,u8 y,u16 value)
{static u8 last_value;if(last_value != value){sprintf(buff,"%3d/Min",value);OLED_ShowString(x,y,buff,16);last_value = value;}
}void display1(u8 x,u8 y,u16 value)
{static u8 last_value;if(last_value != value){sprintf(buff,"%3d%%",value);OLED_ShowString(x,y,buff,16);last_value = value;}
}void display_pre(u8 x,u8 y,u16 value)
{static u8 last_value;if(last_value != value){sprintf(buff,"%3dmmHg",value);OLED_ShowString(x,y,buff,16);last_value = value;}
}void display_start(u8 x,u8 y,u8 start)
{static u8 last_value;if(last_value != start){if(start == 0) OLED_ShowString(x,y,"NO",16);if(start == 1) OLED_ShowString(x,y,"OK",16);last_value = start;}
}void display_heart_start(u8 x,u8 y,u8 start)
{static u8 last_value;if(last_value != start){if(start == 0) GUI_DrawFont16(x,y,"正常  ",0);if(start == 1) GUI_DrawFont16(x,y,"异常  ",0);last_value = start;}
}##lua代码
见资料包

5、部分参考资料

#下载固件是nodemcu-master-9-modules-2016-03-14-02-11-21-integer.bin
#lua编程入门
#esp8266固件及lua烧录过程入门

6、注意事项

#esp8266使用lua编程时要提前烧录支持lua的固件
#固件可以自己去官网根据需求定制生成,也可以使用现成的
#固件烧录的不同,lua也要对应的变化
#integer 不支持 float,但节省了 11 KB
固件含如下模块: cjson, file, gpio, net, node, pwm, tmr, uart, wifi.
#esp8266有至少两个固件下载的工具,其中一个有的版本不支持

完整可运行项目地址

技能梳理8@esp8266+lua+onenet+血氧检测MAX30102相关推荐

  1. redisson 主从模式Unsupported protocol version 50_华米Amazfit Pop智能手表发布:支持50米防水,血氧检测 - 数码 - IT商业网...

    今日华米科技发布了全新 " 国民健康手表 "Amazfit Pop,提供旗舰健康功能. IT之家了解到,Amazfit Pop 搭载一块 英寸高清彩色显示屏,在健康方面支持血氧饱和 ...

  2. 基于单片机心率脉搏心率血压体温血氧检测系统的设计与实现

    功能介绍 本次设计通过32系列单片机STM32进行数据处理,配置引脚和JFC103传感器以及温度传感器进行数据通信.采用防水DS18B20进行腋下温度采集,通过单总线方式进行数据传输.心率血氧血压模块 ...

  3. 用ESP32+max30102制作血氧检测

    材料 ESP WROOM 32位开发板 MAX30102 心率血氧传感器 0.96寸 4P OLED显示屏 因为MAX30102和 OLED显示屏都是通过I2C跟ESP开发板链接,所以需要自定义一对接 ...

  4. 华为watchgt2更新鸿蒙,华为 WATCH GT 2 Pro 发布:陶瓷背壳、支持血氧检测、新的鸿蒙应用等...

    在今日下午的华为 Mate40 系列发布会上,华为 WATCH GT 2 Pro 手表等产品也一同亮相. 据官方表示,该手表有运动版和时尚版两种款式可选,包括 Watch GT 2 Pro.Watch ...

  5. 实时监测心率血氧,血压,微循环,脉搏波,健康检测模块方案

    JFH142体表健康检测模块是惊帆科技研发的多光谱生理数据测量模块,用于人体体表的健康检测模块,可准确测量脉搏波形.心率值.血氧值和血管微循环 参数等信息.得益于获专利保护的前端传感器技术,模块灵敏度 ...

  6. 【可穿戴算法开发】-基于PPG信号的血氧与血压检测模型

    文章目录 1.血氧检测方法 (1) 测量原理 0 检测原理 (2)标定试验 (3)基于线性回归的特征值R提取算法 (4)基于移动平均的特征值提取算法 2.血压监测方法 (1)原理 (2)计算公式 3. ...

  7. 技能梳理20@stm32+ESP8266+onenet+dht11+mq2+led+风扇+oled

    F103C8T6 ESP8266和ONENET通信 DHT11测温湿度 MQ-2测烟雾浓度 LED模拟室内灯 温湿度和烟雾超标,蜂鸣器报警,风扇转动:OLED显示数据:数据传输onenet,控制LED ...

  8. 技能梳理14@stm32+esp8266+ds18b20+红外传感器+烟雾传感器+CO传感器+蜂鸣器

    画板子,有至少8个io口(分别连ds18b20.红外传感器.烟雾传感器.CO传感器,后面3个传感器都是检测到就发高电平),2个串口,1个蜂鸣器,nbiot用的YED-C724 核心板(AIR724) ...

  9. STM32+Air202+Air530+HXDZ-30102-ACC心率血氧GPS采集上传到阿里云

    主要功能 HXDZ-30102-ACC采集心率血氧数据 STM32通过串口将数据转发到air202模块 air202将数据上传到阿里云平台进行展示与处理 整合合宙air530GPS模块,将定位数据上传 ...

  10. spo2数据集_Arduino 血氧心率模块传感器数据采集

    开发环境: Arduino-1.8.5-windows.exe.HXDZ-30102-ACC 硬件设备: MAX30102 MAX30102是一个集成的脉搏血氧仪和心率监测仪生物传感器的模块. 它集成 ...

最新文章

  1. DECLARE_DYNAMIC和IMPLEMENT_DYNAMIC宏
  2. [转载]WebForm下使用 jQuery.loadUserControl异步load用户控件
  3. 【正一专栏】欧冠四强猜想—不是冤家不聚首
  4. 新手入门深度学习 | 2-4:时间序列数据建模流程示例
  5. 网站优化记录-通过命令预编译Asp.net 网站,成功优化到毫秒级别。
  6. 大话设计模式—装饰模式
  7. Ajax的异步,是鸡肋还是鸡排?
  8. mysql如何分析sql执行效率和进行效率优化
  9. php 地址传递,PHP引用符传递存储地址
  10. Python中的super()简单用法
  11. ubuntu下cpu以最大频率运行、查看CPU主频几种方法
  12. php获得表单数值,php 表单数据的获取代码
  13. PRML_4章 线性模型分类笔记
  14. [转帖]一些不该被埋没的好歌【全版】【2】
  15. 一文了解无线网桥-小白笔记
  16. 【科普】苹果ARM版Mac发布会——大人,时代变了
  17. Android 10 拨打电话流程
  18. 从今起,我蹲马步,苦练基本功
  19. 关于心跳包的实现手法
  20. 烽火(FiberHome)WiFi短信认证设置流程

热门文章

  1. excel导入mysql教程视频_excel数据导入SQL数据库的教程
  2. 谷歌这是要全面退出中国!
  3. SDK接入学习(一):PlayerSetting详解(PC、Mac、Linux)
  4. 苹果Magic Trackpad2成功被谷歌团队写进去个Linux
  5. 如何录制Gif动态图片
  6. android设置adb环境变量,如何配置android的adb环境变量
  7. 使用Android Studio导入源码
  8. 天九共享全方位孵化增添活力 助力独角兽企业开辟更多新大陆
  9. 数据库sql语句练习题
  10. Python 代码库之Tuple如何append添加元素