本帖最后由 hujj 于 2020-1-23 13:45 编辑
有幸获得了SHT31温湿度传感器的评测机会,让我可以了解和使用盛思锐的传感器产品。这个评测板上有着不小的液晶显示屏,很适合做一个桌面上的小摆件,按照最初的评测计划,我还准备利用其蓝牙看能否扩展功能。
我的测试过程分两个部分:一是蓝牙及手机APP测试,另一部分就是扩展I2C通讯和尝试下载烧录程序。下图是收到的SHT31套件:
一、蓝牙及手机APP测试
收到评测套件后,我立即开始下载相关的技术资料和范例,但是在下载手机APP时却遇到困难,多次尝试下载官方的APP均以失败告终。
我尝试用手机上的蓝牙串口调试助手来连接套件,也许是蓝牙版本不同,虽然能识别到蓝牙设备,但却连接不成功,无法接收到套件发送的数据。
之后总算是从坛友分享中获得了手机APP,顺利地安装好并连接上了套件。
这个APP主要有四个界面,首先是数值显示界面,显示当前的温度、湿度、露点温度和体感温度等数值,每秒刷新一次:
第二个界面是图形显示,以相对湿度为纵坐标、温度为横坐标,图中显示一个绿色的四边形,其中四角分别提示为风湿、中暑、呼吸问题和脱水,而且四个角的坐标会有变化,但我至今还未弄明白其作用和含义:
第三个界面则是温、湿度的曲线图,可以分别显示10分钟、1小时、6小时、1天或1 周的温度或湿度数值。
第四个界面则是设置,每次连接蓝牙须在此点击蓝牙设备的地址,在此还可以对套件进行设置。
下面是显示套件设备参数的界面:
从测试的过程觉得这个手机APP的实用效果不大,首先是蓝牙需要手动连接,缺乏自动连接的选项,每次进入APP后还要寻找设备,然后再点击连接,才能接收到设备发出的数据,倘若中途手机离开套件造成蓝牙连接中断,还需要重新手动连接。其次每次连接只能获得即时数据,套件没有保存过往数据的功能。也就是说倘若想要取得连续24小时的数据,则手机必须在套件附近保持蓝牙连接畅通才行。如果套件能够每隔一定时间(比如说1分钟)记录一次数据,待套件与手机自动连通后自动将数据发送到手机APP中,这样可能实用效果会更好些。
二、扩展I2C通讯
在套件的背面有一些探针触点,包括nRF51822下载烧录的SWDCLK和SWDIO、串口通讯的RX和TX,以及与传感器通讯的I2C总线。
为了能够顺利的测试,我特地打样了测试用的扩展板,通过扩展板上的簧片来连接套件的探针触点。由于测量计算失误,第二次打样回来的扩展板才基本可用,下面是打样回来的扩展板。
为了能更充分发挥套件的功能,我在扩展板上还添加了锂电池及充放电管理模块,利用旧手机的锂电池,通过降压芯片来为套件供电,解决更换电池的麻烦。
扩展板上还留有电平转换CH340芯片的位置,焊上此芯片及外围电路后,可以通过Micro USB接口进行串口通讯。
在扩展板上对应套件触点的位置焊上弹簧片,以便可靠地与套件连接:
套件通过卡簧片安装在扩展板上,扩展板的排针可用杜邦线连接到单片机进行测试。
利用了一个笔筒来做套件的支架,用双面胶将套件粘在笔筒上。
测试实验用的是一块STM32L412开发板,通过杜邦线与扩展板连接,显示屏用的是LCD5110,暂时也用双面胶粘贴在笔筒上。原来还打算到附近广告制作店去找块合适的边角材料来做一个面板,不料人家已经过年放假了,所以只好暂时作罢。下面是临时粘接的小摆件:
套件连接问题解决之后,开始是考虑尝试下载烧录程序的,但KEIL的升级包一直没能下载到,再加上没有找到合适的J-LINK下载调试器,而我又没有接触过这类芯片,为了防止套件变砖,所以暂时没有进行这项测试,而是准备通过I2C总线直接截取数据,这样做更安全可靠些。
由于是截取正常通讯的I2C数据,不属于主从的任何一种通讯方式,只有自己写代码来截取数据,这个截取与从方式读I2C类似,只是不发送地址及应答信息,纯粹读取数据。
从逻辑分析仪获取的时序图得知ACK的信号约占3微秒,两个字节之间的空隙约5微秒,开始写的代码就直接忽略这些信息,可谁知读取的数据却不正确,最后添加了辨别ACK的代码才成功的读取到了I2C通讯的数据。
通过查看数据手册和观察时序图,SHT31在接收到读数据的地址信号后,连续发送6个字节的温、湿度数据,分别是16位的数据和8位的CRC校验,如下图:
获得这个16位的温、湿度数据后,按照数据手册提供的计算公式转换成实际的温、湿度数据。为了简化代码,在我的测试中没有考虑零下温度的计算和处理。最后测试的结果是成功地截取到了I2C通讯的数据,对套件没有丝毫影响。
至此,本次评测活动告一段落,年后再考虑购置J-LINK来尝试下载烧录程序,或者用蓝牙模块来看能否建立起单片机与套件的连接,这样单片机与套件之间就可以不用杜邦线来连接,两者之间也可以拉开一定的距离。