You are on page 1of 5

instructables

How to Use ESP8266 With PCF8574 - 4 Input and 4 Output

by adachsoft

How to increase the number of I/O pins on the Arduino IDE. NodeMCU, ESP8266 is a very good
ESP8266 using the PCF8574. This example will use solution for IOT (Internet of things).
four buttons (as inputs) and four relays (as outputs)
and only one PCF8574 chip. The four pins of the This article can also see here:
PCF8574 chip will be set as inputs and four pins as
outputs. In this example I will use NodeMCU but it How to use ESP8266 with PCF8574 - 4 input and 4
works well on ESP8266-01. In this tutorial I will also output
show you, how to use jQuery AJAX with ESP8266.
The software for the ESP8266 was written in the

Step 1: Components

ESP8266
Relay Module 250V 10A
Button switch
Some wires
PCF8574
Resistors 10k ohm

Step 2: Schematic
How to Use ESP8266 With PCF8574 - 4 Input and 4 Output: Page 1
Step 3: Software

To use PCF8574 on ESP8266 I use this library pcf8574_esp.


This number "0b00111000" is the address of the PCF8574 expander.
The last 3bit (0b00111000) can be set using address pins A0, A1, A2. Thanks to which
we can connect more expanders to the same I2C bus. In this tutorial, I use an interrupt to
notify the ESP8266 microcontroller that it has made a change in the input state.
PIN_INT defines interrupt pin D5.
PCF857x pcf8574(0b00111000, &Wire);
#define PIN_INT D5
#define PIN_SDA D1
#define PIN_SCL D2

Configure WIFI connection and HTTP server. Before you upload the software to ESP8266 setup
your WiFi connection. The HTTP server allows us to control relayers using a web browser.
//WIFI i server HTTP
ESP8266WebServer server(80);
#define WIFI_SSID ""
#define WIFI_PASSWORD ""
#define HOST_NAME "onoff"

In this code fragment we setup the i2c bus and our PCF8574 I/O expander. Using this "pcf8574.begin (0xF0)"
we set 4 pins in high as inputs and 4 pins in low as outputs.
Wire.pins(PIN_SDA, PIN_SCL);//SDA - D1, SCL - D2
Wire.begin();

pinMode(PIN_INT, INPUT_PULLUP);

pcf8574.begin( 0xF0 ); //4 pin input, 4 pin output


pcf8574.resetInterruptPin();

This part of the code is responsible for handling the PCF8574 interrupt. If PIN_INT is low,
our expander notifies us of a change in input. After reading the pin values from the expander,
PIN_INT will return to high.

How to Use ESP8266 With PCF8574 - 4 Input and 4 Output: Page 2


if( digitalRead(PIN_INT)==LOW ){
delay(50);
byte b = pcf8574.read8();
Serial.println( "INT: " + String(b));

byte keys = ((~b) >> 4) & 0x0F;

if( CheckKey(keys, 0) ){
Serial.println( "KEY 0");
SW_toggle(0);
}

if( CheckKey(keys, 1) ){
Serial.println( "KEY 1");
SW_toggle(1);
}

if( CheckKey(keys, 2) ){
Serial.println( "KEY 2");
SW_toggle(2);
}

if( CheckKey(keys, 3) ){
Serial.println( "KEY 3");
SW_toggle(3);
}
}

Download source code: ESP8266_PCF8574.ino

Step 4: ESP8266 Firmware Upload With Arduino IDE

1. Select your board Tools -> Board -> NodeMCU 1.0(ESP-12E Module)
2. Press the upload button
3. After uploading the software in Serial Monitor you can see the IP of your ESP8266.

1. Select your board Tools -> Board -> NodeMCU 1.0(ESP-12E Module) 1. Press the upload button

How to Use ESP8266 With PCF8574 - 4 Input and 4 Output: Page 3


1

1. After uploading the software in Serial Monitor you can see the IP of your
ESP8266.

Step 5: The End

Take IP from Serial Monitor and type in web browser. You will see the control panel of the ESP8266, thanks to
which you can control the relays. You can also control the state of the relays using the buttons. If you turn on the
relay with the physical button, the state of the relay will change automatically. This is possible thanks to the use of
jquery ajax. The below piece of code that is responsible for it.

//BEGIN: AJAX ------------------------------------------


html += "<script src='https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js'></script>\r\n";
html += "<script>\r\n";
html += "function ajax_read(){\r\n";
html += " $.ajax({\r\n";
html += " url: 'state', \r\n";
html += " success: function(result){\r\n";
html += " $('#res').html(result);\r\n";
html += " }\r\n";
html += " }\r\n";
html += " );\r\n";
html += "}\r\n";

html += "function check() {\r\n";


html += " ajax_read();\r\n";
html += " setTimeout(function(){ check(); }, 1000);\r\n";
html += "}\r\n";
html += "check();\r\n";

html += "</script>\r\n";
//END: AJAX ------------------------------------------

How to Use ESP8266 With PCF8574 - 4 Input and 4 Output: Page 4


How to Use ESP8266 With PCF8574 - 4 Input and 4 Output: Page 5

You might also like