코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
자동개폐창문제어 코드 오류 질문입니다
길태현 | 2016-11-04
|
|
---|---|
안녕하세요 코드에 관련해서 질문드리고 싶습니다. 도저희 머가 문제인지 모르겠어서.. 소개를 하자면 빗물을 감지하면 모터 회전수를 정해 그만큼 회전시켜 창문을 닫는 시스템인데요 아두이노로만 할때는 정확하게 다 구동이 되는데 와이파이 쉴드로 와이파이로 블링크라는 어플을 사용하여 원격으로도 창문을 개폐할수 있는 시스템을 추가할려합니다 그런데 코드를 다 합치면 모터가 역회전하거나 잘 돌아가지도 않고 와이파이도 접속이 안됩니다 다른예제를 하면 와이파이도 잡히고 잘되는데 뭐가 문제일까요?? 코드 확인하고 수정할부분이 있는지 오류가 왜 나는지 알려주세요ㅠ 부탁드려요ㅠㅠ 아두이노 우노, 와이파이는 esp8266 입니다
/************************************************************ ESP8266_Shield_Demo.h SparkFun ESP8266 AT library - Demo Jim Lindblom @ SparkFun Electronics Original Creation Date: July 16, 2015 https://github.com/sparkfun/SparkFun_ESP8266_AT_Arduino_Library
This example demonstrates the basics of the SparkFun ESP8266 AT library. It'll show you how to connect to a WiFi network, get an IP address, connect over TCP to a server (as a client), and set up a TCP server of our own.
Development environment specifics: IDE: Arduino 1.6.5 Hardware Platform: Arduino Uno ESP8266 WiFi Shield Version: 1.0
This code is released under the MIT license.
Distributed as-is; no warranty is given. ************************************************************/
////////////////////// // Library Includes // ////////////////////// // SoftwareSerial is required (even you don't intend on // using it). #include <SoftwareSerial.h> #include <SparkFunESP8266WiFi.h> #include <SoftwareSerial.h> SoftwareSerial BTSerial(2,3);//(RX,TX)connect HC-06 TX, RX
#define BLYNK_PRINT Serial #include <SPI.h> #include <WiFi.h> #include <BlynkSimpleWifi.h>
////////////////////////////// // WiFi Network Definitions // ////////////////////////////// // Replace these two character strings with the name and // password of your WiFi network. char auth[] = "c4de80a30957467ea0d53ce11fb0d989"; const char mySSID[] = "맞게했습니다"; const char myPSK[] = "(비번 맞게쳤습니다)";
////////////////////////////// // ESP8266Server definition // ////////////////////////////// // server object used towards the end of the demo. // (This is only global because it's called in both setup() // and loop()). ESP8266Server server = ESP8266Server(80);
////////////////// // HTTP Strings // ////////////////// const char destServer[] = "example.com"; const String htmlHeader = "HTTP/1.1 200 OK\r\n" "Content-Type: text/html\r\n" "Connection: close\r\n\r\n" "<!DOCTYPE HTML>\r\n" "<html>\r\n";
const String httpRequest = "GET / HTTP/1.1\n" "Host: example.com\n" "Connection: close\n\n";
int sensor=7; int val=0; int stp=5; int dir=4; int re=310; int sw=10; int onoff=0; int flag=0; char btdata; // All functions called from setup() are defined below the // loop() function. They modularized to make it easier to // copy/paste into sketches of your own.
void setup() { // Serial Monitor is used to control the demo and view // debug information. Serial.begin(9600); serialTrigger(F("Press any key to begin."));
// initializeESP8266() verifies communication with the WiFi // shield, and sets it up. initializeESP8266();
// connectESP8266() connects to the defined WiFi network. connectESP8266();
// displayConnectInfo prints the Shield's local IP // and the network it's connected to. displayConnectInfo();
serialTrigger(F("Press any key to connect client.")); clientDemo();
serialTrigger(F("Press any key to test server.")); serverSetup(); Blynk.begin(auth, mySSID, myPSK); // Or specify server using one of those commands: //Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442); //Blynk.begin(auth, ssid, pass, server_ip, port); pinMode(sensor,INPUT); pinMode(sw,INPUT); pinMode(stp,OUTPUT); pinMode(dir,OUTPUT); }
void loop() { serverDemo(); Blynk.run();
delay(100); val=digitalRead(sensor); onoff=digitalRead(sw); if(onoff==HIGH) { digitalWrite(dir,HIGH); for(int i=0;i<re;i++) { digitalWrite(stp,HIGH); delay(10); digitalWrite(stp, LOW); delay(10); } } else{ if(val==LOW ) { if(flag==0) { flag=1; digitalWrite(dir,LOW); for(int i=0;i<re;i++) { digitalWrite(stp,HIGH); delay(10); digitalWrite(stp, LOW); delay(10); } } } else flag=0; } if(BTSerial.available()>0) { byte btdata=BTSerial.read(); if(btdata=='1') { digitalWrite(dir,HIGH); for(int i=0;i<re;i++) { digitalWrite(stp,HIGH); delay(10); digitalWrite(stp, LOW); delay(10); } } else{ if(btdata=='2' ) { if(flag==0) { flag=1; digitalWrite(dir,LOW); for(int i=0;i<re;i++) { digitalWrite(stp,HIGH); delay(10); digitalWrite(stp, LOW); delay(10); } } } else flag=0; }
} }
void initializeESP8266() { // esp8266.begin() verifies that the ESP8266 is operational // and sets it up for the rest of the sketch. // It returns either true or false -- indicating whether // communication was successul or not. // true int test = esp8266.begin(); if (test != true) { Serial.println(F("Error talking to ESP8266.")); errorLoop(test); } Serial.println(F("ESP8266 Shield Present")); }
void connectESP8266() { // The ESP8266 can be set to one of three modes: // 1 - ESP8266_MODE_STA - Station only // 2 - ESP8266_MODE_AP - Access point only // 3 - ESP8266_MODE_STAAP - Station/AP combo // Use esp8266.getMode() to check which mode it's in: int retVal = esp8266.getMode(); if (retVal != ESP8266_MODE_STA) { // If it's not in station mode. // Use esp8266.setMode([mode]) to set it to a specified // mode. retVal = esp8266.setMode(ESP8266_MODE_STA); if (retVal < 0) { Serial.println(F("Error setting mode.")); errorLoop(retVal); } } Serial.println(F("Mode set to station"));
// esp8266.status() indicates the ESP8266's WiFi connect // status. // A return value of 1 indicates the device is already // connected. 0 indicates disconnected. (Negative values // equate to communication errors.) retVal = esp8266.status(); if (retVal <= 0) { Serial.print(F("Connecting to ")); Serial.println(mySSID); // esp8266.connect([ssid], [psk]) connects the ESP8266 // to a network. // On success the connect function returns a value >0 // On fail, the function will either return: // -1: TIMEOUT - The library has a set 30s timeout // -3: FAIL - Couldn't connect to network. retVal = esp8266.connect(mySSID, myPSK); if (retVal < 0) { Serial.println(F("Error connecting")); errorLoop(retVal); } } }
void displayConnectInfo() { char connectedSSID[24]; memset(connectedSSID, 0, 24); // esp8266.getAP() can be used to check which AP the // ESP8266 is connected to. It returns an error code. // The connected AP is returned by reference as a parameter. int retVal = esp8266.getAP(connectedSSID); if (retVal > 0) { Serial.print(F("Connected to: ")); Serial.println(connectedSSID); }
// esp8266.localIP returns an IPAddress variable with the // ESP8266's current local IP address. IPAddress myIP = esp8266.localIP(); Serial.print(F("My IP: ")); Serial.println(myIP); }
void clientDemo() { // To use the ESP8266 as a TCP client, use the // ESP8266Client class. First, create an object: ESP8266Client client;
// ESP8266Client connect([server], [port]) is used to // connect to a server (const char * or IPAddress) on // a specified port. // Returns: 1 on success, 2 on already connected, // negative on fail (-1=TIMEOUT, -3=FAIL). int retVal = client.connect(destServer, 80); if (retVal <= 0) { Serial.println(F("Failed to connect to server.")); return; }
// print and write can be used to send data to a connected // client connection. client.print(httpRequest);
// available() will return the number of characters // currently in the receive buffer. while (client.available()) Serial.write(client.read()); // read() gets the FIFO char
// connected() is a boolean return value - 1 if the // connection is active, 0 if it's closed. if (client.connected()) client.stop(); // stop() closes a TCP connection. }
void serverSetup() { // begin initializes a ESP8266Server object. It will // start a server on the port specified in the object's // constructor (in global area) server.begin(); Serial.print(F("Server started! Go to ")); Serial.println(esp8266.localIP()); Serial.println(); }
void serverDemo() { // available() is an ESP8266Server function which will // return an ESP8266Client object for printing and reading. // available() has one parameter -- a timeout value. This // is the number of milliseconds the function waits, // checking for a connection. ESP8266Client client = server.available(500);
if (client) { Serial.println(F("Client Connected!")); // an http request ends with a blank line boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); // if you've gotten to the end of the line (received a newline // character) and the line is blank, the http request has ended, // so you can send a reply if (c == '\n' && currentLineIsBlank) { Serial.println(F("Sending HTML page")); // send a standard http response header: client.print(htmlHeader); String htmlBody; // output the value of each analog input pin for (int a = 0; a < 6; a++) { htmlBody += "A"; htmlBody += String(a); htmlBody += ": "; htmlBody += String(analogRead(a)); htmlBody += "<br>\n"; } htmlBody += "</html>\n"; client.print(htmlBody); break; } if (c == '\n') { // you're starting a new line currentLineIsBlank = true; } else if (c != '\r') { // you've gotten a character on the current line currentLineIsBlank = false; } } } // give the web browser time to receive the data delay(1);
// close the connection: client.stop(); Serial.println(F("Client disconnected")); }
}
// errorLoop prints an error code, then loops forever. void errorLoop(int error) { Serial.print(F("Error: ")); Serial.println(error); Serial.println(F("Looping forever.")); for (;;) ; }
// serialTrigger prints a message, then waits for something // to come in from the serial port. void serialTrigger(String message) { Serial.println(); Serial.println(message); Serial.println(); while (!Serial.available()) ; while (Serial.available()) Serial.read(); }
|
|
이전글 | Temboo를 이용한 메일전송관련입니다 ㅠㅠ 이런에러가 나옵니다 ㅠㅠㅠ 어떤이유일까요... | 2016-11-03 |
다음글 | 앱인벤터로 만든 어플리케이션과 오렌지보드BLE 연동 질문입니다... | 2016-11-04 |