用 Python 的 ESP8266+MicroPython 实现空调远程遥控

16 元买的 ESP8266 的开发板,安装上 MicroPython。加上一个红外线 LED,一个电阻,一个温度传感器 DTH22。然后设置成 WebSocket 服务器,就可以用手机查看家里的温度,控制空调的开关了。

遥控器的信号是使用 TSOP38238 解调,然后用 30 元的逻辑分析仪捕捉。

https://github.com/ruoyu0088/esp8266_ir


用 Python 的 ESP8266+MicroPython 实现空调远程遥控

24 回复

用 MicroPython 在 ESP8266 上实现空调遥控,核心是发射红外信号。你需要一个红外发射管(如 IR LED)和一个限流电阻(约 100-330Ω)。这里给你一个完整的示例,它使用 urequests 获取网络时间,并通过 ir_tx 模块发送 NEC 编码的红外信号(假设你的空调支持 NEC 协议)。

首先,确保你的 MicroPython 固件包含 ir_tx 模块。如果没有,你可能需要自己实现一个简单的红外发射函数。

import network
import urequests
import time
from machine import Pin
import ir_tx

# 配置 Wi-Fi
SSID = '你的WiFi名称'
PASSWORD = '你的WiFi密码'

def connect_wifi():
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print('正在连接WiFi...')
        wlan.connect(SSID, PASSWORD)
        while not wlan.isconnected():
            time.sleep(1)
    print('网络配置:', wlan.ifconfig())

# 初始化红外发射
ir_pin = Pin(14, Pin.OUT)  # 假设红外发射管接在 GPIO14
ir = ir_tx.IR(ir_pin, freq=38000)  # 38kHz 是红外载波频率

# 假设的空调遥控码(需要替换为你的空调实际码值)
# NEC 编码:地址码 + 地址反码 + 命令码 + 命令反码
AC_ON = 0x00FF00FF  # 示例开机码
AC_OFF = 0x00FF807F  # 示例关机码
AC_TEMP_24 = 0x00FF40BF  # 示例24度码

def send_ir_code(code):
    ir.transmit(code, 32)  # 发送32位NEC编码
    time.sleep(0.5)

# 主循环
connect_wifi()
print("准备发送红外信号...")

# 示例:发送开机并设置24度
send_ir_code(AC_ON)
time.sleep(2)
send_ir_code(AC_TEMP_24)

print("指令发送完成")

关键点:

  1. 你需要用真实的 Wi-Fi 名称和密码替换 SSIDPASSWORD
  2. 红外编码 AC_ON, AC_OFF 等需要替换成你空调的实际遥控码。获取这些码值通常需要用一个红外接收模块(如 VS1838B)先录制。
  3. 如果你的 MicroPython 没有 ir_tx 模块,你需要用 PWM 手动生成 38kHz 载波来模拟红外信号,这会更复杂。
  4. GPIO 引脚号(这里是 14)需要根据你的实际接线调整。

总结:先录下你空调的红外码,然后替换代码里的编码值。

可以接上 mqtt

感谢分享

曾经我也迷恋过根据天气自动调节温度,直到有一天我发现窗户没关。。。

我自己是用 nodemcu 固件,上传代码用 nodemcu-uploader,编辑用 vscode

遥控编码怎么得来的呢,想过用红外接收管录制,但是没有红外接收管

我是用 https://github.com/micropython/webrepl 上传代码,遥控代码是直接用逻辑分析仪获取解调波形。

请问用的是哪个逻辑分析仪?

建议换 ESP32,贵不了几块钱,,性能更高、内存更大,,可玩儿性更高

<iframe src="https://www.youtube.com/embed/hrjtAYMrxF4" class="embedded_video" allowfullscreen="" type="text/html" id="ytplayer" frameborder="0"></iframe>

https://github.com/adafruit/ampy 刚才看了视频()发现这个命令行工具更好用

这个工具使用串口通信,应该只能是在 main.py 程序结束,进入 REPL 时才能使用。而 webrepl 通过 websocket 通信上传文件,可以在主程序运行时上传下载文件。webrepl 也提供了命令行工具上传下载。 把自动开关窗也做上

问下,如果在路由器内网,如何访问 ESP8266 的 WebSocket 服务器?

小米有个空调伴侣很好用, 就是贵点儿

我的路由器可以设置端口映射,把 websocket 的端口,映射到内网的 esp8266 的 IP 上即可。

我想实现国内某个物联网平台 MQTT 客户端的授权过程,结果一堆加密的库不兼容😂

赞,学习了

关个窗帘可以搞,窗户的话成本就太大了

哈哈不错,最近正好有一个类似的项目,代码拿来学习了。

工科狗

了解,谢谢

大佬。求个联系方式。我卡在 8266 红外这好久了。

能留个联系方式吗?最近有个设计跟你差不多,大佬看到回复我一下

回到顶部