{"id":20607312,"url":"https://github.com/ccbp/orvibo-ct30w-esphome","last_synced_at":"2025-07-08T22:04:13.691Z","repository":{"id":262791898,"uuid":"888282275","full_name":"CCBP/ORVIBO-CT30W-ESPHome","owner":"CCBP","description":"基于 ORVIBO CT30W，通过修改固件的方式刷入 ESPHome，实现支持格力 Kelvinator 协议的红外遥控器，支持接入Home Assistant进行空调的远程控制。","archived":false,"fork":false,"pushed_at":"2024-11-17T07:01:01.000Z","size":856,"stargazers_count":10,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-09T13:11:54.890Z","etag":null,"topics":["ct30w","esp8266","esphome","homeassistant","ir","orvibo","wt8266"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CCBP.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-14T06:00:02.000Z","updated_at":"2025-01-11T09:15:06.000Z","dependencies_parsed_at":"2024-11-14T18:16:50.695Z","dependency_job_id":null,"html_url":"https://github.com/CCBP/ORVIBO-CT30W-ESPHome","commit_stats":null,"previous_names":["ccbp/orvibo-ct30w-esphome"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/CCBP/ORVIBO-CT30W-ESPHome","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CCBP%2FORVIBO-CT30W-ESPHome","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CCBP%2FORVIBO-CT30W-ESPHome/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CCBP%2FORVIBO-CT30W-ESPHome/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CCBP%2FORVIBO-CT30W-ESPHome/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CCBP","download_url":"https://codeload.github.com/CCBP/ORVIBO-CT30W-ESPHome/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CCBP%2FORVIBO-CT30W-ESPHome/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264357296,"owners_count":23595576,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ct30w","esp8266","esphome","homeassistant","ir","orvibo","wt8266"],"created_at":"2024-11-16T10:06:26.428Z","updated_at":"2025-07-08T22:04:13.671Z","avatar_url":"https://github.com/CCBP.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"![logo](./assets/logo.png)\n\n# 基于ORVIBO CT30W的ESPHome空调红外遥控器\n\n## 功能特性\n\n本项目基于ORVIBO CT30W，通过修改固件的方式刷入ESPHome，实现支持格力(Gree)`Kelvinator`协议的红外遥控器，支持如下功能：\n\n- 作为红外遥控空调\n    - 开关空调\n    - 定时关机\n    - 模式选择（自动、制冷、干燥、通风、制热）\n    - 温度调整（16℃~25℃）\n    - 风速调整（1~5）\n    - 水平扫风\n    - 垂直扫风（固定位置以及自动扫动）\n    - 静音模式\n    - 强力模式\n    - 灯光开关\n    - 离子过滤\n    - XFan模式\n- 配置断电保存\n- 支持红外接收\n- 具有系统状态指示灯\n- 提供Web UI与接入Home Assistant以及其他ESPHome所支持的功能\n\n其中红外接收功能主要是用来实现学码功能，使用此功能首先需要打开Web UI，然后**按住**设备边缘的按键，用其他的红外遥控器对准设备按下想要学码的按键，这样就可以在Web UI的日志中看到接收到的数据，之后如何将获取到的红外数据应用到设备中请参考[这个文档](https://github.com/crankyoldgit/IRremoteESP8266/wiki/Adding-support-for-a-new-AC-protocol#a-note-on-collecting-data)自行尝试。\n\n另外对于系统状态指示灯关联了所有ESPHome组件，可以指示设备的状态，灯光的含义如下：\n\n- 当警告处于活动状态时，缓慢闪烁（大约每秒一次）；\n- 当出现错误时，快速闪烁（每秒多次）；\n- 其他情况保持关闭。\n\n## Web UI\n\n![Web UI](./assets/web-ui.png)\n\n在设备成功启动并接入WiFi后，在浏览器中打开`http://\u003cIP Address\u003e`即可访问Web UI，在上图的`Sensor and Control`面板中即可实现对空调的红外遥控。\n\n## 如何使用\n\n1. 参照[官方文档](https://esphome.io/guides/installing_esphome)完成ESPHome的安装；\n2. 将此仓库拉取到本地：\n\n```\ngit clone https://github.com/CCBP/ORVIBO-CT30W-ESPHome.git\n```\n\n3. 打开配置文件`ir-controller.yaml`，根据实际情况修改下方配置：\n\n```\n# Enable Home Assistant API\napi:\n  encryption:\n    key: \u003cyour key\u003e\n\nota:\n  - platform: esphome\n    password: \u003cyour password\u003e\n\nwifi:\n  ssid: \u003cyour SSID\u003e\n  password: \u003cyour WiFi password\u003e\n\n  # Enable fallback hotspot (captive portal) in case wifi connection fails\n  ap:\n    ssid: \"Ir-Controller Fallback Hotspot\"\n    password: \u003cyour AP password\u003e\n```\n\n其中`api.encryption.key`的配置可以使用[官方文档](https://esphome.io/components/api.html#configuration-variables)中所给出随机生成的密钥；`ota.password`与`wifi.ap.password`可以任意配置一个自己喜欢的密码；`wifi.ssid`与`wifi.password`根据实际情况填写即可。\n\n4. 生成工程并尝试编译\n\n```\nesphome compile ir-controller.yaml\n```\n\n:warning: **注意**：这次编译由于缺少头文件将会**报错**属于正常情况。\n\n5. 添加头文件\n\n为了实现红外收发功能，需要包含`IRremoteESP8266`库中的一些头文件`IRremoteESP8266.h`、`ir_Kelvinator.h`、`IRsend.h`、`IRrecv.h`和`IRac.h`，为此修改`ir-controller.yaml`如下（头文件所在路径可能需要根据实际情况修改）：\n\n```\nesphome:\n  name: ir-controller\n  libraries:\n    - IRremoteESP8266\n  includes:\n    - .esphome/build/ir-controller/.piolibdeps/ir-controller/IRremoteESP8266/src/IRremoteESP8266.h\n    - .esphome/build/ir-controller/.piolibdeps/ir-controller/IRremoteESP8266/src/ir_Kelvinator.h\n    - .esphome/build/ir-controller/.piolibdeps/ir-controller/IRremoteESP8266/src/IRsend.h\n    - .esphome/build/ir-controller/.piolibdeps/ir-controller/IRremoteESP8266/src/IRrecv.h\n    - .esphome/build/ir-controller/.piolibdeps/ir-controller/IRremoteESP8266/src/IRac.h\n```\n\n由于ESPHome在生成cpp代码时会将`includes`组件放在`globals`组件之后，这导致声明在`globals`中`IRremoteESP5266`的自定义变量将会缺失，因此需要手动修改`.esphome/build/ir-controller/src/main.cpp`，补充头文件在`main.cpp`的**最开始**（注意要**放在自动生成代码之外**）。\n\n```\n#include \"ir_Kelvinator.h\"\n#include \"IRrecv.h\"\n// Auto generated code by esphome\n// ========== AUTO GENERATED INCLUDE BLOCK BEGIN ===========\n```\n\n:question: 对于头文件的操作极为别扭，但我一番搜索下来并未发现优雅的解决办法，如果谁有更好的解决方案还望指教~\n\n6. 连接USB转TTL串口模块\n\n将USB转TTL串口模块**选择为3.3V模式**，并按照如下关系进行连接（使用杜邦线即可，可能需要焊接操作）：\n\n| USB转TTL串口模块 | ORVIBO CT30W |\n|------------------|--------------|\n|TXD               |RX            |\n|RXD               |TX            |\n|GND               |GND           |\n\n之后将USB转TTL串口模块连接到PC上即可（如果需要安装驱动请自行搜索学习）。\n\n7. 编译并开始上传：\n\n```\nesphome run ir-controller.yaml\n```\n\n**注意**：在编译完成后选择通过串口上传到设备中前，需**将`GPIO0`在拉低情况下上电以进入刷机模式**。\n\n8. 访问WebUI\n\n待完成编译并上传到设备中后，根据提示将`RST`引脚拉低完成复位动作即可开始运行我们编写的程序，随后稍待片刻便可看到日志输出。\n\n在日志中找到`wifi`组件的如下输出：\n\n```\n[14:26:55][C][wifi:600]: WiFi:\n[14:26:55][C][wifi:428]:   Local MAC: \u003clocal MAC address\u003e\n[14:26:55][C][wifi:433]:   SSID: \u003cSSID\u003e\n[14:26:55][C][wifi:436]:   IP Address: 192.168.1.125\n[14:26:55][C][wifi:439]:   BSSID: \u003cAP MAC address\u003e\n[14:26:55][C][wifi:441]:   Hostname: 'ir-controller'\n[14:26:55][C][wifi:443]:   Signal strength: -49 dB ▂▄▆█\n[14:26:55][C][wifi:447]:   Channel: 1\n[14:26:55][C][wifi:448]:   Subnet: 255.255.255.0\n[14:26:55][C][wifi:449]:   Gateway: 192.168.1.1\n[14:26:55][C][wifi:450]:   DNS1: 192.168.1.1\n[14:26:55][C][wifi:451]:   DNS2: 0.0.0.0\n```\n\n其中`IP Address`便是设备的IP地址，之后便可访问`http://\u003cIP Address\u003e`访问Web UI以控制设备。\n\n## 自定义\n\n本项目基于ORVIBO CT30W开发，因此所用引脚均根据CT30W中的硬件连接所定，但理论上只要是ESP8266都可以使用此项目。并且由于我家中的设备是格力的空调设备，所以本项目仅适配了其对应的`Kelvinator`协议，但理论上`IRremoteESP8266`库中列出[支持的IR协议](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/SupportedProtocols.md)都是可以修改此项目进行适配的，但是因为IR协议众多并且我也没有对应的设备测试，所以这里不再进行描述，如果有问题欢迎提issue与我交流。\n\n### 引脚修改\n\n本项目所使用的4个引脚的功能机修改位置如下：\n\n- `GPIO14`：输出，用于控制红外发射二极管，即实现红外遥控的功能，修改`globals`组件`id`为`ir_send_pin`的`initial_value`的值即可；\n- `GPIO5`：输入，用于读取红外接收二极管的电平，实现学码的功能，修改`globals`组件`id`为`ir_recv_pin`的`initial_value`的值即可；\n- `GPIO4`：输入，用于读取按键电平，仅当按键按下时才开启红外接收功能，修改`binary_sensor`组件`pin`中的`number`的值即可；\n- `GPIO15`：输出，用于控制LED状态，指示当前系统状态，修改`status_led`组件的`pin`的值即可。\n\n# 参考\n\n- https://github.com/crankyoldgit/IRremoteESP8266\n- https://esphome.io/guides/getting_started_command_line\n- https://www.bilibili.com/opus/967982171394408465?jump_opus=1\n- https://github.com/web1n/ORVIBO-CT30W\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fccbp%2Forvibo-ct30w-esphome","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fccbp%2Forvibo-ct30w-esphome","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fccbp%2Forvibo-ct30w-esphome/lists"}