WiFi Daikin ARC433 Remote

Introduction

I have an old Daikin Inverter AC unit in my house, which is controlled manually with a ARC433 infrared remote. The idea behind this project is to make a device that can:

  • Control the AC unit both manually and according to a script
  • Connect to a WiFi network (or make its own access point)
  • Operate even if the network goes down

Note that there are many variants of the ARC433 remote, this project only implements the features that are present in mine and those that could be implemented safely without testing.

Device

Hardware

The device is based on a Wemos D1 Mini, which is an inexpensive MCU with integrated WiFi, a fairly powerful processor and enough memory to host a web server. It is based on the ESP8266 platform.

Connected to the MCU we have a Bosch BME280 sensor, and a DS3231 RTC, both connected via I2C. We also have a 940nm infrared emitter and a blue status LED connected to 2 digital pins.

Here's a schematic of the circuit: Schematic

I recommend using a half-size breadboard to build the device, using hot-melt glue to hold it in place, and keeping the BME280 sensor as far away from the processor as possible for better accuracy.

The device on a breadboard

Software

The software on the device has the following functions:

  • Connect to a WiFi network or create an access point
  • Host a basic web server with a Web UI
  • Periodically update the sensors
  • Periodically run a customizable LUA script
  • Receive and execute manual commands via the Web UI

Note: since the device is intended for home usage and no sensitive data is transmitted, we assume that the network is trusted, the device has no security whatsoever.

To develop this software, the following libraries were used:

  • IRremoteESP8266: this excellent library gives us a "virtual" ARC433 remote that we can use to send commands via the infrared sensor. It is based on an enormous work of reverse engineering and supports many non-standard infrared remotes
  • DS3231: a driver library for the DS3231 RTC
  • Adafruit BME280 Library: a driver library for the BME280 sensor
  • ESPAsyncWebServer: possibly one of the buggiest HTTP servers I've ever seen in my life
  • ESP8266-Arduino-Lua: a LUA 5.4 interpreter for the ESP8266 platform. I made a small change to this library to remove access to functions like pinMode, digitalWrite, etc. so that user scripts cannot cause malfunctions in the device

Note: the exact versions of the libraries used in my prototype are included in with the project. You can put them in your Arduino/libraries folder if you want.

Setting up the device

After building the device, we need to load the software and configure it.

Loading the software on the device

To load the software we need:

Now we can load the espac project in Arduino IDE and start uploading:

  • Under Tools, select:
    • Board: LOLIN Wemos D1 R2 & Mini
    • Flash size: 4MB (FS: 1MB)
    • SSL support: basic
    • IwIP variant: v2 lower memory
  • Run Tools > ESP8266 Sketch Data Upload and wait
  • Upload the sketch and wait

The device will now reboot into our program. If the status LED stays on after the device is flashed, check the wiring to the sensors.

Configuring the device

At this point the device will boot into access point mode. You will see a WiFi network called ESPAC_AP, connect to it using the password ESP.

Open a web browser and go to http://192.168.4.1 and select Network configuration. Here, you can connect the device to your WiFi network:

  • SSID: the name of your WiFi network
  • PSK: your WiFi password
  • Hostname: the name that the device will have inside your network (keep ESPAC if unsure)

Network configuration

After clicking apply, the device will turn off the access point and attempt to connect to your network for 5 minutes. If it fails, it will turn on the access point again. Note that this timeout is only triggered if the device was never able to connect, if your network goes down temporarily, it will attempt to reconnect indefinitely unless the device is rebooted, in which case, this 5 minutes timeout will apply.

Now you can reconnect your PC to your WiFi network and you should be able to reach the device by going to http://ESPAC (replace ESPAC with your hostname if you changed it) and you'll be back in the device settings.

Manual mode

After flashing, the device will be set to manual mode, where it can be used to control the AC unit as you would with its remote.

Manual mode

Auto mode

In this mode, the device can be programmed with a LUA script that is run every 60 seconds. There are many APIs that can be used in this script, allowing access to the virtual remote, the sensors and the RTC. A quick reference guide is provided on the page.

Auto mode

Here's an example script that you can try:

blink(100);
if getApparentTemperature()>=27.5 then
    turnOn();
    coolMode();
    enablePowerful();
elseif getApparentTemperature()>24.5 and getApparentTemperature()<26 then
    turnOn();
    coolMode();
    disablePowerful();
    if getApparentTemperature()>25.5 then
        disableComfort();
        setFanSpeed(1);
    elseif getApparentTemperature()<25.25 then
        enableComfort();
    end
elseif getApparentTemperature()>22 and getApparentTemperature()<24 then
    turnOff();
elseif getApparentTemperature()<=20 then
    turnOn();
    heatMode();
    setFanSpeed(1);
end

Case

If you have a 3D printer, you can print a nice case for it like I did, the models are included in the project.

Device

Downloads

Project (code, schematic, case models): Download from here | Browse GitHub repository

Additional documentation (in Italian because it was a university project): Download from here

The project is licensed under the GNU GPL v3 license

Share this article

Comments