【M5Stack物联网开发】第七章 使用传感器(一)
1. 串口通讯
串口通讯(Serial Communication)是计算机和其他电子设备之间的一种数据传输方式,历史悠久且应用广泛。它的发展过程可以分为几个主要阶段:
1.1 初期发展
20世纪初至1960年代
- 早期的串口通讯主要用于电信和无线电设备。
- 最初的串行通讯协议主要集中在电报和无线电波传输,采用莫尔斯电码和调幅(AM)。
1.2 标准化和普及
1960年代至1980年代
- RS-232标准:1960年代发布,定义了一套标准的串行通讯接口。RS-232成为计算机和外部设备(如调制解调器)之间数据传输的主要标准。
- UART(Universal Asynchronous Receiver/Transmitter):负责处理串行数据的接收和发送,包括起始位、数据位、校验位和停止位。
- TTL串口:用于短距离通讯和嵌入式系统。采用5V或3.3V电平,相对RS-232更简单。
1.3 高速发展
1980年代至1990年代
- 串口通讯速度和可靠性逐渐提高,从最初的几百bps(比特每秒)提升到几Mbps。
- 随着个人计算机的普及,串行端口(COM端口)成为计算机的重要接口,广泛用于外设连接,如鼠标、键盘、打印机等。
1.4. 多样化与扩展
2000年至今
- USB(Universal Serial Bus):极大地扩展了串行通讯的应用范围,提供更高的数据传输速率和即插即用的特性,大大简化了设备连接。
- SPI(Serial Peripheral Interface)和I²C(Inter-Integrated Circuit):成为嵌入式系统和微控制器中常用的串行通讯协议,用于芯片间通讯。
- CAN(Controller Area Network):主要应用于汽车和工业自动化领域,提供高可靠性和实时性。
- UART继续应用:虽然有了更多复杂的协议,但UART依然广泛应用于嵌入式系统、调试接口等场景。
1.5 现代化发展趋势
- 物联网(IoT):串行通信成为物联网设备的重要数据传输方式,特别适用于低功耗和高可靠性要求的场景。
- 无线串行通讯:蓝牙、Wi-Fi等无线技术的发展,拓展了串行通讯的应用范围,实现了更灵活的设备互联。
- 高速串行通讯:如USB 3.x及后续版本、Thunderbolt等,提供极高的数据传输速率,支持更复杂和高带宽的应用场景。
2. UART
UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)的发展历史与串行通信的发展密切相关。UART作为一种硬件模块和通信协议,广泛应用于计算机、嵌入式系统和通信设备中,用于实现异步串行数据传输。以下是UART的发展过程:
2.1 常见特性
在讨论详细发展历史之前,有必要了解一下UART的基本特性:
- 异步通信:不需要钟信号对数据进行同步,发送和接收双方使用约定的波特率(Baud Rate)进行通信。
- 数据格式:通常包括起始位、数据位(5-9位)、校验位和停止位。
2.2 起步阶段
20世纪初至1960年代
- 串行通信早期发展主要集中在电报和无线电波传输上,但这些系统通常是定制化的,缺乏标准化的硬件模块。
- 串行端口开始作为远程通信设备的一部分,使用简单的硬件逻辑实现字符传输。
2.3 标准化与应用
1960年代至1980年代
- UART的产生:随着串行通信的普及,UART应运而生。UART模块负责处理串行数据的格式化,包括添加起始位、停止位和校验位,以及在接收端剥离这些位。较早的UART是使用TTL(Transistor-Transistor Logic)电平,设计简单、成本低。
- RS-232标准推出:1960年代末,RS-232标准发布,定义了UART硬件的电气特性和协议,使串行通信更加规范化。
3. GPIO
GPIO(General Purpose Input/Output,通用输入输出)是一种广泛应用于嵌入式系统和计算机中的接口,用于与外部设备进行基本数字信号交换。GPIO的发展过程代表了嵌入式系统接口技术的进步,从最初的简单开关控制到现代复杂的多功能引脚,GPIO已经成为电子设备设计中不可或缺的一部分。以下是GPIO的发展过程的详细介绍:
3.1 起步阶段
20世纪70年代至80年代
- 早期微处理器和单片机:最早的微处理器和单片机(如Intel 8080和Zilog Z80)主要通过特定的I/O端口进行数据输入输出。虽然这些I/O端口能够进行简单的输入输出操作,但通常缺乏灵活性和通用性。
- 简单开关和指示灯控制:最早的GPIO运用主要集中在基础的开关和指示灯控制上,这些基本的数字输入输出功能可以用来直接控制设备状态。
3.2 GPIO的引入与标准化
20世纪80年代末至90年代
- 初始GPIO功能:随着微控制器(MCU)的发展,通用输入/输出引脚(GPIO)的概念开始被引入。早期的MCU(如8051、AVR)提供简单的数字电平输入输出功能,这些引脚可以配置为输入或输出状态。
- 引脚复用:GPIO引脚开始支持复用功能,一个引脚不仅可以作为GPIO使用,还可以配置为其他外设功能如UART、I²C、SPI等。这种设计极大地增强了引脚的通用性和灵活性。
3.3 扩展与多功能化
2000年至今
- 高性能MCU的出现:随着高性能微控制器的推出,GPIO引脚的功能不再局限于简单的输入输出。许多现代MCU(如ARM Cortex系列)支持高级GPIO配置功能,包括:
- 中断功能:GPIO引脚可以配置为触发中断,实现对外部事件的快速响应。
- 上拉和下拉电阻:集成上拉和下拉电阻选择,提高了接口的电平控制能力。
- 模拟输入/输出:一些GPIO引脚可以配置为模拟输入(ADC)或模拟输出(DAC),增强了MCU与外部模拟设备的接口能力。
- 可编程逻辑:一些现代MCU支持可编程逻辑单元(PLU),这项功能允许用户在芯片内部自定义逻辑功能,进一步提高了GPIO的灵活性。
4. I2C
I²C(Inter-Integrated Circuit)是一种用于短距离内部通信的多主多从、半双工、同步、串行通信总线标准,由飞利浦公司(现NXP半导体)于1982年发明。它用于将集成电路(IC)连接在一起,特别是在嵌入式系统、传感器、芯片之间的低带宽通信中。以下是I²C的发展过程的详细介绍:
4.1 早期发展阶段
20世纪80年代
- 标准的提出:I²C协议由飞利浦公司在1982年提出,旨在为芯片之间提供一种简化的通信方式,最初设计用于电视接收器中的音频和视频信号处理。
- 基本特性:
- 两线设计:I²C使用两根信号线(SCL - 时钟线和SDA - 数据线)实现通信,通过减少引脚数量,降低了硬件复杂性和成本。
- 地址:每个设备都有唯一的7位地址(后期扩展为10位地址),实现多设备通信。
- 仲裁和同步:协议设计允许通过仲裁(Arbitration)和时钟同步(Clock Synchronization)机制支持多主控(Master)设备。
4.2 扩展和标准化
20世纪90年代
- 速度的提升:最早的I²C版本支持标准模式(Standard Mode),最大传输速率为100kbit/s。随着需求增加,I²C总线标准逐步扩展,增加了快速模式(Fast Mode),最大传输速率提高到400kbit/s。
- 引脚配置与实现:各大半导体厂商开始在其芯片中集成I²C接口,为各种嵌入式系统和微控制器提供支持。
4.3 高速与多功能化
5. SHT40
SHT40 是 Sensirion 公司推出的环境传感器模块,主要用于测量温湿度。作为 SHT3x 系列的继任者,SHT40 具有更高的精度、更低的功耗和更小的封装尺寸。这使得它适用于广泛的应用场景,如 HVAC(暖通空调系统)、空气净化器、家用电器、汽车电子和物联网(IoT)设备。
主要特性
- 高精度:SHT40 在标准条件下(25℃和 60%RH)具有 ±1.8% RH 的相对湿度精度和 ±0.2℃ 的温度精度。
- 低功耗:适用于能量敏感的应用,如电池供电设备。
- 快速响应时间:能够迅速反映环境变化。
- 宽工作范围:-40℃ 至 +125℃ 的温度和 0%RH 至 100%RH 的湿度范围。
- 数字输出:使用 I²C 接口,简化与微控制器的连接。
- 工厂校准:传感器出厂前已校准,可直接使用,无需用户校准。
规格参数
- 电源电压:1.08V 至 3.6V
- 湿度测量范围:0%RH 至 100%RH
- 温度测量范围:-40℃ 至 +125℃
- 湿度精度:
- ±1.8%RH (典型, 25℃, 60%RH)
- 温度精度:
- ±0.2℃ (典型, 0℃ 至 60℃)
- 分辨率:12 位
- 响应时间:8 秒(湿度)
- 尺寸:1.5mm × 1.5mm × 0.5mm
引脚定义
SHT40 封装为 DFN (Dual Flat No-leads) 型,具有 4 个引脚:
- VDD:电源输入引脚
- GND:地引脚
- SCL:I²C 时钟线
- SDA:I²C 数据线
通信协议
SHT40 使用标准的 I²C 接口进行数据通信,支持标准(100kHz)和快速模式(400kHz)。以下是一些基本的 I²C 使用步骤:
- 设备地址:SHT40 的 I²C 地址是固定的 0x44(7 位地址)。
- 测量命令:发送测量命令以触发一次温湿度测量。
- 数据读取:在测量完成后,从传感器读取测量数据。
- 校验和(CRC):每次读操作后,接收到的数据包含一个校验和(CRC),用于验证数据完整性。
应用领域
- 智能家居:如智能恒温器、空气净化器和智能加湿器。
- HVAC 系统:用于温湿度控制和监测。
- 汽车电子:如车内空气质量监测系统。
- 工业自动化:环境监测和控制。
- 物联网 (IoT):环境数据采集节点。
使用注意事项
- 避免污染:传感器对污染物敏感,在焊接和使用过程中,尽量避免有害化学物质的接触。
- 湿度漂移校正:虽然传感器已出厂校准,但长期使用中可能会有湿度漂移,建议定期进行校准。
- 储存条件:未使用的传感器应储存在干燥、低温的环境中,以延长使用寿命。
6. 小程序6:可上报数据的温度湿度计
6.1 功能分析
-
硬件组件
- ESP32:作为主要的微控制器,提供计算和WiFi连接功能。
- SHT40:高精度温湿度传感器,用于感知环境中的温度和湿度。
-
系统功能
- 环境数据采集:
- 使用SHT40传感器实时采集环境温度和湿度数据。
- WiFi连接:
- ESP32负责连接到指定的WiFi网络,以确保数据能够通过网络进行传输。
- HTTP RESTful接口:
- 提供HTTP RESTful接口,允许客户端通过HTTP请求获取当前的温度和湿度数据。
- JSON数据传输:
- 通过RESTful接口返回的数据以JSON格式进行编码,使得数据易于解析和使用。
- 环境数据采集:
-
流程概要
- 初始化阶段
- 初始化ESP32和SHT40传感器。
- ESP32连接到指定的WiFi网络。
- 数据采集阶段
- 通过SHT40传感器采集温度和湿度数据。
- 数据传输阶段
- 搭建HTTP服务器,提供RESTful接口。
- 客户端通过HTTP GET请求获取传感器数据,服务器返回JSON格式的数据。
- 初始化阶段
6.2 伪代码
硬件初始化
- 初始化ESP32
- 初始化SHT40
- 初始化I2C
WiFi连接
- 设置WiFi SSID和密码
- 连接到指定WiFi网络
- 检查WiFi连接状态
- 如果未连接,重复尝试
- 如果连接成功,继续
HTTP服务器设置
- 初始化HTTP服务器
- 定义RESTful接口
- HTTP GET请求处理函数
- 读取传感器数据
- 生成JSON响应
- HTTP GET请求处理函数
- 启动HTTP服务器
主循环
- 保持系统运行
详细伪代码
Begin // 硬件初始化 Initialize ESP32 Initialize SHT40 Initialize I2C communication // WiFi连接 Set WiFi SSID and password Begin WiFi connection While WiFi is not connected Attempt connection to WiFi Delay for a short period End While Print "Connected to WiFi" // HTTP服务器设置 Initialize HTTP server on port 80 // 定义RESTful接口 On HTTP GET request to "/sensor" Read temperature from SHT40 Read humidity from SHT40 Create JSON response with temperature and humidity data Send JSON response End On Start HTTP server // 主循环 While true // 处理其他需要的任务或保持运行 Delay for a short period End While End
伪代码阶段说明
-
硬件初始化:
- 初始化ESP32和SHT40传感器,并设置I2C通信以确保设备能够通信。
-
WiFi连接:
- 设置WiFi的SSID和密码,并且在主循环中反复尝试连接到指定的WiFi网络。连接成功后,输出连接状态。
-
HTTP服务器设置:
- 创建和初始化HTTP服务器,绑定到指定端口(如80)。
- 定义HTTP GET请求的处理函数,当访问特定路径(如
/sensor
)时读取传感器数据,并以JSON格式返回。
-
主循环:
- 保持系统运行,并根据需要处理其他任务。这部分代码可以根据实际需求进行扩展。
6.3 功能实现
7. 小练习:结合ULTRASONIC-i2C模块,监控用户距离M5Stack的距离,从而打开或关闭屏幕显示信息
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析