정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

아두이노우노 ,ESP8266NodeMCU 및 자석센서감지 질문입니다 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
디릭 | 2018-10-14
 

1. 프로젝트 사용한 보드 종류

  (EX : 오렌지보드, 오렌지 BLE보드, 아두이노 UNO 등)

  아두이노 UNO 및 ESP8266NodeMCU 와이이쉴드 

 

2. 사용한 개발 프로그램명

  (EX : 아두이노 IDE, 스크래치, mBlock 등)

  아두이노 IDE

 

3. 사용한 센서 모델명

  (센서 모델명을 자세하게 적어 주실 경우 더 정확하게 확인할 수 있습니다.)

  자석감지센서 XD-78 

 

4. 연결한 회로 설명 (또는 이미지)  

첫번째이미지는 할당받은 아이피를 쳤을때 떠지는 창이고 두번째는 와이파이쉴드 와 우노를 결합한모습입니다.

쉴드 3번핀 그리고 GND 그리고 5V에 연결했습니다.

자석을 가져다 뒀을때 불빛이 둘다들어온것이고 자석이 떨어지면 불이 한쪽만켜집니다.

그리고 마지막이미지는 시리얼모드에서의 모습입니다.  해당 사이트가 리프레쉬될때마다 new client라고 뜹니다.

 

 

5. 소스코드 (주석 필수)

  (원하는 기능의 코드를 전부 작성해 드리긴 어렵습니다. 기초부터 차근차근 공부해보면서 코드를 만들어 보세요.)

와이파이 공유기로부터 아이피를 와이파이쉴드로 할당받아서 센서값을 읽어(HIGH 또는 LOW) 일때 그값을 텍스트로 

해당 IP에 띄워줍니다. (자석센서인 XD-78은 떨어졌을때 HIGH값으로 인식해서 OFF로 되게 했습니다.)

#include <ESP8266WiFi.h>
 
const char* ssid = "YourNetwork";
const char* password = "password";
 
int magPin = 3; 
WiFiServer server(80);
 
void setup() {
  Serial.begin(115200);
  delay(10);
 
  pinMode(magPin, INPUT);

  // 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.print("Use this URL to connect: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");
 
}
 
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 request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();
 
  // Match the request
 
  
  
 
// Set ledPin according to the request
//digitalWrite(ledPin, value);
 
  // Return the response
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println("Refresh:1");
  client.println(""); //  do not forget this one
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");
 
  client.print("magPin pin is now: ");
 
  if(digitalRead(magPin == HIGH)) {
    client.print("OFF");
  } else {
    client.print("On");
  }
  client.println("<br><br>");
 
  client.println("</html>");
 
  delay(1);
  Serial.println("Client disonnected");
  Serial.println("");
 
}

-----------------------------------------아래는 단순히 우노에서 자석감지를 하고 시리얼창에서 띄워주는예제입니다.

#define MAGNET 8 //OUT 핀 설정(디지털신호 받는 핀)
void setup() {
  Serial.begin(9600);/*
  pinMode(MAGNET, INPUT);
}
void loop() {

  /*

    조건문인 IF문을 사용하여 자석이 감지되면(LOW) `MAGNET ON` 이라는 글자가

    시리얼 모니터를 통해 출력 되도록 작성하셨습니다.

  */
  if (digitalRead(MAGNET ) == LOW) {
    Serial.println("MAGNET ON");
  }
  delay(500);
}

6. 문제점 및 에러 내용

  (소스코드 문제일 경우 에러 내용도 같이 올려주세요.)

 1.제가 원하는 것은 자석센서로부터 HIGH 나 LOW를 받아서 사이트에 띄워주고 그값을 안드로이드에서 접근해서 

 가져오는것인데요. 따로 서버에있는 php 파일로접근해야만 저텍스트를 가져올수있는건가요?

 

 2.일단위의 것을 컴파일했을시에는  이상이없는데 시리얼모드와 해당사이트를 리프레쉬할때마다 

 자석이 센서에 다가가면 on off가 변경되게 해놨는데 값이변경이되질않습니다. 이게 회로의 문제인지

 코드의문제인지를 모르겠습니다. 굉장히 오래 고민했는데 바본지 진짜 잘모르겠습니다. 

 어떻게 바꿔야할까요?

 

 3.해당 아이피 사이트를 1초마다 리프레쉬되게 해놨는데 시리얼모드에서 리프레쉬가 될때마다 

  newclient가되게 해놨는데요 이게 계속해서 newclient라고 뜨다가 몇초지나고나서 갑자기멈춥니다.

  이런경우에는 어떤부분을 고쳐야하나요 ???  

 

 아시는분있으시면 의견 나눠주셨으면 좋겠습니다!!!! 감사합니다!!! 

이전글   |    아두이노 외부전압 2018-10-14
다음글   |    안녕하세요. 2018-10-14