How to increase the number of I/O pins on the ESP8266 using the PCF8574. This example will use four buttons (as inputs) and four relays (as outputs) and only one PCF8574 chip. The four pins of the PCF8574 chip will be set as inputs and four pins as outputs. In this example I will use NodeMCU but it works well on ESP8266-01. In this tutorial I will also show you, how to use jQuery AJAX with ESP8266. The software for the ESP8266 was written in the Arduino IDE. NodeMCU, ESP8266 is a very good solution for IOT (Internet of things).
This article can also see here:
PCF857x pcf8574(0b00111000, &Wire); #define PIN_INT D5 #define PIN_SDA D1 #define PIN_SCL D2Configure WIFI connection and HTTP server. Before you upload the software to ESP8266 setup
//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)"
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,
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
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 ------------------------------------------