基于 Raspberry Pi Pico 2 W、MAX31856 和 K 型热电偶开发的电烙铁温度自动点检、判定及数据上传系统。
PCB 半田付け温度点検記録 自动化系统
本系统用于生产现场电烙铁温度的自动点检。
操作人员将 K 型热电偶探头接触电烙铁头后,系统自动检测温度变化。当温度达到设定条件并进入稳定状态后,系统自动计算测量温度,判断其是否符合标准范围,并将点检结果上传至服务器。
通过本系统可以实现:
| 项目 | 内容 |
|---|---|
| 主控平台 | Raspberry Pi Pico 2 W |
| 开发语言 | MicroPython |
| 温度采集模块 | MAX31856 |
| 温度传感器 | K 型热电偶 |
| 显示模块 | SSD1306 OLED 0.96 英寸,128×64 |
| 状态指示 | 共阴 RGB LED |
| 操作按钮 | HS-KEY1-P 红色带帽按键 |
| 网络连接 | Pico 2 W 内置 Wi-Fi |
| 数据传输 | HTTP API |
| 主要用途 | 生产线电烙铁温度点检 |
| 最后更新 | 2026-06-10 |
设备开机
↓
读取配置文件
↓
初始化 OLED
↓
初始化 MAX31856
↓
执行传感器自检
↓
连接 Wi-Fi
↓
进入待机状态
↓
低频采集温度
↓
温度由低于阈值上升至阈值以上
↓
进入测量状态
↓
高频连续采样
↓
判断温度是否稳定
↓
计算平均温度
↓
判定 OK 或 NG
↓
生成上传数据
↓
上传至服务器
↓
显示测量结果
↓
返回待机状态
| 模块 | 型号或规格 |
|---|---|
| 主控板 | Raspberry Pi Pico 2 W |
| 温度采集模块 | MAX31856 |
| 温度传感器 | K 型热电偶 |
| 显示模块 | SSD1306 OLED 0.96 英寸,128×64 |
| 指示灯 | 共阴 RGB LED |
| 按钮 | HS-KEY1-P 红色带帽按键 |
| 网络 | Pico 2 W 内置 Wi-Fi |
| Pico 2 W 引脚 | 功能 | 连接模块 |
|---|---|---|
| GP1 | 蓝色 LED | RGB LED |
| GP2 | 红色 LED | RGB LED |
| GP3 | 绿色 LED | RGB LED |
| GP4 | SPI0 MISO | MAX31856 |
| GP5 | SPI0 CS | MAX31856 |
| GP6 | SPI0 SCK | MAX31856 |
| GP7 | SPI0 MOSI | MAX31856 |
| GP8 | I2C0 SDA | OLED |
| GP9 | I2C0 SCL | OLED |
| GP12 | 按钮输入 | HS-KEY1-P |
| 3.3V | 模块供电 | OLED、MAX31856 |
| GND | 公共地线 | 所有模块 |
显示模块使用 SSD1306 OLED,通过 I2C0 与 Pico 2 W 通信。
| OLED 引脚 | Pico 2 W 引脚 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| SDA | GP8 |
| SCL | GP9 |
通信参数:
通信接口:I2C0
设备地址:0x3C
通信频率:400 kHz
MAX31856 通过 SPI0 与 Pico 2 W 通信。
| MAX31856 引脚 | Pico 2 W 引脚 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| SCK | GP6 |
| MOSI | GP7 |
| MISO | GP4 |
| CS | GP5 |
通信参数:
通信接口:SPI0
SPI 波特率:5 MHz
热电偶类型:K 型
系统使用共阴 RGB LED 指示设备状态。
| RGB LED 引脚 | Pico 2 W 引脚 |
|---|---|
| Red | GP2 |
| Green | GP3 |
| Blue | GP1 |
| Common Cathode | GND |
实际制作时,应根据所使用 LED 的额定电流和正向压降串联适当的限流电阻。
| 按钮模块引脚 | Pico 2 W 引脚 |
|---|---|
| OUT | GP12 |
| GND | GND |
程序使用内部上拉模式:
GPIO 模式:PULL_UP
按下按钮:LOW
松开按钮:HIGH
┌─────────────────┐
│ Raspberry Pi │
│ Pico 2 W │
└───────┬─────────┘
│
┌──────────────────────┼──────────────────────┐
│ │ │
▼ ▼ ▼
┌────────────────┐ ┌────────────────┐ ┌────────────────┐
│ SSD1306 OLED │ │ MAX31856 │ │ RGB LED │
│ │ │ │ │ │
│ SDA ← GP8 │ │ SCK ← GP6 │ │ Red ← GP2 │
│ SCL ← GP9 │ │ MOSI ← GP7 │ │ Green ← GP3 │
│ │ │ MISO ← GP4 │ │ Blue ← GP1 │
└────────────────┘ │ CS ← GP5 │ └────────────────┘
└────────┬───────┘
│
▼
┌────────────────┐
│ K 型热电偶 │
└────────────────┘
┌────────────────┐
│ HS-KEY1-P 按钮 │
│ OUT ← GP12 │
└────────────────┘
main.py
│
├── 配置管理
│ ├── config.json
│ ├── measurement.json
│ └── appconfig.py
│
├── OLED 显示
│ └── ssd1306.py
│
├── 温度采集
│ └── max31856.py
│
├── Wi-Fi 管理
│ └── MicroPython network 模块
│
├── 按钮管理
│ └── GPIO IRQ 中断
│
├── LED 控制
│
└── 数据上传
└── iot_webapi.py
└── urequests.py
/
├── main.py
├── max31856.py
├── ssd1306.py
├── iot_webapi.py
├── urequests.py
├── appconfig.py
├── config.json
└── measurement.json
main.py系统唯一入口程序,负责协调各个硬件模块及业务流程。
主要职责:
程序启动流程:
读取配置
↓
初始化设备
↓
连接 Wi-Fi
↓
进入主循环
max31856.pyMAX31856 驱动程序。
主要职责:
ssd1306.pySSD1306 OLED 显示驱动。
主要职责:
iot_webapi.py服务器数据上传模块。
主要职责:
urequests.pyMicroPython HTTP 客户端库。
支持以下请求方式:
本项目主要用于:
向服务器上传温度点检记录
appconfig.py系统固定配置文件。
主要包含:
服务器地址
设备 ID
项目 ID
用户 ID
组别代码
API 路径
config.json设备网络配置文件。
主要包含:
Wi-Fi 名称
Wi-Fi 密码
静态 IP
子网掩码
默认网关
DNS 服务器
NTP 服务器
measurement.json测量参数配置文件。
主要包含:
测量触发温度
待机采样周期
测量采样周期
稳定观察时间
稳定温度范围
合格温度下限
合格温度上限
校准偏移量
校准比例
系统运行期间,main.py 持续执行主循环:
while True
├── Wi-Fi 状态管理
├── 按钮事件处理
├── 温度采样
├── 测量状态判断
├── 温度稳定性判断
├── OK/NG 判定
├── LED 状态控制
├── 数据上传
├── OLED 刷新
└── 循环延时
不同状态下采用不同的循环周期:
待机状态:1 秒
测量状态:0.2 秒
系统包含两个主要测量状态:
idle
active
idle 待机状态设备等待热电偶接触电烙铁。
特点:
配置来源:
{
"low_freq_interval": 1
}
active 测量状态温度达到触发条件后,系统进入测量状态。
特点:
配置来源:
{
"high_freq_interval": 0.2
}
温度达到触发阈值
┌─────────────────────────────────┐
│ ▼
┌──────────────┐ ┌──────────────┐
│ idle │ │ active │
│ 低频采样 │ │ 高频采样 │
└──────────────┘ └──────────────┘
▲ │
│ │
└─────────────────────────────────┘
测量、判定和上传完成后返回
测量触发阈值由 measurement.json 配置:
{
"threshold": 50
}
触发逻辑:
温度原本低于 50℃
↓
温度上升至大于或等于 50℃
↓
进入 active 测量状态
采用温度上升过程作为触发条件,可以避免环境温度或设备启动时的异常值造成误触发。
进入 active 状态后,程序持续记录观察期间的:
最低温度:min_v
最高温度:max_v
稳定观察时间由以下参数决定:
{
"stable_time": 3
}
当前配置表示连续观察 3 秒。
温度波动范围计算公式:
温度波动 = max_v - min_v
允许的最大温度波动由以下参数决定:
{
"stable_range": 3
}
稳定判定条件:
(max_v - min_v) ≤ stable_range
按照当前配置,当 3 秒观察期间的最高温度与最低温度之差不超过 3℃ 时,系统认为温度已经稳定。
温度稳定后,系统根据观察期间的最高温度和最低温度计算最终结果:
平均温度 = (max_v + min_v) / 2
示例:
最高温度:327℃
最低温度:325℃
平均温度:
(327 + 325) / 2 = 326℃
合格温度范围由 measurement.json 配置:
{
"min_temp": 300,
"max_temp": 340
}
判定条件:
300℃ ≤ 测量温度 ≤ 340℃
符合范围时:
CheckResult = OK
不符合范围时:
CheckResult = NG
判定边界包含下限和上限,即 300℃ 和 340℃ 均判定为合格。
系统支持通过比例和偏移量对原始温度进行补偿。
配置参数:
{
"offset": 0,
"scale": 1
}
温度计算公式:
补偿后温度 = 原始温度 × scale + offset
示例:
原始温度:300℃
scale:1.02
offset:-3
计算结果:
300 × 1.02 - 3 = 303℃
修改 scale 和 offset 前,应使用具有有效校准或检定状态的标准温度测量设备进行对照,并保留相应的校准记录。
max31856.py 负责:
SPI 通信
寄存器读写
热电偶温度读取
温度数据转换
故障状态检测
故障状态清除
异常恢复
MAX31856 故障状态寄存器地址:
0x0F
支持检测的故障包括:
生产现场测试时发现,热电偶接触烙铁的瞬间可能出现:
SCV
SCG
此类故障可能由接触瞬间产生的电气扰动引起,属于瞬时异常。
程序采用的处理方式:
检测到瞬时 SC 故障
↓
暂不立即中断测量
↓
继续尝试读取温度
↓
根据后续读取结果判断是否为持续故障
这样可以避免:
瞬时故障抑制不应掩盖持续性故障。如果异常持续存在,系统仍应进入故障状态并提示维护人员检查传感器和接线。
程序通过以下参数定义热电偶接触瞬间的异常宽限时间:
CONTACT_TOLERANCE_MS
默认值:
350 ms
作用:
热电偶接触烙铁瞬间
↓
允许短时间的读取异常
↓
超过宽限时间后再判断是否为持续故障
该机制可以降低接触瞬间误触发故障报警的概率。
Wi-Fi 管理由多个状态组成:
INIT
SCAN
CONNECT
VERIFY
ONLINE
BACKOFF
FAIL
INIT初始化 Pico 2 W 的无线网络模块。
主要操作:
SCAN扫描附近的无线网络,并确认目标 SSID 是否可用。
CONNECT使用 config.json 中的 SSID 和密码连接无线接入点。
VERIFY连接无线接入点后,进一步验证网络是否可用。
验证内容包括:
UDP 网络探测
NTP 时间同步
网络参数检查
ONLINE网络正常运行状态。
系统持续监测:
BACKOFF连接失败后进入退避状态,等待一段时间再重新尝试,避免持续快速重连。
FAIL达到最大重试次数后进入失败状态。
默认处理方式:
等待 15 秒
↓
重新从初始化状态开始连接
测量完成
↓
计算最终温度
↓
判定 OK 或 NG
↓
生成 JSON 数据
↓
发送 HTTP POST 请求
↓
服务器 API
↓
保存至数据库
请求方式:POST
Content-Type:application/json
实际地址由 appconfig.py 管理。
公开文档中建议使用占位符:
http://<API_HOST>:<API_PORT>/<API_PATH>
例如:
http://<API_HOST>:5000/EIMWeb/api/TemperatureApi/Add/1
默认优先使用 urequests:
方式 1:urequests
↓
发送 HTTP 请求
↓
成功后结束
如果 urequests 上传失败,则使用 Socket 方式构造 HTTP/1.1 请求:
方式 2:Socket HTTP/1.1
↓
建立 TCP 连接
↓
发送 HTTP 请求
↓
检查服务器响应
该备用机制用于提高 MicroPython 环境下的数据上传成功率。
{
"PID": "",
"GROUPCODE": "PCBSOLDER",
"IPADDR": "<DEVICE_IP>",
"DeviceID": 1,
"ItemID": "1",
"ItemValue": 325.4,
"ItemType": "TEMP",
"CheckResult": "OK",
"StandardMin": 300,
"StandardMax": 340,
"MUSER": "<DEVICE_USER>",
"MDATE": 20260610,
"MTIME": 143012
}
主要字段说明:
| 字段 | 说明 |
|---|---|
PID |
关联的生产或业务记录 ID |
GROUPCODE |
数据所属组别代码 |
IPADDR |
设备 IP 地址 |
DeviceID |
设备编号 |
ItemID |
点检项目编号 |
ItemValue |
测量温度 |
ItemType |
测量项目类型 |
CheckResult |
OK/NG 判定结果 |
StandardMin |
标准温度下限 |
StandardMax |
标准温度上限 |
MUSER |
数据创建者或设备标识 |
MDATE |
测量日期 |
MTIME |
测量时间 |
显示网络相关信息:
设备 IP 地址
Wi-Fi 信号图标
使用大字体显示当前温度,例如:
325.4℃
正常模式下显示:
当前时间
校准模式下显示:
CALIBRATION MODE
| 系统状态 | LED 表现 |
|---|---|
| 开机自检 | 红、绿、蓝依次闪烁 |
| 正在测量 | 蓝灯点亮 |
| 温度合格 | 绿灯点亮 |
| 温度不合格 | 红灯点亮 |
| 传感器故障 | 红灯常亮 |
| 校准模式 | 所有 LED 熄灭 |
LED 状态用于帮助操作人员快速判断设备当前的运行状态和点检结果。
按钮采用 GPIO IRQ 中断方式处理,而不是在主循环中持续轮询。
优点:
开启或关闭 OLED 显示
关闭 OLED 只影响屏幕显示,不应停止温度采集、Wi-Fi 管理或数据上传。
长按约 1.2 秒:
执行 MCU 软件重启
切换校准模式
程序应配置适当的按键消抖、双击间隔和多击识别时间,避免机械按键抖动导致误操作。
进入方式:
连续点击按钮 5 次
校准模式特点:
CALIBRATION MODE。主要用途:
再次连续点击按钮五次,可退出校准模式并返回正常测量状态。
config.jsonconfig.json 用于保存网络相关配置。
示例:
{
"ssid": "<WIFI_SSID>",
"password": "<WIFI_PASSWORD>",
"ip": "<DEVICE_IP>",
"netmask": "<NETMASK>",
"gateway": "<GATEWAY_IP>",
"dns": "<DNS_SERVER>",
"ntp": "<NTP_SERVER>"
}
字段说明:
| 字段 | 说明 |
|---|---|
ssid |
Wi-Fi 网络名称 |
password |
Wi-Fi 密码 |
ip |
设备静态 IP 地址 |
netmask |
子网掩码 |
gateway |
默认网关 |
dns |
DNS 服务器 |
ntp |
NTP 时间服务器 |
不要在公开 Wiki 中填写真实的 Wi-Fi 密码、内部服务器地址或其他敏感网络信息。
measurement.json当前测量配置示例:
{
"threshold": 50,
"low_freq_interval": 1,
"high_freq_interval": 0.2,
"stable_time": 3,
"stable_range": 3,
"min_temp": 300,
"max_temp": 340,
"offset": 0,
"scale": 1
}
字段说明:
| 字段 | 说明 | 当前值 |
|---|---|---|
threshold |
测量触发温度 | 50℃ |
low_freq_interval |
待机状态采样周期 | 1 秒 |
high_freq_interval |
测量状态采样周期 | 0.2 秒 |
stable_time |
稳定性观察时间 | 3 秒 |
stable_range |
允许的最大温度波动 | 3℃ |
min_temp |
合格温度下限 | 300℃ |
max_temp |
合格温度上限 | 340℃ |
offset |
温度补偿偏移量 | 0 |
scale |
温度补偿比例 | 1 |
系统异常恢复的设计原则是:
尽量不中断生产
主要恢复机制包括:
设计目标:
设备能够长期、稳定、无人值守运行
| 故障现象 | 检查项目 |
|---|---|
| OLED 无显示 | 检查 OLED 供电、GP8 和 GP9 接线 |
| OLED 地址无法识别 | 检查 I2C 地址是否为 0x3C |
| 温度显示异常 | 检查热电偶极性、接线和传感器类型 |
| 温度一直不变化 | 检查 MAX31856 供电及 SPI 接线 |
| 红灯持续点亮 | 检查热电偶和 MAX31856 故障状态 |
| 频繁出现 SC 故障 | 检查热电偶接触、接地和电气干扰 |
| Wi-Fi 无法连接 | 检查 SSID、密码和无线接入点状态 |
| Wi-Fi 一直显示 Connecting | 检查 AP、静态 IP 和网关配置 |
| 已连接 Wi-Fi 但无法联网 | 检查网关、DNS 和网络访问策略 |
| 无法上传数据 | 检查 API 服务、路由和服务器响应 |
| 上传持续失败 | 检查 API 路径、请求数据和服务日志 |
| 时间错误 | 检查 NTP 服务器及网络状态 |
| 设备自动重启 | 检查供电稳定性、短路和程序异常 |
| 温度结果明显偏差 | 检查热电偶、补偿参数和校准状态 |
| 按钮无响应 | 检查 GP12 接线、中断配置和上拉设置 |
| 按钮频繁误触发 | 检查按键消抖及多击判断参数 |
修改 config.json 中的:
ssid
password
如果同时更换网络环境,还应确认:
ip
netmask
gateway
dns
ntp
修改 measurement.json 中的:
min_temp
max_temp
修改后应确认:
修改 measurement.json 中的:
stable_time
stable_range
参数影响:
stable_time 越长,结果通常越稳定,但测量时间也会增加;stable_range 越小,稳定条件越严格;stable_range 设置过大,可能在温度尚未真正稳定时完成测量。修改:
threshold
触发温度应明显高于环境温度,同时低于正常测量温度。
修改 appconfig.py 中的:
WEBAPI_BASEURL
修改后应验证:
修改 measurement.json 中的:
offset
scale
修改前后应保留:
本项目的主要特点:
自动测量
自动判断稳定状态
自动计算测量结果
自动判定 OK/NG
自动上传数据
网络异常自动恢复
传感器异常处理
支持校准与维护
适合无人值守运行
适用场景:
| 日期 | 版本 | 变更内容 |
|---|---|---|
| 2026-06-10 | 1.0 | 整理硬件接线、系统运维、软件架构和程序逻辑说明 |