It's another example to setup a simple HTTP-like server, to receive request from client, output PWM, to control color/brightness of RGB LED.
NodeMCU_WiFiWebServer_RGB.ino
/*
* This sketch run on NodeMCU (ESP8266),
* demonstrates how to set up a simple HTTP-like server.
* The server will set a GPIO pins depending on the request,
* to control the brightness of RGB LED connected to:
* D0 : BLUE
* D1 : GREEN
* D2 : RED
*
* http://server_ip/rgb/rrggbb/
* where rr is the value set RED
* where gg is the value set GREEN
* where bb is the value set BLUE
* then terminate with '/'
* server_ip is the IP address of the NodeMCU, will be
* printed to Serial when the module is connected.
*/
#include <ESP8266WiFi.h>
const char* ssid = "Xtation";
const char* password = "password";
int ledB = D0;
int ledG = D1;
int ledR = D2;
// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);
void setup() {
Serial.begin(115200);
delay(10);
// prepare GPIOs for RGB LED
pinMode(D0, OUTPUT);
pinMode(D1, OUTPUT);
pinMode(D2, OUTPUT);
analogWriteRange(99); //PWM: 0~99
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Start the server
server.begin();
Serial.println("Server started");
// Print the IP address
Serial.println(WiFi.localIP());
}
void loop() {
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}
// Wait until the client sends some data
Serial.println("new client");
while(!client.available()){
delay(1);
}
// Read the first line of the request
String req = client.readStringUntil('\r');
Serial.println(req);
client.flush();
// Match the request
int valR, valG, valB;
String subStringR, subStringG, subStringB;
int index = req.indexOf("/rgb/");
if(index != -1){
if(req.charAt(index+11)=='/'){
subStringR = req.substring(index+5, index+7);
subStringG = req.substring(index+7, index+9);
subStringB = req.substring(index+9, index+11);
Serial.println("R: " + subStringR);
Serial.println("G: " + subStringG);
Serial.println("B: " + subStringB);
valR = subStringR.toInt();
valG = subStringG.toInt();
valB = subStringB.toInt();
Serial.println("valR: " + String(valR));
Serial.println("valG: " + String(valG));
Serial.println("valB: " + String(valB));
}
else{
Serial.println("Not terminated with /");
client.stop();
return;
}
}
else {
Serial.println("No /rgb/ found");
client.stop();
return;
}
// Set GPIOs according to the request
// No check valid of the requested setting
analogWrite(ledR, valR);
analogWrite(ledG, valG);
analogWrite(ledB, valB);
client.flush();
// Prepare the response
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIOs of RGB is now ";
s += String(valR) +":" + String(valG) + ":" + String(valB);
s += "</html>\n";
// Send the response to the client
client.print(s);
delay(1);
Serial.println("Client disonnected");
// The client will actually be disconnected
// when the function returns and 'client' object is detroyed
}
Connection same as in last post:
Compare with ESP32 version: ESP32/Arduino core for ESP32 example, simple Web control RGB LED
nice video...i need some help that how can i turn on and off the GPIO of nodemcu as (client) and android as an server(HOTSPOT...)
ReplyDeleteI don't understand your point, sorry.
DeleteIn this example, the ESP8266 do join the WiFi shared by a Android phone, the Android phone is act as hotspot.
Nice one.
ReplyDeleteOnly 1 question.
Is there a special reason to use this gpio's?
I ask this because I use gpio4 and 5 for i2c (oled display) en gpio12, 13 en 15 for a rgbled strip.
Just wondering but D0 (gpio16) is also a wakeup port!