-->
Page 1 of 1

wifiwebserver nodemcu 0.9 & digitalWrite 0

PostPosted: Sun Jul 31, 2016 7:38 am
by icons
For some reason when I type 0 in web browser led on pin 16 comes on, when I type 1 led turns off (see imgs. bellow).

Is there a logical explanation to this since it clearly states in code digitaWrite (16, 0)?

I am using the arduino WiFiWebserver example:

Code: Select all[code]
/*
 *  This sketch demonstrates how to set up a simple HTTP-like server.
 *  The server will set a GPIO pin depending on the request
 *    http://server_ip/gpio/0 will set the GPIO2 low,
 *    http://server_ip/gpio/1 will set the GPIO2 high
 *  server_ip is the IP address of the ESP8266 module, will be
 *  printed to Serial when the module is connected.
 */

#include <ESP8266WiFi.h>

const char* ssid = ".....";
const char* password = "???????";

// 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 GPIO16
  pinMode(16, OUTPUT);
  digitalWrite(16, 0);
 
  // 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 val;
  if (req.indexOf("/gpio/0") != -1)
    val = 0;
  else if (req.indexOf("/gpio/1") != -1)
    val = 1;
  else {
    Serial.println("invalid request");
    client.stop();
    return;
  }

  // Set GPIO2 according to the request
  digitalWrite(16, val);
 
  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\nGPIO is now ";
  s += (val)?"high":"low";
  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
}

[/code]


I need to understand why this is happening please if anyone knows what is going on, thanks...

Re: wifiwebserver nodemcu 0.9 & digitalWrite 0

PostPosted: Sun Jul 31, 2016 9:40 am
by martinayotte
GPIO can drive LED in sink mode or source mode, depending of its connection.
So, if LED connected in sink mode, it is normal that it would glow only when digitalWrite(pinno, 0) is called, and will be turned off with digitalWrite(pinno, 1) .

Image

Re: wifiwebserver nodemcu 0.9 & digitalWrite 0

PostPosted: Sun Jul 31, 2016 12:25 pm
by icons
Duh....what an idiot am I!

Thanks for the simple explanation and your patience.