TMS320C2xx DSP架构精解:指令、寻址与外设实战指南
2026/7/26 19:03:10
python# 智能风扇基础温度控制代码# 使用 MicroPython 编写,适用于 ESP8266 或 Raspberry Pi Picoimport machineimport dhtimport time# 初始化温湿度传感器(DHT11 连接到 GPIO 2)sensor = dht.DHT11(machine.Pin(2))# 初始化风扇控制引脚(PWM 控制速度)fan_pwm = machine.PWM(machine.Pin(5))fan_pwm.freq(1000) # 设置 PWM 频率为 1kHz# 温度阈值设置TEMP_MIN = 22 # 最低温度阈值(摄氏度),低于此值风扇停止TEMP_MAX = 30 # 最高温度阈值,达到此值风扇全速运转def calculate_speed(temperature): """根据温度计算风扇速度(0-1023)""" if temperature < TEMP_MIN: return 0 # 温度太低,关闭风扇 elif temperature > TEMP_MAX: return 1023 # 温度太高,全速运转 else: # 线性插值:温度在 TEMP_MIN 和 TEMP_MAX 之间 ratio = (temperature - TEMP_MIN) / (TEMP_MAX - TEMP_MIN) return int(ratio * 1023)def main_loop(): """主循环:读取温度并调节风扇""" while True: try: sensor.measure() temp = sensor.temperature() speed = calculate_speed(temp) # 设置风扇速度 fan_pwm.duty(speed) print(f"当前温度: {temp}°C, 风扇速度: {speed}") # 每 2 秒检测一次 time.sleep(2) except OSError as e: print("读取传感器失败,重试中...") time.sleep(1)if __name__ == "__main__": main_loop()这段代码的逻辑很简单:- 每隔 2 秒读取一次温度- 温度低于 22°C 时,风扇不转(节能)- 温度在 22-30°C 之间时,速度线性增加- 温度超过 30°C 时,风扇全速运转### 2. 增加手动控制和定时功能上面的版本只有自动模式,但我们还需要手动控制和定时功能。下面这段代码增加了这两个功能:python# 智能风扇完整版:自动控制 + 手动控制 + 定时功能# 使用 MicroPython 编写import machineimport dhtimport timeimport _thread # 使用多线程处理定时任务# 初始化硬件sensor = dht.DHT11(machine.Pin(2))fan_pwm = machine.PWM(machine.Pin(5))fan_pwm.freq(1000)# 全局变量current_mode = "auto" # 当前模式:auto/manualmanual_speed = 0 # 手动模式下的速度timer_remaining = 0 # 定时剩余时间(秒)fan_running = True # 风扇是否运行def calculate_auto_speed(temperature): """自动模式下的速度计算""" TEMP_MIN = 22 TEMP_MAX = 30 if temperature < TEMP_MIN: return 0 elif temperature > TEMP_MAX: return 1023 else: ratio = (temperature - TEMP_MIN) / (TEMP_MAX - TEMP_MIN) return int(ratio * 1023)def timer_thread(): """定时器线程:每秒检查一次定时时间""" global timer_remaining, fan_running while True: if timer_remaining > 0: timer_remaining -= 1 print(f"定时剩余: {timer_remaining} 秒") if timer_remaining == 0: fan_running = False fan_pwm.duty(0) print("定时结束,风扇已关闭") time.sleep(1)def main_loop(): """主循环:控制风扇运行""" global current_mode, manual_speed, fan_running # 启动定时器线程 _thread.start_new_thread(timer_thread, ()) while True: try: # 读取温度 sensor.measure() temp = sensor.temperature() # 根据模式设置速度 if current_mode == "auto": target_speed = calculate_auto_speed(temp) print(f"自动模式 - 温度: {temp}°C, 目标速度: {target_speed}") else: target_speed = manual_speed print(f"手动模式 - 速度: {manual_speed}") # 如果风扇在运行且未触发定时停止,则设置速度 if fan_running: fan_pwm.duty(target_speed) time.sleep(2) except OSError as e: print("传感器错误,保持当前状态") time.sleep(1)def set_manual_speed(speed): """设置手动模式速度(0-1023)""" global current_mode, manual_speed current_mode = "manual" manual_speed = max(0, min(1023, speed)) print(f"切换到手动模式,速度设置为: {manual_speed}")def set_timer(seconds): """设置定时关机(秒)""" global timer_remaining timer_remaining = seconds print(f"定时器已设置: {seconds} 秒后关机")def switch_to_auto(): """切换回自动模式""" global current_mode current_mode = "auto" print("已切换到自动模式")if __name__ == "__main__": # 示例操作 print("智能风扇启动...") switch_to_auto() # 模拟用户操作(实际中可通过按键或网络接口调用) # 假设用户想设置手动模式,速度为 500,并定时 30 分钟 # set_manual_speed(500) # set_timer(1800) # 30 分钟 = 1800 秒 main_loop()这段代码增加了三个重要功能:-模式切换:通过current_mode变量在自动和手动之间切换-定时关机:使用独立的线程来倒计时,不影响主循环-手动速度设置:用户可以直接指定 0-1023 之间的速度值## 如何扩展到远程控制?如果你想让风扇支持手机控制,可以添加 ESP8266 WiFi 模块。基本思路是:1. 在 Arduino 上运行一个简单的 Web 服务器2. 通过 HTTP GET/POST 请求来设置模式和速度3. 手机浏览器或 App 发送请求即可控制核心代码片段如下(使用 ESP8266):python# 简单的 Web 控制接口import networkimport socketdef start_web_server(): """启动 Web 服务器""" # 连接 WiFi wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect("你的WiFi名称", "密码") # 创建 socket 服务器 addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1] s = socket.socket() s.bind(addr) s.listen(5) while True: conn, addr = s.accept() request = conn.recv(1024) # 解析请求中的命令 if b'/speed?value=500' in request: set_manual_speed(500) elif b'/timer?seconds=1800' in request: set_timer(1800) # 返回控制页面 response = "OK" conn.send(response) conn.close()这样,你只需要在浏览器中输入http://风扇IP地址/speed?value=500就能控制速度了。## 实际使用体验做好之后,我把风扇放在她的书桌上。效果非常棒:-白天工作:温度 26°C 左右,风扇自动中速运转,凉快又不吵-午休时间:她手动设置成低速,并定时 30 分钟,睡着了也不用担心-下午高温:温度升到 30°C 以上,风扇自动全速运转-晚上:温度降下来,风扇自动停止,省电又安静她再也不用频繁调节风扇了,而且再也没有因为忘记关风扇而感冒。## 总结这个智能风扇项目虽然简单,但融合了传感器读取、PWM 控制、多线程处理和网络通信等多个技术点。通过这个项目,你可以学到:1.传感器集成:如何读取 DHT11 的数据并处理异常2.PWM 调速:通过调节占空比来控制直流电机速度3.状态机设计:自动/手动模式的切换逻辑4.多任务处理:使用线程处理定时任务5.网络控制:扩展 WiFi 模块实现远程操作最重要的是,这个项目真正解决了实际生活中的问题——让女朋友在炎热的夏天里能享受智能化的清凉。如果你也想给心爱的人做点什么,不妨从这个小风扇开始吧!记住:技术不仅要酷,更要温暖人心。