admin管理员组

文章数量:1516870

1. 概述

本文介绍如何使用 ESP8266 控制风扇转速,并通过 Web 服务器调整风扇速度及获取当前转速。该方案适用于支持 PWM 调速的 4Pin 风扇。

2. 所需工具

硬件:

  • ESP8266 开发板(NodeMCU / Wemos D1 Mini)
  • 4Pin PWM 风扇
  • 大 4Pin 转小 4Pin 线(2 个小 4Pin 12V 接口,2 个小 4Pin 5V 接口,每个小4pin有2个引脚,2个空的,空的可以插入杜邦线引脚,某宝几块钱,如果没有这线也可以其他方法实现供电)
  • 杜邦线
  • 电源(12V,适配风扇功率)

软件:

  • Arduino IDE(安装 ESP8266 开发板库)
  • Postman 或浏览器(用于发送 HTTP 请求)

3. 连接示意图

风扇引脚说明

pwm风扇 功能 连接
12V 供电 小4pin 12v
GND 小4pin GND
PWM 调速 esp8266 D1
绿 TACHO 反馈 esp8266 D2

ESP8266 供电

线材 功能 连接
5V(红) 供电 小 4Pin 5V -> ESP8266 VIN
GND(黑) 接地 小 4Pin GND -> ESP8266 GND
D1 PWM 调速 接风扇
D2 TACHO 反馈 接风扇

4. 代码实现

代码功能

  • 连接 WiFi
  • 通过 HTTP 请求调整风扇转速(PWM 输出)
  • 读取风扇 TACHO 信号,计算 RPM
  • 通过 Web API 获取当前风扇转速
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
const char* ssid = "yang1234"; // wifi名字
const char* password = "y123456789"; // wifi密码
const int pwmPin = 5;    // D1, 控制风扇速度
const int tachPin = 4;   // D2, 读取风扇转速反馈信号
ESP8266WebServer server(80);
volatile int pulseCount = 0;
unsigned long lastTime = 0;
int fanSpeed = 255; // 默认全速
void IRAM_ATTR countPulse() {
  pulseCount++;
}
int getFanRPM() {
  unsigned long elapsedTime = millis() - lastTime;
  int rpm = (pulseCount * 30) / (elapsedTime / 1000); // 计算 RPM
  pulseCount = 0;
  lastTime = millis();
  return rpm;
}
void handleSetSpeed() {
  if (server.hasArg("speed")) {
    fanSpeed = server.arg("speed").toInt();
    fanSpeed = constrain(fanSpeed, 0, 255);
    analogWrite(pwmPin, fanSpeed);
    server.send(200, "text/plain", "Speed set to(0-255) " + String(fanSpeed));
  } else {
    server.send(400, "text/plain", "Missing 'speed' parameter");
  }
}
void handleGetRPM() {
  int rpm = getFanRPM();
  server.send(200, "text/plain", "Current RPM: " + String(rpm));
}
void setup() {
  Serial.begin(115200);
  pinMode(pwmPin, OUTPUT);
  pinMode(tachPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(tachPin), countPulse, FALLING);
  analogWrite(pwmPin, fanSpeed);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nConnected to WiFi");
  Serial.println(WiFi.localIP());
  server.on("/setSpeed", HTTP_GET, handleSetSpeed);
  server.on("/getRPM", HTTP_GET, handleGetRPM);
  server.begin();
}
void loop() {
  server.handleClient();
}

5. 使用方法

1️⃣ 连接 ESP8266

  • 上电后,ESP8266 连接 yang1234 WiFi,并获取 IP 地址(串口监视器查看)。
  • 假设 IP 地址为 192.168.31.100(可以通过路由器查看esp8266的ip)

2️⃣ 设置风扇速度

在浏览器或 Postman 访问:

  • speed=0 :最低速度(有些风扇会停止)
  • speed=128 :50% 速度
  • speed=255 :100% 速度

3️⃣ 获取风扇当前转速

在浏览器或 Postman 访问:

返回:

Current RPM: 1200

6. 说明

  • analogWrite(pwmPin, speed); 控制风扇转速
  • attachInterrupt(digitalPinToInterrupt(tachPin), countPulse, FALLING); 监听 TACHO 信号, 有风扇差异,计算rpm可能不一样,根据情况修改
  • getFanRPM() 计算风扇 RPM

7. 结论

本方案通过 ESP8266 控制风扇 PWM 实现调速,并获取风扇实时转速数据。用户可以通过 Web API 远程控制风扇运行状态,适用于 DIY 智能风扇控制系统。

最后上图

本文标签: 连接速度控制风扇

更多相关文章

Windows 检测到 IP 冲突?轻松搞定!

1月前

1. 重启路由器: - 首先,最简单的解决方法是重启您的路由器或网络设备。这样可以刷新DHCP服务器的租用列表,并重新分配IP地址给连接的设备。 2. 手动设置静态IP地址: - 如果重启路由器后问题依然存在,

从零开始学习:利用PPPoeconf实现宽带的稳定连接

1月前

一、检测pppoeconf软件是否安装 $ dpkg -s pppoeconf 出现如下说明已安装: {{Package: pppoeconf St

从零开始:telnet命令入门及高级使用指南

1月前

本文主要讲解telnet命令在日常网络分析中的使用前言 在日常的工作和网络调试中,经常需要探测当前主机是否能够连接另外一台主机的相关端口,这时候我们就可以使用telnet命令来进行测试连接是否畅通,这篇文章在此基

手把手教你:如何通过ADB实现无绳操控,畅享自由玩乐

1月前

前言:除了USB方式连接Android终端设备,还有一种方法是通过adb connect命令利用TCPIP协议来连接。毕竟,PC端的USB口也是有限的。 1.USB 连接手机 确保 adb

无需线缆的便捷:ADB无线连接操作手册

1月前

无线连接除了可以通过 USB 连接设备与电脑来使用 adb,也可以通过无线连接——虽然连接过程中也有需要使用 USB 的步骤,但是连接成功之后你的设备就可以在一定范围内摆脱 USB 连接线的限制啦! 操

新手指南:从零开始,打造私人WiFi信号,畅游互联网世界!

1月前

过年前回家的时候, 网络是好好的, 结果过年来, 网络就连接不上了。 我的网络连接是这样的, 我出钱, 电信人员给我分配了一个账号x和密码y, 并给我一根从远处牵过来的网线, 该网线通过无线路由器, 在无线路由器上再设置一个账

MVC实战:通过HTTPS保护应用与授权过程解析

1月前

1 using System.Web.Mvc;23 namespace Snowdream.Demo.RequireHttps4 {5     public class RequireH

从HTTP到HTTPS:MVC项目的安全转型之路

1月前

1 using System.Web.Mvc;23 namespace Snowdream.Demo.RequireHttps4 {5     public class RequireH

SATA世界大揭秘:从Raid到AHCI再到IDE,让你明白你的硬盘怎么转!

1月前

今天在一台计算机上插上CF卡,不能工作,CF卡灯不亮。 进BIOS,SATA mode从IDE改成AHCI就好了。 首先说一下,关于主板的SATA接口的工作模式,BIOS中常见的选项有以下三种:RAID(部分技嘉主板叫

“打不出字的键盘?快速搞定,恢复输入流畅体验。”

1月前

电脑键盘打不了字,这是我们电脑使用过程中,偶尔会遇到的电脑故障问题。一般来说,电脑键盘打不出字,可能是硬件故障、驱动问题或系统设置错误等多种原因引起。本文将详细介绍一些常见的原因和解决方法,帮助用户恢复正常的键盘输入功能。 一

全新宽带自动连接脚本,快速稳定上网不是梦

1月前

zjnu宽带自动连接 import subprocessimport timeimport osfrom datetime import datetimeimport pyautoguiimport requestsde

告别手动操作!教你如何让Windows 10在开机时自动连接宽带

1月前

工具原料 Windows 10 专业版。 方法步骤 用“如何在 Windows 10 里创建、断开宽带连接”的方法,建立一个宽带连接,确保其能够正常连接。 在“开始”按钮上右键—

“笔记本连局域网OK,一接TP-Link立马受限制或无连接?这啥情况?”

1月前

一> 问题环境:1.TP-Link路由连接无线局域网。 2.使用MAC地址绑定,自动获取IP 3.系统: WINXP(sp2)二>问题:开机后自动连接无线局域网,结果提示&qu

告别漫长的等待:5个简单步骤加速电脑启动

1月前

有些朋友觉得,电脑怎么开机越来越慢了,刚用的时候用二十秒就完成了开机,到后面都要一两分钟擦能开机,这是怎么回事呢?最近有位朋友发现电脑开机启动慢,有点无法忍受。那么电脑开机慢怎么解决呢?下面,小编就把电脑开机慢的解决方法分享给大家。

PDCN路由器小白也能上手:简单易懂登录地址解析

1月前

注:使用期间千万不要恢复出厂! 切记。 麻烦评价不要写敏感词,非常感谢哈!路由器初始无线 WIFI名称 : PDCN

小白也能轻松上手:PDCN路由器安装教程与登录指引

1月前

注:使用期间千万不要恢复出厂! 切记。 麻烦评价不要写敏感词,非常感谢哈!路由器初始无线 WIFI名称 : PDCN

卡顿不再是问题,轻松解决电脑开机缓慢烦恼!

1月前

有些朋友觉得,电脑怎么开机越来越慢了,刚用的时候用二十秒就完成了开机,到后面都要一两分钟擦能开机,这是怎么回事呢?最近有位朋友发现电脑开机启动慢,有点无法忍受。那么电脑开机慢怎么解决呢?下面,小编就把电脑开机慢的解决方法分享给大家。

手机上的谷歌浏览器断网了?修复指南来啦!"

1月前

不知道用户在使用的时候有没有遇到无法连接网络的问题,今天小编就会与大家一起来分享一下,在使用谷歌浏览器时,如果出现无网络连接的问题时,要如何解决,首先用户可以检查一下自己的网络情况,如果这些都没有问题,那么就可以进行其他的操作,想其他

宽带连接断了?快速解决651错误代码,让你的网络瞬间回春!

23天前

转载自: 今天遇到了这种问题很是头疼,我自己使用最后一种方法解决的,也就是启动服务。 以下是转载的原文:如果你的win7拨号的时候遇到了651错误,最好能够换一个vista或者xp系统再拨号看看是

Win10键盘操作提速术:轻松几步优化键盘响应

22天前

细心的用户发现win10 64位系统键盘时反应很慢,每次都要等上好几秒才有响应,降低工作效率,这是怎么回事?可能是键盘设置的灵敏度问题。 那么win10怎么加快键盘反应速度?只要调节一下键盘灵敏度即可。win10怎

发表评论

全部评论 0
暂无评论