尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

基于Arduino的4Pin PWM风扇智能温控系统DIY指南

基于Arduino的4Pin PWM风扇智能温控系统DIY指南
📅 发布时间:2026/7/28 22:28:20

1. 从“嗡嗡”声到“静音”:为什么我们需要一个4Pin风扇控制器?

如果你组装过台式电脑,或者拆开过任何带风扇的电子设备,一定对那种“嗡嗡”的噪音不陌生。尤其是在夜深人静的时候,风扇突然全速运转,声音堪比小型直升机起飞,这体验实在算不上美好。更糟的是,很多时候风扇其实并不需要那么卖力地工作,比如电脑在浏览网页时,CPU温度可能只有四五十度,但风扇却依然按照预设的“安全”曲线在高速旋转,白白制造噪音和消耗电能。这就是一个典型的“开环”控制问题:风扇要么全速,要么停转,或者只有几个固定的档位,无法根据实际温度进行平滑、精准的调节。

而4Pin风扇,正是为了解决这个问题而生的。与传统的3Pin风扇(只有电源、地线和转速反馈线)不同,4Pin风扇多出了一根至关重要的线——PWM(Pulse Width Modulation,脉冲宽度调制)控制线。这根线,就是我们今天要聊的“转速控制器”能够发挥作用的核心。通过这根线,我们可以向风扇发送一个特定频率和占空比的方波信号。风扇内部的驱动电路会解读这个信号:占空比越高(即高电平时间占总周期的比例越大),风扇的转速就越高;反之,占空比越低,转速就越慢,直至停转。这样一来,风扇的转速就不再是固定或分档的,而是可以在0%到100%之间无级、线性地调节。

那么,自己动手做一个4Pin风扇转速控制器,意义何在?首先,最直接的就是降噪。你可以为你的旧电脑机箱风扇、NAS散热风扇甚至是一些DIY项目中的散热模块,定制一条符合你听觉舒适度的转速-温度曲线,让设备在需要安静的时候真正安静下来。其次,是节能与延长寿命。风扇长期全速运行,不仅耗电,其轴承等机械部件的磨损也会加剧。通过智能控制,让风扇大部分时间运行在中低转速,能有效延长其使用寿命。最后,也是最重要的一点,是掌控感与学习的乐趣。这不仅仅是一个工具,更是一个绝佳的嵌入式系统入门项目。你将亲手触摸到PWM信号、温度传感、闭环反馈控制这些听起来高大上的概念,并用Arduino、树莓派甚至STM32这样的开发板将它们实现出来。接下来,我将以一个基于Arduino Uno的开发过程为例,带你从零开始,理解原理、挑选元件、动手焊接,直到编写代码,最终实现一个可以根据温度自动调节风扇转速的智能控制器。

2. 核心元件选型与电路原理:不只是“接上线”那么简单

在开始动手之前,我们必须搞清楚要控制的对象——4Pin风扇,以及我们需要准备哪些“武器”。一个标准的4Pin风扇接口,引脚定义通常是:Pin1(接地,黑色)、Pin2(+12V电源,黄色)、Pin3(转速反馈,绿色)、Pin4(PWM控制信号,蓝色)。我们的控制器,核心任务就是生成一个符合规范的PWM信号,送到Pin4上。

2.1 风扇驱动电路的考量:为什么不能直接连接MCU?

Arduino Uno的IO口输出电压是5V,而4Pin风扇的PWM控制线,虽然信号标准通常是5V TTL电平,但其参考地是风扇自身的接地(Pin1)。这里第一个坑就出现了:共地问题。你必须将Arduino的GND与风扇的Pin1(GND)可靠地连接在一起,否则信号无法形成回路,控制必然失效。这是所有电路连接的第一步,也是最基础却最容易被忽略的一步。

第二个问题更关键:驱动能力。虽然PWM是信号线,电流很小,但为了确保信号稳定,尤其是当连接线较长或有干扰时,我们最好不直接用MCU的IO口去驱动。一个更稳妥的做法是使用一个电平转换或缓冲电路。这里,一个经典的74HC04非门芯片(六反相器)就能派上用场。我们可以用其中的一个反相器作为缓冲器:将Arduino的PWM信号输入其输入端,输出端接风扇的PWM线。74HC04的输出驱动能力比MCU的IO口强,可以提供更干净的信号。同时,由于它是反相器,你需要在软件里对逻辑进行取反(比如,设定高占空比对应低转速的话,硬件上就自动校正过来了)。当然,如果你追求极简,且风扇距离很近,直接用一根杜邦线连接Arduino的PWM引脚(如D9, D10, D11)和风扇的Pin4,并确保共地,在大多数情况下也能工作。但这属于“能用”但不“稳健”的方案。

2.2 温度传感的选择:DS18B20 vs. DHT11 vs. 模拟温度传感器

要实现温控,我们需要一个“眼睛”来感知温度。常见的选择有几种:

  • DS18B20:这是我个人最推荐用于此类项目的数字温度传感器。它采用单总线协议,只需要Arduino的一个数字引脚(加上上拉电阻)就能读取温度,精度高(±0.5°C),且封装形式多样(防水探头、TO-92封装等),非常适合测量空气或接触式测量散热片温度。它的库成熟稳定,代码编写简单。
  • DHT11/DHT22:这类传感器同时测量温度和湿度。如果你只需要温度,用它们有点大材小用,且DHT11的响应速度和精度相对DS18B20略逊一筹。但对于需要环境温湿度综合判断的场景(如机柜环境监控),它是一个选择。
  • NTC热敏电阻或LM35:这是模拟方案。你需要使用一个模拟引脚来读取其分压后的电压值,然后通过公式计算温度。好处是成本极低,但需要校准,且电路需要额外电阻,受电源电压波动影响。对于追求极致性价比或学习模拟信号处理的场景可以考虑。

在本项目中,我将以DS18B20作为示例,因为它可靠、易用,且结果稳定。

2.3 主控与电源:Arduino Uno的胜任与局限

Arduino Uno(基于ATmega328P)完全有能力完成这个任务。它有多路硬件PWM输出(引脚3, 5, 6, 9, 10, 11),可以产生非常稳定的PWM波,无需软件模拟,不占用CPU资源。其5V输出引脚可以为DS18B20和74HC04等芯片供电。整个系统的功耗很低,Arduino的USB口或外部7-12V直流电源适配器都能轻松带动。

但是,请注意Arduino Uno的工作电压是5V,而风扇的主电源是12V。绝对不要试图用Arduino的5V引脚去驱动风扇的12V电源(Pin2)!风扇的12V电源必须由一个独立的、功率足够的12V电源适配器来提供。你的电路板上,Arduino的“控制部分”(5V域)和风扇的“动力部分”(12V域)通过PWM信号和共地连接在一起,但电源是隔离的。这是安全运行的前提。

注意:在连接任何线路前,务必断开所有电源。用万用表确认风扇的Pin2(12V)和Pin1(GND)之间没有短路到控制电路的低压部分。

3. 硬件搭建与连接:一步步构建你的控制核心

理论清晰后,我们开始动手搭建硬件。请准备好以下材料:

  1. Arduino Uno开发板 x1
  2. 4Pin PWM风扇(机箱风扇或CPU风扇均可) x1
  3. DS18B20温度传感器(TO-92封装) x1
  4. 4.7kΩ 电阻(用于DS18B20上拉) x1
  5. 74HC04六反相器芯片(可选,用于信号缓冲) x1
  6. 面包板、杜邦线(公对公、公对母)若干
  7. 12V直流电源适配器(接口匹配你的风扇) x1
  8. 可能需要一个风扇延长线或破开的风扇接口,以便接线。

3.1 基础直连方案(简易版)

如果你选择最简单的直接连接方案,接线如下:

  1. 共地:用杜邦线将Arduino的任意一个GND引脚,连接到风扇接口的Pin1(黑色线,GND)。
  2. PWM信号:用杜邦线将Arduino的一个支持硬件PWM的引脚(例如D9),连接到风扇接口的Pin4(蓝色线,PWM控制)。
  3. 风扇电源:将12V电源适配器的正极(通常是中心正极)接到风扇接口的Pin2(黄色线,+12V),负极接到风扇接口的Pin1(GND)。注意,这里风扇的GND(Pin1)已经和Arduino的GND连在一起了,所以整个系统共地。
  4. 温度传感器:
    • 将DS18B20的数据脚(中间引脚)连接到Arduino的D2引脚。
    • 在DS18B20的数据脚和VCC脚之间,连接一个4.7kΩ的上拉电阻。
    • 将DS18B20的VCC(通常为左侧引脚)连接到Arduino的5V。
    • 将DS18B20的GND(通常为右侧引脚)连接到Arduino的GND。

3.2 增加缓冲级的稳健方案

如果你想采用更稳健的74HC04缓冲方案,接线会稍复杂一点,但抗干扰能力更强:

  1. 共地与电源:同上,确保Arduino GND与风扇GND、DS18B20 GND连接。为74HC04供电:将其VCC(引脚14)接Arduino 5V,GND(引脚7)接Arduino GND。
  2. PWM信号路径:
    • Arduino的PWM输出(如D9)连接到74HC04的一个反相器的输入端(例如引脚1)。
    • 该反相器的输出端(例如引脚2)连接到风扇的Pin4(PWM控制线)。
    • (注意:74HC04是反相器,输出是输入的反相。如果你希望Arduino输出高占空比对应高转速,那么经过反相器后,实际送到风扇的是低占空比信号。你需要在软件中预先进行逻辑取反,或者使用两个反相器串联将信号再反相回来。最简单的方法是在代码里用255 - pwmValue来处理。)
  3. 温度传感器:连接方式与基础方案完全相同。

硬件连接完成后,建议先用万用表通断档检查所有连接,特别是电源正负极没有接反、没有短路。确认无误后,我们就可以进入软件部分了。

4. 软件编程:从读取温度到生成PWM的闭环逻辑

硬件是躯体,软件是灵魂。我们将使用Arduino IDE来编写控制程序。核心逻辑是:读取DS18B20的温度 -> 根据预设的“温度-转速”曲线计算目标PWM占空比 -> 将占空比值写入对应的PWM引脚。

4.1 库的安装与基础代码框架

首先,你需要安装DS18B20的库。在Arduino IDE中,点击“工具” -> “管理库”,搜索“DallasTemperature”并安装。这个库依赖于“OneWire”库,通常会自动安装。

接下来,我们开始编写代码。代码主要分为几个部分:库引入、引脚定义、变量声明、初始化设置(setup())和主循环(loop())。

#include <OneWire.h> #include <DallasTemperature.h> // 引脚定义 #define ONE_WIRE_BUS 2 // DS18B20数据线连接的数字引脚 #define FAN_PWM_PIN 9 // 连接风扇PWM线的数字引脚(必须是PWM引脚,如3,5,6,9,10,11) // 温度传感器设置 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); // 变量定义 float currentTemp = 0.0; // 当前温度 int pwmValue = 0; // 要输出的PWM值(0-255) // 温度-转速控制曲线参数(需要根据你的风扇和散热需求调整) const float TEMP_MIN = 30.0; // 开始加速的温度阈值(摄氏度) const float TEMP_MAX = 60.0; // 达到全速的温度阈值(摄氏度) const int PWM_MIN = 64; // 最低转速对应的PWM值(约25%占空比)。有些风扇有启动电压,不能设为0。 const int PWM_MAX = 255; // 最高转速对应的PWM值(100%占空比) void setup() { Serial.begin(9600); // 初始化串口,用于调试输出 Serial.println("4Pin Fan PWM Controller Starting..."); pinMode(FAN_PWM_PIN, OUTPUT); // 初始化时先让风扇以最低速转动,防止停转 analogWrite(FAN_PWM_PIN, PWM_MIN); sensors.begin(); // 启动温度传感器 // 可选:设置分辨率,9-12位,分辨率越高转换越慢 sensors.setResolution(12); } void loop() { // 1. 读取温度 sensors.requestTemperatures(); // 发送温度转换请求 currentTemp = sensors.getTempCByIndex(0); // 获取索引0的传感器温度(我们只接了一个) // 检查读数是否有效(-127是DS18B20的错误值) if(currentTemp == DEVICE_DISCONNECTED_C) { Serial.println("Error: Could not read temperature data!"); // 出错时可以让风扇全速运行以确保安全 analogWrite(FAN_PWM_PIN, PWM_MAX); delay(2000); return; } // 2. 根据温度计算PWM值(线性映射) pwmValue = calculatePWM(currentTemp); // 3. 将PWM值输出到风扇 analogWrite(FAN_PWM_PIN, pwmValue); // 4. 串口打印调试信息(可选) Serial.print("Temperature: "); Serial.print(currentTemp); Serial.print(" C | PWM Output: "); Serial.println(pwmValue); // 5. 延时。DS18B20在12位分辨率下转换需要约750ms,不宜过快查询。 delay(1000); } // 核心控制函数:将温度映射到PWM值 int calculatePWM(float temp) { int result; if (temp <= TEMP_MIN) { // 温度低于下限,保持最低转速 result = PWM_MIN; } else if (temp >= TEMP_MAX) { // 温度高于上限,全速运行 result = PWM_MAX; } else { // 温度在上下限之间,线性插值计算 // 公式:PWM = PWM_MIN + (temp - TEMP_MIN) * (PWM_MAX - PWM_MIN) / (TEMP_MAX - TEMP_MIN) result = PWM_MIN + (temp - TEMP_MIN) * (PWM_MAX - PWM_MIN) / (TEMP_MAX - TEMP_MIN); } // 如果使用了74HC04反相器且未串联两个,则需要取反 // result = 255 - result; return result; }

4.2 代码关键点解析与调参心得

这段代码的核心是calculatePWM函数,它实现了一个最简单的线性温度-转速控制曲线。你需要根据实际情况调整几个关键参数:

  • TEMP_MIN和TEMP_MAX:这是控制曲线的“拐点”。TEMP_MIN是风扇开始从最低速提升的触发点。例如,设TEMP_MIN = 35,意味着温度低于35°C时,风扇始终以PWM_MIN运行。TEMP_MAX是风扇达到全速的温度点。温度超过此值,风扇将一直以PWM_MAX全速运行。这两个值需要根据你的设备散热能力和噪音容忍度来反复测试确定。
  • PWM_MIN:这是一个极其重要的参数,直接关系到项目成败。很多PWM风扇有一个“最低启动占空比”或“最低工作电压”。如果你将PWM值设为0(0%占空比),风扇可能会完全停止。但当温度上升需要重新启动时,有些风扇可能因为惯性或启动扭矩不足而“卡住”,无法自己转起来,导致散热失效。因此,通常需要设置一个最低值,比如64(对应25%占空比),确保风扇始终在缓慢旋转。这个值需要你实验确定:逐步降低PWM_MIN,直到风扇刚好能持续稳定转动为止。
  • 线性与非线性曲线:上面的代码是线性映射,即温度每升高一度,转速增加的量是固定的。但实际中,你可能希望低温时转速变化平缓以保持安静,高温时转速快速拉升以加强散热。这可以通过分段函数或更复杂的数学函数(如指数、对数)来实现。例如,你可以定义两段或三段线性曲线。

实操心得:调试时,一定要利用好串口监视器(工具 -> 串口监视器,波特率设为9600)。通过它实时观察读取到的温度和计算出的PWM值,这是你调整参数、排查问题的眼睛。如果温度读数一直是-127或85,检查DS18B20接线和上拉电阻。如果PWM值输出但风扇不转,检查共地、电源以及PWM_MIN值是否太小。

5. 进阶优化与功能扩展:让你的控制器更“智能”

基础功能实现后,我们可以考虑一些进阶优化,让这个控制器更实用、更可靠。

5.1 引入滞回控制,防止风扇转速频繁跳动

在临界温度点附近,由于温度采样有微小波动,可能会导致计算出的PWM值在PWM_MIN上下频繁跳动,风扇随之频繁启停,产生“喘息”效应。解决方法是在控制逻辑中加入滞回(Hysteresis)。例如,设置风扇启动温度(TEMP_ON)为35°C,但停止温度(TEMP_OFF)设为30°C。这样,温度从低到高升到35°C时风扇启动,之后即使温度回落到34°C,由于高于30°C,风扇也不会停止,直到温度降到30°C以下。这能有效避免振荡。

5.2 实现更复杂的“风扇曲线”

模仿主板BIOS中的风扇控制功能,你可以实现多段折线式的风扇曲线。例如:

  • 温度 < 40°C: 转速 = 20%
  • 40°C ≤ 温度 < 50°C: 转速 = 20% ~ 50% 线性增长
  • 50°C ≤ 温度 < 70°C: 转速 = 50% ~ 80% 线性增长
  • 温度 ≥ 70°C: 转速 = 100% 这可以通过在calculatePWM函数中编写多个if-else if条件分支来实现,给予你更精细的控制粒度。

5.3 增加手动控制与模式切换

为控制器增加一个旋转编码器或几个按钮,配合一块OLED显示屏(如SSD1306),就可以实现手动调节转速、切换自动/手动模式、查看实时温度和转速等功能。这需要引入更多的库(如U8g2或Adafruit_SSD1306)和更复杂的状态机代码,但会极大提升产品的交互性和实用性。

5.4 迁移到其他平台:STM32与ESP32

Arduino Uno很好,但如果你需要更小的体积、更低的功耗、更多的IO口或Wi-Fi/蓝牙功能,可以考虑其他平台。

  • STM32(如STM32F103C8T6,即“蓝莓派”):在Arduino IDE中通过“STM32duino”或“PlatformIO”支持STM32。PWM生成需要使用其硬件定时器的特定通道,代码会略有不同,但原理相通。STM32的PWM分辨率和频率可调范围更广。
  • ESP32/ESP8266:这两者都内置Wi-Fi。你可以做一个网络遥控的风扇控制器!通过手机网页或HomeAssistant就能远程调节转速、查看温度。这需要你学习Web服务器(如ESPAsyncWebServer)和Wi-Fi连接的相关知识。ESP32同样有丰富的硬件PWM资源(LEDC通道)。

踩坑记录:在ESP32上使用analogWrite()函数时需要注意,其PWM频率和分辨率默认值与Arduino AVR系列不同。ESP32的ledcSetup()和ledcWrite()函数提供了更强大的PWM控制能力,但需要你指定通道、频率和分辨率。直接套用Arduino代码可能导致风扇不工作或发出异响,务必查阅对应开发板的PWM文档。

6. 常见问题排查与实战经验分享

即使按照步骤操作,你也可能会遇到一些问题。这里汇总一些常见坑点:

6.1 风扇完全不转

  • 检查电源:这是首要问题。用万用表测量风扇接口的Pin2和Pin1之间是否有12V电压?电源适配器是否功率足够(通常一个风扇约2-3W)?
  • 检查共地:确保Arduino的GND、风扇的GND(Pin1)、以及电源的GND全部连接在一起。这是信号传输的基础。
  • 检查PWM信号:将代码中analogWrite的值固定为128(50%占空比),然后用示波器或逻辑分析仪(如果没有,可以用一个LED加一个220Ω电阻串联,接在PWM引脚和GND之间,LED应有中等亮度)检查PWM引脚是否有方波输出。如果没有,检查代码和引脚定义。
  • 检查PWM_MIN值:尝试将PWM_MIN暂时设为一个较大的值,比如150,看风扇是否转动。如果转动,说明原PWM_MIN值低于风扇的启动阈值。

6.2 风扇一直全速转,不受控制

  • PWM控制线未连接或断路:如果PWM控制线(Pin4)悬空或未连接,很多风扇的默认行为就是全速运转。检查杜邦线是否插紧,线路是否导通。
  • PWM信号频率不对:大多数4Pin风扇的PWM信号频率是25kHz(也有21kHz或更高)。Arduino的analogWrite()默认频率对于引脚5和6是~980Hz,对于引脚9和10是~490Hz。虽然很多风扇也能响应低频PWM,但部分风扇对频率有要求。如果怀疑是频率问题,可以尝试修改定时器频率(对于ATmega328P,修改TCCR1B等寄存器),或者换用支持更高频率PWM的开发板(如ESP32)。
  • 逻辑反相问题:如果你使用了反相器(如74HC04),但代码中没有进行255 - pwmValue取反操作,那么你输出的高占空比信号经过反相器后变成了低占空比信号送到风扇,导致实际转速与你期望的相反。检查硬件和软件逻辑是否匹配。

6.3 温度读数异常(-127, 85,或跳动巨大)

  • -127(DEVICE_DISCONNECTED_C):几乎可以断定是DS18B20连接问题。检查接线顺序(VCC, DATA, GND)、4.7kΩ上拉电阻是否接在DATA和VCC之间、接触是否良好。
  • 恒定85°C:这是DS18B20上电后的默认值。如果每次读都是85,说明单片机成功找到了传感器,但温度转换命令可能未被执行或读取失败。检查sensors.requestTemperatures();和sensors.getTempCByIndex(0);这两行代码是否都被执行,且中间有足够的延迟(delay(750)用于12位分辨率)。
  • 读数跳动:可能是电源噪声干扰。尝试在DS18B20的VCC和GND之间并联一个0.1uF的瓷片电容进行滤波。确保连接线不要太长,且远离风扇电源等大电流线路。

6.4 风扇噪音或异响

  • 低频PWM导致的线圈鸣叫:如果PWM频率在可听范围内(比如几百Hz),风扇电机可能会发出高频的“滋滋”声。尝试提高PWM频率。在Arduino Uno上,可以通过修改定时器预分频器寄存器来做到,但这属于进阶操作,且会影响其他依赖同一定时器的功能(如delay()和millis())。
  • 机械共振:某些转速点可能会引起风扇外壳或安装架的共振。在你的控制曲线中,可以尝试避开那个转速区间。例如,如果发现50%占空比时噪音特别大,可以在calculatePWM函数中,当计算值接近128时,将其强制设定为120或135。

这个自制的4Pin风扇转速控制器项目,从理解PWM原理开始,到硬件搭接、软件编程,再到问题排查和功能扩展,几乎涵盖了嵌入式开发的一个完整小循环。它成本低廉,但带来的静音体验和掌控感是实实在在的。更重要的是,通过动手解决其中遇到的各种“坑”,你对电路、信号、控制逻辑的理解会远超仅仅阅读文档。当你第一次听到风扇随着温度升高而平滑加速,不再有突兀的噪音爆发时,那种成就感就是DIY最大的乐趣。你可以把它用在你的台式机、3D打印机、网络设备柜,或者任何需要智能散热的地方。

相关新闻

  • 【Springboot毕设全套源码+文档】基于springboot的食品公司采购管理系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • pdf工具:这几款免费在线与手机工具实测盘点 - 办公小帮手
  • 【2024最简本地部署方案】:仅需1台MacBook Pro M3 Max+12GB RAM,实测运行Phi-3-mini推理响应<420ms(附完整CLI脚本)

最新新闻

  • C/C++中高效实现余弦函数:从泰勒展开到SIMD优化
  • Jellium Desktop翻译贡献指南:帮助改进多语言支持
  • 科研绘图工具PaperXie:自动化解决学术图表痛点
  • 【JAVA毕设源码分享】基于Web的家庭设备维修服务系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 抖音下载器终极指南:三步搞定无水印高清视频批量下载
  • 终极入门教程:使用python-telegram开发Telegram机器人的完整步骤

日新闻

  • 力旷智能:伺服驱动系统在制药收瓶设备中的应用解析
  • 2026 网安入门避坑指南,零基础如何避开无效学习直接上手实战
  • 揭秘CFC项目:如何通过手机摄像头实现850kbps无网络文件传输

周新闻

  • 大连理工大学与东京大学联手打造的“主动型AI助手“
  • 170.2026年国家级科研瓶颈:超精密单点金刚石切削(SPDT)光学表面生成
  • SongBloom:革命性歌曲生成框架深度解析——如何通过交织自回归与扩散模型创作完整音乐

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号