2016-09-12 8 views
0

私は助けが必要です。私は部屋の照明を自動化し、それを制御するためにESP-12 WiFiモジュールを使用しています。しかし、ESP-12 WiFiモジュールをオンにすると、リレー入力用に設定したGPIO2ピンがHIGHになり(デフォルトではLOWになるはずです)、その後フリーズします。しかし、GPIOピンを接続してESPをオンにした場合、正常に動作します。どうすればこの問題を回避できますか?それは接続の問題またはコードに関連していますか?ESP-12無線LANモジュールのGPIOピンは、オンにするとHIGHになりますが、LOWにする必要があります。

これは、これは私のArduinoのコードであるThis is my circuit diagram

私の回路図である:

/* 
* 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 = "myssid"; 
const char* password = "mypassword"; 
IPAddress ip(192, 168, 1, 10); // where xx is the desired IP Address 
IPAddress gateway(192, 168, 1, 254); // set gateway to match your network 
IPAddress subnet(255, 255, 255, 255); // set subnet mask to match your network 

// Create an instance of the server 
// specify the port to listen on as an argument 
WiFiServer server(80); 
int status = LOW; 
const int pin = 2; 
void setup() { 
    Serial.begin(115200); 
    delay(100); 

    // prepare GPIO2 
    pinMode(pin, OUTPUT); 
    pinMode(pin, LOW); 


    // Connect to WiFi network 
    Serial.println(); 
    Serial.println(); 
    Serial.print("Connecting to "); 
    Serial.println(ssid); 
    WiFi.config(ip, gateway, subnet); 
    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() { 
    delay(3000); 
    // 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('$'); 
    Serial.println(req); 
    client.flush(); 

    // Match the request 

    if (req.indexOf("status") != -1 || req.indexOf("/status") != -1) 
    Serial.println("Switch is: "+ status); 
    else if (req.indexOf("on") != -1 || req.indexOf("/on") != -1) 
    status = HIGH; 
    else if (req.indexOf("off") != -1 || req.indexOf("/off") != -1) 
    status = LOW; 
    else { 
    Serial.println("invalid request"); 
    client.stop(); 
    return; 
    } 

    // Set GPIO2 according to the request 
    digitalWrite(pin, status); 
    // Prepare the response 
    String response = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nSwitch is now "; 
    response += status; 
    response += "</html>\n"; 
    // Send the response to the client 
    client.print(response); 
    client.flush(); 

    delay(1); 
    Serial.println("Client disonnected"+ status); 

    // The client will actually be disconnected 
    // when the function returns and 'client' object is detroyed 
} 
+1

あなたは 'pinMode'と' digitalWrite'を混同ようです。そして、あなたは明らかにあなたの設定であなたのピンを 'HIGH'に設定しようとしています。 –

+0

@gre_gorは絶対に正しい[ピンモードは状態ではなく出力を宣言する](https://www.arduino.cc/en/Reference/PinMode) –

答えて

0

クレジット

pinMode()これを指摘し@gre_gorするには、/彼らのHIGHを設定digitalWrite()、特定のピンを設定しますLOW状態。
文書はhereです。

これを試してみてください:

// prepare GPIO2 
pinMode(pin, OUTPUT); 
digitalWrite(pin, LOW); 
関連する問題