一、目的
这一节我们来学习如何使用合宙ESP32 C3,连接LU90614人体红外测温模块,连接128x64点阵屏模块SPI接口液晶屏,进行温度显示实验。
二、环境
ESP32 C3开发板(MicroPython v1.19.1 on 2022-06-18)+LU90614人体红外测温模块 + 128x64点阵屏模块SPI接口液晶屏 + 几根杜邦线 + Win10商业版
ESP32 C3和各模块接线方法:
三、示例
example.py
from machine import Pin,SPI,PWM,UART
from st7567 import ST7567
from ufount1 import BMFont
import time
'''
1,体温模式发送指令:0XFA 0XC5 0XBF;2, 物温模式发送指令:0XFA 0XC6 0XC0;3,开始测温并上传温度指令 0XFA 0XCA 0XC4;
串口国际96081模式
'''
# 创建UART串口对象
uart = UART(1,baudrate = 9600,tx = 0, rx =1)
# 导入字库文件
font = BMFont("fonts/unifont-14-12888-16.v3.bmf")
# 创建SPI对象
spi = SPI(1,baudrate = 40_000_000,sck = Pin(2),mosi = Pin(3),miso = None)
# 定义屏幕背光参数
blk = PWM(Pin(8),duty = (0),freq = (1000))
# 创建LCD屏幕对象。# invX内容反转,0x00或0x01 # invY显示反转,True或False
lcd = ST7567(spi,dc = Pin(10,Pin.OUT),cs = Pin(7,Pin.OUT),rst = Pin(6,Pin.OUT),invX=0x00,invY=True,invdisp=0x00)
# 定义LED灯
led = Pin(12,Pin.OUT)
# 指令
Tiwen = bytearray(b'\xfa\xc5\xbf\r') #体温指令
Wuwen = bytearray(b'\xfa\xc6\xc0\r') #物温指令
Celian = bytearray(b'\xfa\xca\xc4\r') #开始测量
Data = bytearray(9) #数据缓存区
# 温度模块函数
def LU90614(mode):
if mode:
uart.write(Tiwen) # 串口写入指定命令
else:
uart.write(Wuwen)
# 写入串口数据
uart.write(Celian)
# 读取串口数据
Data = uart.read()
# 屏蔽空值
if Data != None:
if Data[1] == 0XAC:
# 在屏幕上显示体温
font.text(lcd,"体温:",0,32,color=1,font_size=16,reverse=False,clear=False,show=True,half_char=True,auto_wrap=True)
#print("体温:")
elif Data[1] == 0XAA:
# 在屏幕上显示物温
font.text(lcd,"物温:",0,32,color=1,font_size=16,reverse=False,clear=False,show=True,half_char=True,auto_wrap=True)
# print("物温:")
# 屏蔽不该显示的大额数值
if Data[2] and Data[3] != 255:
# 在屏幕上显示数值和温度符号
font.text(lcd,"%d.%d℃"%(Data[2],Data[3]),48,32,color=1,font_size=16,reverse=False,clear=False,show=True,half_char=True,auto_wrap=True)
#print("%d.%d℃"%(Data[2],Data[3]))
else:
font.text(lcd,"wait" + str(' '),48,32,color=1,font_size=16,reverse=False,clear=False,show=True,half_char=True,auto_wrap=True)
# 获取体温数值
data = Data[2]
# 温度控制。
if data > 35 and data < 39:
led.value(1)
else:
led.value(0)
def main():
# 设置屏幕背光
num = 100
blk.duty(int(num/1000*1023))
# 显示中文
font.text(lcd,"红外温度测量",16,0,color=1,font_size=16,reverse=False,clear=False,show=True,half_char=True,auto_wrap=True)
lcd.hline(0,20,128,1)
lcd.show()
#True 人体温度采集,Fales 物体温度采集
while True:
LU90614(True)
if __name__ == "__main__":
main()
示例效果:
四、字库和屏幕驱动资料
请从上篇文章获取:
宝贝详情图片
模块资料下载:
链接:https://pan.baidu.com/s/16x-VwBJSzuN5834DsYEYWw?pwd=1234 提取码:1234
或者
链接: https://pan.baidu.com/s/1KocWep8YX3hpXb-Omdqs9Q 提取码: m56g
LU90614串口协议及接线定义:
一、 LU90614 模块接口定义
VCC : 3.3-5.5V 直流电源正极;
T ( TXD ) : 接 TTL 板或目标 MCU 的 TXD 端;
R ( RXD ): 接 TTL 板或目标 MCU 的 RXD 端;
GND : 电源负极 ( T 、 R 为通信口, 电平 3.3V 、 5V 兼容。)
二、 LU90614 通信协议
1. 波特率 9600 , 数据位 8 , 停止位 1 , 无奇偶校验;
2. 设置的参数可掉电保存;
3. 体温模式发送指令: 0XFA 0XC5 0XBF ;
4. 物温模式发送指令: 0XFA 0XC6 0XC0 ;
5. 开始测温并上传温度指令 0XFA 0XCA 0XC4 ;
6. 温度值回传指令:
一包数据: 包头 + 指令 +DataH+DataL+ 保留位 1+ 保留位 2+ 保留位 3+ 保留位 4+ 校验位
包头: 0XFE , 为固定包头;
指令: 0XAA , 此时为物温模式, DataH 为物温整数位, DataL 为小数位, 单位摄氏度; 0XAC , 此时为体温模式, DataH 为体温整数位, DataL 为小数位, 单位摄氏度。
校验位 = 包头 + 包头 + 指令 +DataH+DataL+ 保留位 1+ 保留位 2+ 保留位 3+ 保留位 4 , 溢出时只保 留低 8 位。
7. 举例 1 (测量当前物温):
发送: 0XFA 0XC6 0XC0 (如果当前为体温测量模式可不发) 0XFA 0XCA 0XC4
回传: 0XFE 0XAA 0X28 0X1E 0X00 0X00 0X00 0X00 0XEE
回传数据解析: 当前物温 40.3 摄氏度。
举例 2 (测量当前体温):
发送: 0XFA 0XC5 0XBF ( 如果当前为体温测量模式可不发) 0XFA 0XCA 0XC4
回传: 0XFE 0XAC 0X28 0X1E 0X00 0X00 0X00 0X00 0XF0
回传数据解析: 当前体温 40.3 摄氏度。