使用STWI101WT-01串口屏的微信小程序血氧项目

这篇具有很好参考价值的文章主要介绍了使用STWI101WT-01串口屏的微信小程序血氧项目。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本项目是中医展示馆展示血氧饱和度、心率测试体验,通过生物传感器获得体验者的血氧饱和度、心率值,ESP32模块将数据通过蓝牙发送给微信小程序显示,或者通过串口发送给STONE串口屏STWI101WT-01显示。

STONE串口屏的二维码部件

特别地,STONE串口屏新升级版本有二维码qr_code部件,非常方便通过二维码扫码来展示信息。官方提供的Command Set.pdf文档中也提供了专门的命令来写入二维码部件的text值。如图(1)。

使用STWI101WT-01串口屏的微信小程序血氧项目

图(1)二维码部件text写入命令 

2. For example:

Set QR code text content:

ST<{"cmd_code":"set_text","type":"qr","widget":"qr1","text":"http://www.stoneitech.com"}>ET

在新版的stone-designer界面开发工具中,二维码部件的属性见图(2),其中text可设置初值,也可通过上面指令随时修改,二维码部件的宽高尺寸设计时很方便修改。

使用STWI101WT-01串口屏的微信小程序血氧项目

图(2)二维码部件的属性值 

生物传感器

MAX30102生物传感器模块如图(3),可以通过板上的串口TX、RX直接读取心率、血氧饱和度,其中集成了一个红光LED和一个红外光LED、光电检测器、光器件,以及带环境光抑制的低噪声电子电路。模块供电5V,心率测量范围:20-200次/min, 血氧饱和度测量范围:50%-100%,串口输出,波特率9600。AT指令如下:

AT+HEART\r\n  读取心率值,返回:+HEART=心率值OK

AT+SPO2\r\n   读取血氧饱和度值  返回:+SPO2=血氧值OK

AT+RESET\r\n   模块复位

使用STWI101WT-01串口屏的微信小程序血氧项目

图(3)MAX30102生物传感器模块 

MAX30102生物传感器模块可以通过电脑串口助手先行调试,确认ok再使用。板串口与电脑USB通讯,可以用STONE提供的转接板V1.2将电脑USB信号转换成串口信号,见附录图(101),MAX30102板上的TX接V1.2转接板的RX(注意不是Rout),MAX30102板上的RX接V1.2转接板TX,V1.2转接板上两个短接线都拿掉。串口助手发送AT指令时,记得末尾加上回车(\r)、换行 (\n),特别注意,串口助手波特率设置9600,如果需要自动重发,间隔时间可调整为500ms。模块就绪后,传感器红色LED亮起,表示可以开始测试了,测试时请将食指贴在传感器玻壳表面。发送AT指令,读取HEART或SPO2的值,直到稳定为止。

一切顺利,就可以开始下一步联调了!

NODEMCU-32模块

图(4)NODEMCU-32模块不仅带有wifi、蓝牙BLE功能,从图(5)可见P34、P35针脚还引出了串口U0TXD、U0RXD,从图(6)可见P16、P17针脚引出了串口U1RXD、U1TXD。特别适合本项目串口0连MAX30102生物传感器模块、串口1连接STONE串口显示屏,蓝牙连接手机微信小程序。

使用STWI101WT-01串口屏的微信小程序血氧项目

图(4)NODEMCU-32模块 

使用STWI101WT-01串口屏的微信小程序血氧项目

图(5)NODEMCU-32模块串口0 

使用STWI101WT-01串口屏的微信小程序血氧项目

图(6)NODEMCU-32模块串口1 

前面我们已经通过电脑串口助手调试MAX30102生物传感器模块成功,现在有信心进一步联调与NODEMCU-32的通讯了,按照规划如图(7)连线,MAX30102供电是5V,正好NODEMCU-32有5V引脚出来可以直接提供,于是连接变得特别简单:

MAX30102生物传感器模块      NODEMCU-32模块

TX                                    RX(34脚)

RX                                    TX(35脚)

GND                                 GND(38脚)

5V                                    5V(19脚)

使用STWI101WT-01串口屏的微信小程序血氧项目

图(7)NODEMCU-32模块串口0连接生物传感器模块 

硬件连接好以后,我们先可以连接蓝牙,通过手机微信小程序实现:经过NODEMCU-32模块对MAX30102生物传感器模块心率(HEART)、血氧饱和度(SPO2)数值的读取与显示。在arduino1.18.3平台上,配置NODEMCU-32模块蓝牙并与MAX30102生物传感器模块串口通讯的代码如下:

/*

    Video: https://www.youtube.com/watch?v=oCMOYS71NIU

    Based on Neil Kolban example for IDF: https://github.com/nkolban/esp32-snippets/blob/master/cpp_utils/tests/BLE%20Tests/SampleNotify.cpp

    Ported to Arduino ESP32 by Evandro Copercini

   Create a BLE server that, once we receive a connection, will send periodic notifications.

   The service advertises itself as: 6E400001-B5A3-F393-E0A9-E50E24DCCA9E

   Has a characteristic of: 6E400002-B5A3-F393-E0A9-E50E24DCCA9E - used for receiving data with "WRITE"

   Has a characteristic of: 6E400003-B5A3-F393-E0A9-E50E24DCCA9E - used to send data with  "NOTIFY"

   The design of creating the BLE server is:

   1. Create a BLE Server

   2. Create a BLE Service

   3. Create a BLE Characteristic on the Service

   4. Create a BLE Descriptor on the characteristic

   5. Start the service.

   6. Start advertising.

   In this example rxValue is the data received (only accessible inside that function).

   And txValue is the data to be sent, in this example just a byte incremented every second.

*/

#include <BLEDevice.h>

#include <BLEServer.h>

#include <BLEUtils.h>

#include <BLE2902.h>

BLEServer *pServer = NULL;

BLECharacteristic * pTxCharacteristic;

bool deviceConnected = false;

bool oldDeviceConnected = false;

uint8_t txValue = 0;              // 从蓝牙发送的 16进制 如:0x7B

// See the following for generating UUIDs:

// https://www.uuidgenerator.net/

#define SERVICE_UUID           "6E400001-B5A3-F393-E0A9-E50E24DCCA9E" // UART service UUID

#define CHARACTERISTIC_UUID_RX "6E400002-B5A3-F393-E0A9-E50E24DCCA9E"

#define CHARACTERISTIC_UUID_TX "6E400003-B5A3-F393-E0A9-E50E24DCCA9E"

class MyServerCallbacks: public BLEServerCallbacks {

    void onConnect(BLEServer* pServer) {

      deviceConnected = true;

    };

    void onDisconnect(BLEServer* pServer) {

      deviceConnected = false;

    }

};

class MyCallbacks: public BLECharacteristicCallbacks {

    void onWrite(BLECharacteristic *pCharacteristic) {

      std::string rxValue = pCharacteristic->getValue();

      if (rxValue.length() > 0) {

          for (int i = 0; i < rxValue.length(); i++)

          Serial.print(rxValue[i]);          // 从蓝牙接收的AT指令传递给MAX30102生物传感器模块

         Serial.println();   //添加回车和换行      

      }

    }

};

void setup() {

  Serial.begin(9600);    // SPO2 board UART is 9600!

  // Create the BLE Device

  BLEDevice::init("中医馆血氧板");          // 蓝牙设备的 name 别超过6个汉字,不合格名称会用ESP32代替。

  // Create the BLE Server 服务器

  pServer = BLEDevice::createServer();

  pServer->setCallbacks(new MyServerCallbacks());

  // Create the BLE Service 服务

  BLEService *pService = pServer->createService(SERVICE_UUID);

  // Create a BLE Characteristic  特征

  pTxCharacteristic = pService->createCharacteristic(

                                                          CHARACTERISTIC_UUID_TX,

                                                           BLECharacteristic::PROPERTY_NOTIFY

                                                     );

                     

  pTxCharacteristic->addDescriptor(new BLE2902());

  BLECharacteristic * pRxCharacteristic = pService->createCharacteristic(

                                                                 CHARACTERISTIC_UUID_RX,

                                                                BLECharacteristic::PROPERTY_WRITE

                                                          );

  pRxCharacteristic->setCallbacks(new MyCallbacks());

  // Start the service

  pService->start();

  // Start advertising

  pServer->getAdvertising()->start();

  Serial.println("Waiting a client connection to notify...");  // 等一个客户端连接的通知...

}

void loop() {

             // 读取串口发送的信息,并发给BLE、简单解码: 

   if (Serial.available() > 0)

   {

      if (deviceConnected) {

           txValue = Serial.read();    // uint8_t txValue = 0;   从蓝牙发送的 16进制 如:0x7B

           pTxCharacteristic->setValue(&txValue, 1);

           pTxCharacteristic->notify();

           delay(10); // bluetooth stack will go into congestion, if too many packets are sent 

          }

    } 

    // disconnecting

    if (!deviceConnected && oldDeviceConnected) {

        delay(500); // give the bluetooth stack the chance to get things ready

        pServer->startAdvertising(); // restart advertising

        Serial.println("start advertising");     // 断开蓝牙连接时,开始广播

        oldDeviceConnected = deviceConnected;

    }

    // connecting

    if (deviceConnected && !oldDeviceConnected) {

            // do stuff here on connecting

        oldDeviceConnected = deviceConnected;

    }

}

NODEMCU-32模块的蓝牙布置妥当,就可以开始微信小程序联调了!

微信小程序

蓝牙测试的小程序界面见图(8),上面是“开始扫描”按钮,找到“中医馆血氧板”真是上面NODEMCU-32模块配置的蓝牙名称,点击后即显示蓝灰色的“已连接到中医馆血氧板”,紧跟着下面出现的按钮分别是“写数据”、“断开连接”、“测心率”、“测血氧”、“血氧复位”、“测‘血氧+心率’”,点击后在“串口收到的数据all”下方可以看到返回的心率和血氧饱和度值。

使用STWI101WT-01串口屏的微信小程序血氧项目

图(8)小程序界面 

STONE串口屏界面

有5个界面,基于10.1寸的STONE串口触摸屏STWI101WT-01,分辨率1024*600,分别是:page0、page1、page2、page3、随机密码弹窗。其中page0中是3种显示方式的选择界面,,见图(9)。愿意公开显示的就直接选择page1,直接显示,见图(10)。需要隐私个人健康数据的,可选择page2、page3;page2通过蓝牙传输,读取检测值在个人手机上显示,见图(11)。page3通过随机密码在NODEMCU-32中编码、在手机微信小程序中输入随机密码来解码显示,见图(12)。随机密码随机产生,每次不同,见图(13)。

Page1中SPO2测量值对应部件:label11,HEART测量值对应部件:label12,开始测试按钮对应部件:button12,测试结果对应部件:label13. 显示指令在Arduino平台指令写法如下:

Serial1.println("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"label13\",\"visible\":true}>ET"); 

串口1显示屏上SPO2=88指令写法如下:

Serial1.println("ST<{\"cmd_code\":\"set_value\",\"type\":\"label\",\"widget\":\"label11\",\"value\":88,\"format\":\"%d\"}>ET");      //+SPO2=88

Page2中开始测试按钮对应部件:button22.测试结束时,部件label21会亮起。

Page3中开始测试按钮对应部件:button32. 测试结束时部件label31会亮起,同时二维码部件qr1会显示加密数据的二维码。随机密码按钮:button33,按下会展示弹窗,以便得到本次测试的随机密码,见图(13)。

使用STWI101WT-01串口屏的微信小程序血氧项目

图(9)STONE串口屏主界面page0 

使用STWI101WT-01串口屏的微信小程序血氧项目

图(10)STONE串口屏界面page1 

界面Page1读取数据显示时,血氧饱和度通常能首先显示,心率往往会延时几秒才能稳定下来,请耐心等待......

图(11)STONE串口屏界面page2 

图(12)STONE串口屏界面page3 

在界面page3中,使用了图(1)的二维码set_text指令,将随机密码和测试数据混合,生成加密的数据通过二维码展示,微信小程序端再通过输入相同的随机密码来解码显示正确的测量值。

以下指令给空字符qr code部件,可以让二维码位置显示空白。

Serial1.println("ST<{\"cmd_code\":\"set_text\",\"type\":\"qr\",\"widget\":\"qr1\",\"text\":\"\"}>ET");

使用STWI101WT-01串口屏的微信小程序血氧项目

图(13)STONE串口屏随机密码弹窗 

随机密码弹窗部件label42会随机显示4位密码,每次不同。在微信小程序中记录密码后,点击按钮“ok” (部件名:button7),关闭弹窗。

随机密码编码解码示例:

1、设定编码方式为,实际SPO2=98,加“8695”的前两位86,得184,实测HEART=71,加“8695”的后两位95,得166. 通过以下指令写入二维码部件中;

Serial1.println("ST<{\"cmd_code\":\"set_text\",\"type\":\"qr\",\"widget\":\"qr1\",\"text\":\"+SPO2=184OK+HEART=166OK\"}>ET");

2、微信小程序扫码后,按上面逆算法还原SPO2=98、HEART=71,即可。

3、 限定随机密码范围如下指令:

Long  passNumber;

passNumber = random(1111,9999);    

   Serial1.print("ST<{\"cmd_code\":\"set_value\",\"type\":\"label\",\"widget\":\"label42\",\"value\":");

   Serial1.print(passNumber);

   Serial1.println(",\"format\":\"%d\"}>ET");     

注意:label42的重新赋值操作需要在dialog部件弹出显示期间才有校,所以应该先弹出对话框,再刷新数值。

系统连接图

如图(14):

STONE串口屏-------NODEMCU-32模块的串口1,波特率115200

       MAX30102模块-------NODEMCU-32模块的串口0,波特率9600

手机小程序蓝牙-------NODEMCU-32模块的BLE

参见附录图(101)和图(5)、图(6):

MAX30102生物传感器模块      NODEMCU-32模块

TX                                    RX0(34脚)

RX                                    TX0(35脚)

GND                                 GND(38脚)

5V                                    5V(19脚)

STONE转接板V1.2      NODEMCU-32模块

TX                                    TX1(17脚)

Rout                                 RX1(16脚)

GND                                 GND(14脚)

另外,图(101)Tout短接线需要接上。

图(14)系统连接总图 

总结:

本项目可实现无线通讯、多屏互动(STONE串口屏和手机显示之间可以通过ESP32模块实现交互),NODEMCU-32模块同时连接MAX30102生物传感器模块、手机微信小程序、STONE串口屏,充电三者之间桥梁。STONE串口屏也通过刷新二维码的方法,实现与手机之间的影像信息传递(不用蓝牙、用手机的相机)。本次代码重点是Arduino和微信小程序之间蓝牙的配置、搜索、连接、传输,所附代码都是经过测试验证的,可直接引用。以前对串口按钮信息解码有过多个项目,本次就不再重复了。

附录:

使用STWI101WT-01串口屏的微信小程序血氧项目

图(101)STONE串口屏转接板V1.2电路图草绘 文章来源地址https://www.toymoban.com/news/detail-485818.html

到了这里,关于使用STWI101WT-01串口屏的微信小程序血氧项目的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 案例101:基于微信小程序的停车共享小程序

    文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序运行软件:微信开发者 目录 前言 系统展示 用户功能模块的实现 用户注册登录界面 首页界面 停车场界面

    2024年02月04日
    浏览(69)
  • 在线选课的微信小程序(微信前端+网站后端)

    目录 一、前言 二、微信小程序端(老师、学生) 1.学生用户前端小程序界面  2.老师前端小程序界面 三、后端(管理员、老师、学生) 3.老师后端 4.管理员后端 四、代码获取与调试 这是一个在线选课的微信小程序,使用了 idea + Navicat + maven + vue + 微信开发者工具 。 1.学生用

    2024年02月11日
    浏览(46)
  • 如何建立自己的微信小程序,做一个微信小程序大概多少钱?

    如今,小程序的功能越来越强大,也越来越受欢迎,它不仅能帮助企业和商家做推广,还能给他们带来很多好处。所以,很多企业都开始建立自己的小程序。但是对于如何建立自己的微信小程序,以及做一个微信小程序大概多少钱,很多人并不是很清楚。下面我们就来了解一

    2024年02月11日
    浏览(42)
  • 生成普通的微信小程序二维码

    1.登录微信小程序后台传送门 开发管理-开发设置-扫普通链接二维码打开小程序   在这里开通此功能,然后按微信定义的规则配置具体的地址,等正式上线的时候再发布该规则  2.然后按照配置的 二维码规则 (上图第三项) 去直接生成普通的二维码(可自行携带参数),然后微信扫一

    2024年02月14日
    浏览(54)
  • 制作自己的微信小程序要怎么做?

    现在不少人都想要制作自己的微信小程序,不管是企业还是商家都在咨询相关的问题。那么制作自己的微信小程序要怎么做?流程和费用分别又是怎么样的呢?下面个大家一起来看看。 步骤一:要有自己的小程序账号 首先我们需要有自己的小程序账号,这一步没有涉及任何

    2024年02月06日
    浏览(50)
  • 如何快速搭建母婴行业的微信小程序?

    如果你想为你的母婴行业打造一个独特的小程序,但没有任何编程经验,别担心!现在有许多小程序制作平台提供了简单易用的工具,让你可以轻松地建立自己的小程序。接下来,我将为你详细介绍搭建母婴行业小程序的步骤。 首先,登录乔拓云制作平台,进入后台。在后台

    2024年02月09日
    浏览(44)
  • uniapp开发的微信小程序如何上传至微信小程序平台-完整简单步骤

    这个id请登录微信小程序号   设置中查看 成功上传。 message:Error: 系统错误,错误码:80051,source size 3743KB exceed max limit 2MB  如果这样报错可以尝试分包或者减至2M以内。 分包方法参考此博文 uniapp如何分包 分包配置后无法读取static文件夹_谨言不言的博客-CSDN博客_uniapp 分包

    2024年02月16日
    浏览(68)
  • 基于若依框架的微信小程序登录

    一、用户表结构 二、用户实体类 三、登录时用到的SQL语句 四、微信用户登录验证 五、创建token令牌 六、登录接口涉及方法

    2024年02月11日
    浏览(36)
  • 整理5个优秀的微信小程序开源项目

    ​ GitHub:  https://github.com/woniudiancang/bee Bee是一个餐饮点餐商城微信小程序,是针对餐饮行业推出的一套完整的餐饮解决方案,实现了用户在线点餐下单、外卖、叫号排队、支付、配送等功能,完美的使餐饮行业更高效便捷! GitHub:  https://github.com/lsqy/taro-music taro-music是基于t

    2024年02月06日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包