BASIC4MCU | 질문게시판 | 답변 : 가스 초기 값 설정
페이지 정보
작성자 master 작성일2020-06-17 19:07 조회10,796회 댓글5건본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2020-06-17 오후 7:12:09// by Ok-Hyun Park//#include <ESP8266WiFi.h>//const char *ssid ="00000000"; // 공유기(AP)접속 IDconst char *password="0000000"; // 공유기(AP)접속 패스워드#define RELAY 4 // 릴레이 핀 4번 설정#define GAS_PIN A0 // 가스 센서 핀 A0번 설정int GAS;WiFiServer server(80); // 서버 인스턴스 생성(80번 포트 지정)//int offset;//void setup(){WiFi.mode(WIFI_STA); WiFi.begin(ssid,password);Serial.begin(115200);delay(10);pinMode(RELAY,OUTPUT);// Serial 통신으로 WiFi 네트워크에 연결Serial.println(); Serial.println(); Serial.print("Connecting"); Serial.println(ssid);// 네트웍에 설정된 id와 패스워드로 접속WiFi.begin(ssid,password);while(WiFi.status()!=WL_CONNECTED){ delay(500); Serial.print("."); }Serial.println(""); Serial.println("Wifi Connected");// 서버 시작server.begin(); Serial.println("Sever Started");// 서버의(esp8266)IP 주소를 출력Serial.print("URL"); Serial.print("http: //"); Serial.println(WiFi.localIP()); Serial.println("/");//offset=analogRead(GAS_PIN);}//void loop(){// 클라이언트가 접속하는지 체크WiFiClient client=server.available();if(!client){ return; }// 클라이언트가 데이터를 보낼 때까지 기다림Serial.println("new client");while(!client.available()){ delay(1); }// 요청 첫 출을 읽어오기String request=client.readStringUntil('\r');Serial.println(request);client.flush();int value=HIGH;GAS=analogRead(GAS_PIN)-offset; if(GAS<0)GAS=0;Serial.print("Gas: "); Serial.println(GAS);//if(request.indexOf("/RELAY=ON")!=-1){ digitalWrite(RELAY,HIGH); value=HIGH; }else if(request.indexOf("/RELAY=OFF")!=-1){ digitalWrite(RELAY,LOW); }//client.println("HTTP/1.1 200 OK");client.println("Content-Type: text/html");client.println("");client.println("<!DOCTYPE HTML>");client.println("<html>");client.println("<meta http-equiv=\"refresh\" content=\"5\">"); // 웹 자동 업데이트client.println("<h1>Gas Leakage Status</ h1>");client.println("<br><br>");GAS=(GAS/(float)1024)*100; // 웹에 가스 값 퍼센트client.print("Gas value: "); client.print(GAS); client.println("%");client.println("<br><br>");// 웹으로 RELAY ON OFF 동작client.println("<a href=\"RELAY=ON\"\"><button>Turn On</button></a>");client.println("<a href=\"RELAY=OFF\"\"><button>Turn Off</button></a>");}
offset 변수를 추가해서 처리했습니다.
댓글 5
조회수 10,796밀키스님의 댓글
밀키스 작성일
정말 감사합니다. 추가적으로 가스값을 처음에 0 초기화부터 시작해서 읽을 때 가스 누출 후 예를들어 100이상이든지 몇 이상 검출되면 릴레이 구동시키게 하고싶은데 아래 소스처럼 if문을 사용해봤지만 신호만 받고 릴레이가 구동을 안합니다.. ㅜㅠ
#include <ESP8266WiFi.h>
//
const char *ssid ="00000"; // 공유기(AP)접속 ID
const char *password="00000"; // 공유기(AP)접속 패스워드
#define RELAY 4 // 릴레이 핀 4번 설정
#define GAS_PIN A0 // 가스 센서 핀 A0번 설정
int GAS;
WiFiServer server(80); // 서버 인스턴스 생성(80번 포트 지정)
//
int offset;
//
void setup(){
WiFi.mode(WIFI_STA); WiFi.begin(ssid,password);
Serial.begin(115200);
delay(10);
pinMode(RELAY,OUTPUT);
// Serial 통신으로 WiFi 네트워크에 연결
Serial.println(); Serial.println(); Serial.print("Connecting"); Serial.println(ssid);
// 네트웍에 설정된 id와 패스워드로 접속
WiFi.begin(ssid,password);
while(WiFi.status()!=WL_CONNECTED){ delay(500); Serial.print("."); }
Serial.println(""); Serial.println("Wifi Connected");
// 서버 시작
server.begin(); Serial.println("Sever Started");
// 서버의(esp8266)IP 주소를 출력
Serial.print("URL"); Serial.print("http: //"); Serial.println(WiFi.localIP()); Serial.println("/");
//
offset=analogRead(GAS_PIN);
}
//
void loop(){
// 클라이언트가 접속하는지 체크
WiFiClient client=server.available();
if(!client){ return; }
// 클라이언트가 데이터를 보낼 때까지 기다림
Serial.println("new client");
while(!client.available()){ delay(1); }
// 요청 첫 출을 읽어오기
String request=client.readStringUntil('\r');
Serial.println(request);
client.flush();
int value=HIGH;
GAS=analogRead(GAS_PIN)-offset; if(GAS<0)GAS=0;
Serial.print("Gas: "); Serial.println(GAS);
//
if(GAS>5) {
if(request.indexOf("/RELAY=ON")!=-1){ digitalWrite(RELAY,HIGH); value=HIGH; } }
else if(request.indexOf("/RELAY=OFF")!=-1){ digitalWrite(RELAY,LOW); }
//
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("");
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<meta http-equiv=\"refresh\" content=\"5\">"); // 웹 자동 업데이트
client.println("<h1>Gas Leakage Status</ h1>");
client.println("<br><br>");
GAS=(GAS/(float)1024)*100; // 웹에 가스 값 퍼센트
client.print("Gas value: "); client.print(GAS); client.println("%");
client.println("<br><br>");
// 웹으로 RELAY ON OFF 동작
client.println("<a href=\"RELAY=ON\"\"><button>Turn On</button></a>");
client.println("<a href=\"RELAY=OFF\"\"><button>Turn Off</button></a>");
}
master님의 댓글
master
if(GAS>5){
if(request.indexOf("/RELAY=ON")!=-1){ digitalWrite(RELAY,HIGH); value=HIGH; }
}
else if(request.indexOf("/RELAY=OFF")!=-1){ digitalWrite(RELAY,LOW); }
이 코드가 실행되지 않는다는 것인가요?
if(GAS>5){ digitalWrite(RELAY,HIGH); }
else { digitalWrite(RELAY,LOW); }
간단한 코드로 테스트 해보세요
밀키스님의 댓글
밀키스
아 해결했습니다!
정말 감사합니다!
밀키스님의 댓글
밀키스
안녕하세요! 위 소스처럼 서버와 연결 후 가스 값을 받으면 화면에서 계속 업데이트 되는 개념으로 실시간으로 확인할 수 있는 함수를 찾아서 설정해두었습니다.
하지만 저는 앱 인벤터를 사용하여 어플리케이션으로도 실시간으로 계속 값을 받아서 확인하고 싶습니다.
여기서 소스에서 설정을 안해줘서 앱 인벤터에서 실행이 안되는걸까요
아니면 앱 인벤터 내에서의 문제일까요..
만일, 소스 설정 문제라면 알려주시면 감사하겠습니다.. 늘 고생 많으십니다.
master님의 댓글
master
유사한 것을 돌려보지 않아서 도움을 드리지 못합니다.
잘 분석해서 원인을 파악하고 수정해보세요