정보나눔

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

자동개폐창문제어 코드 오류 질문입니다
길태현 | 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