| 
					 안녕하세요 아두이노로 졸업작품을 하고 있는 학생들입니다. 
  
로드셀(무게센서)에서 받아온 값을 esp8266을 통해서 wifi로 PHP로 된 서버에 전달해 주고 싶은데 자꾸 AP가 끊깁니 
  
다.. 한 번 연결, 다음 번에 끊기고, 다시 연결, 다시 끊기고... 왜 이런지 해결책을 알 수 있을까요? 
  
#include<CountUpDownTimer.h> 
#include <SoftwareSerial.h> 
#include <LiquidCrystal.h> 
#include <Stepper.h> 
#include "HX711.h" 
#include "ESP8266.h" 
 
#define SSID "KGC" 
#define PASS "20171108" 
#define DST_IP "183.111.183.6" 
#define DOUT  A0 
#define CLK  A1 
#define MAX 550 
#define DOWN 0 
#define UP 1 
#define STEPS 64      // 스텝모터의 스텝수를 선언한다. 
 
Stepper stepper(STEPS, 0 , 9, 10, 11);  // 스텝모터의 스텝수, 제어핀을 설정한다. 
SoftwareSerial esp8266Serial = SoftwareSerial(6,7); //tx rx 주황색 노란색 
ESP8266 wifi = ESP8266(esp8266Serial); 
  
unsigned long Watch, _micro, time = micros(); 
unsigned int Clock = 0, R_clock; 
boolean Reset = false, Stop = false, Paused = false, _type; 
volatile boolean timeFlag = false; 
  
int a=8; 
unsigned long H; 
unsigned long M; 
unsigned long S; 
unsigned int n=1; 
int avg=0; 
 
unsigned long time1=0; 
unsigned long time2=0; 
unsigned long sremain; 
unsigned long c; 
unsigned long percentage_sum; 
unsigned long count; 
 
float value=0; 
int percentage=0; 
LiquidCrystal lcd(13,12,5,4,3,2); 
HX711 scale(DOUT, CLK); 
float calibration_factor = -150000; //-7050 worked for my 440lb maxscale setup 
//-210000 is the best calibration factor of the domain gram. 
void setup() 
{ 
   
  Serial.begin(9600); 
   
  lcd.begin(20,4); 
   
  SetTimer(0,0,1); // 10 seconds 
  StartTimer(); 
 
    // ESP8266 
    esp8266Serial.begin(9600); 
  
    wifi.begin(); 
     
    wifi.setTimeout(1000); 
  
  pinMode(A3, INPUT); 
  pinMode(A2, INPUT); 
  stepper.setSpeed(300);    // 스텝모터의 회전수를 설정한다. 
   
  scale.set_scale(); 
  scale.tare();   //Reset the scale to 0 
   
  long zero_factor = scale.read_average(); //Get a baseline reading 
  Serial.print("Zero factor: "); //This can be used to remove the need to tare the scale. Useful in permanent scale projects. 
  Serial.println(zero_factor); 
   
   
} 
void loop() 
{ 
  int value1 = digitalRead(A2); 
  int value2 = digitalRead(A3); 
  unsigned int id; 
  int length; 
  int totalRead; 
  char buffer[11] = {}; 
   
  if(value1 == HIGH) { 
    stepper.step(500);   // 스텝모터를 100만큼 회전 시킨다. 
    delay(10); // 1초간 딜레이   
  } else if(value2 == HIGH){ 
    stepper.step(-500); 
    delay(10); 
  }  
  scale.set_scale(calibration_factor); //Adjust to this calibration factor 
//로드쉘 lcd에 띄우기 
   
  value=scale.get_units()*0.45359*1000; 
  if(value<0) 
    value=-value; 
  percentage=(int)((value/MAX)*100);     
   
  if (count ==  10) 
  { 
    avg  = percentage_sum / 20; 
    percentage_sum = 0; 
    count = 0; 
  } 
  else { 
    percentage_sum = percentage_sum + percentage ; 
    count++; 
  } 
   
  //lcd.clear();0. 
  lcd.setCursor(0,1); 
  lcd.print(percentage); 
  lcd.print("%   " ); 
   
  if(percentage == 97 && n == 1) 
  { 
     time2=millis(); 
     
    sremain=((time2-time1)/3000)*100; 
    SetTimer(0,0,sremain); // 10 seconds 
    StartTimer();   
    lcd.setCursor(0,1); 
    n=0; 
     //lcd.print("remain"); 
  } 
   
  
 
//카운터 lcd에 띄우기 소스 
  CountUpDownTimer(DOWN); // run the timer 
   
  // this prevents the time from being constantly shown. 
  if (TimeHasChanged() )  
  { 
    Serial.print(ShowHours()); 
    Serial.print(":"); 
    Serial.print(ShowMinutes()); 
    Serial.print(":"); 
    Serial.print(ShowSeconds()); 
    //lcd.clear(); 
    lcd.setCursor(3,0); 
    lcd.print(H); 
    lcd.setCursor(5,0); 
    lcd.print(":"); 
    lcd.setCursor(7,0); 
    lcd.print(M); 
    lcd.setCursor(9,0); 
    lcd.print(":"); 
    lcd.print(S); 
  } 
      // test 
    Serial.print("test: "); 
    Serial.println(getStatus(wifi.test())); 
    // restart 
    Serial.print("restart: "); 
    Serial.println(getStatus(wifi.restart())); 
    // getVersion 
    char version[16] = {}; 
    Serial.print("getVersion: "); 
    Serial.print(getStatus(wifi.getVersion(version, 16))); 
    Serial.print(" : "); 
    Serial.println(version); 
    // getWifiMode 
    ///* 
   ESP8266WifiMode mode; 
   Serial.print("getWifiMode: "); 
   Serial.println(getStatus(wifi.getMode(&mode)));//*/ 
   Serial.print("Wifi mode>>:"); Serial.println(mode); 
   if(mode !=ESP8266_WIFI_STATION) 
   { 
    //setWifiMode 
    Serial.print("setWifiMode:"); 
    // 
    Serial.println(getStatus(wifi.setMode(ESP8266_WIFI_ACCESSPOINT))); 
    Serial.println(getStatus(wifi.setMode(ESP8266_WIFI_STATION))); 
   } 
   else 
   Serial.println("already ESP8266_WIFI_STATION mode"); 
    // joinAP 
    Serial.print("joinAP: "); 
    Serial.println(getStatus(wifi.joinAP(SSID, PASS))); 
     
    // connect 
    Serial.print("connect: "); 
    Serial.println(getStatus(wifi.connect(ESP8266_PROTOCOL_TCP, DST_IP, 80))); 
     getConnectionStatue(wifi); 
     
    // send 
    String cmd = "GET http://ksghj.cafe24.com/test?a="; 
    cmd += percentage; 
    cmd += " HTTP/1.0\r\n\r\n"; 
    Serial.print("send: "); 
    Serial.println(getStatus(wifi.send((cmd)))); 
 if ((length = wifi.available()) > 0) { 
    id = wifi.getId(); 
    totalRead = wifi.read(buffer, 1000); 
    if (length > 0) { 
      Serial.println((char*)buffer); 
    } 
  } 
} 
boolean CountUpDownTimer(boolean Type) 
{ 
  _type = Type; 
  static unsigned long duration = 1000000; // 1 second 
  timeFlag = false; 
  if (!Stop && !Paused) // if not Stopped or Paused, run timer 
  { 
    // check the time difference and see if 1 second has elapsed 
    if ((_micro = micros()) - time > duration )  
    { 
      _type == UP? Clock++ : Clock--; 
      timeFlag = true; 
      if (_type == DOWN && Clock == 0) // check to see if the clock is 0 
        Stop = true; // If so, stop the timer 
     // check to see if micros() has rolled over, if not, 
     // then increment "time" by duration 
      _micro < time ? time = _micro : time += duration;  
    } 
  } 
  return !Stop; // return the state of the timer 
} 
 
void ResetTimer() 
{ 
  if(_type)  
    Clock = 0; 
  else 
    SetTimer(R_clock); 
  Stop = false; 
} 
void StartTimer() 
{ 
  Watch = micros(); // get the initial microseconds at the start of the timer 
  Stop = false; 
  Paused = false; 
  if(_type == UP)  
    Clock = 0; 
} 
void StopTimer() 
{ 
  Stop = true; 
} 
void StopTimerAt(unsigned int hours, unsigned int minutes, unsigned int seconds) 
{ 
  if (TimeCheck(hours, minutes, seconds) ) 
    Stop = true; 
} 
void PauseTimer() 
{ 
  Paused = true; 
} 
void ResumeTimer() // You can resume the timer if you ever stop it. 
{ 
  Paused = false; 
} 
void SetTimer(unsigned int hours, unsigned int minutes, unsigned int seconds) 
{ 
  // This handles invalid time overflow ie 1(H), 0(M), 120(S) -> 1, 2, 0 
  unsigned int _S = (seconds / 60), _M = (minutes / 60); 
  if(_S) minutes += _S; 
  if(_M) hours += _M; 
  Clock = (hours * 3600) + (minutes * 60) + (seconds % 60); 
  R_clock = Clock; 
  Stop = false; 
} 
void SetTimer(unsigned int seconds) 
{ 
 // StartTimer(seconds / 3600, (seconds / 3600) / 60, seconds % 60); 
 Clock = seconds; 
 R_clock = Clock; 
 Stop = false; 
} 
int ShowHours() 
{ 
  H = Clock / 3600; 
  return  H; 
} 
int ShowMinutes() 
{ 
  M = (Clock / 60) % 60; 
  return  M; 
} 
int ShowSeconds() 
{ 
  S = Clock % 60; 
  return  S; 
} 
/* 
unsigned long ShowMilliSeconds() 
{ 
  return (_micro - Watch)/ 1000.0; 
}*/ 
 
/* 
unsigned long ShowMicroSeconds() 
{ 
  return _micro - Watch; 
}*/ 
boolean TimeHasChanged() 
{ 
  return timeFlag; 
} 
// output true if timer equals requested time 
boolean TimeCheck(unsigned int hours, unsigned int minutes, unsigned int seconds)  
{ 
  return (hours == ShowHours() && minutes == ShowMinutes() && seconds == ShowSeconds()); 
} 
void getConnectionStatue(ESP8266 wifi) { 
  // getConnectionStatus 
  ESP8266ConnectionStatus connectionStatus; 
  ESP8266Connection connections[5]; 
  unsigned int connectionCount; 
  Serial.print("getConnectionStatus: "); 
  Serial.print(getStatus(wifi.getConnectionStatus(connectionStatus, connections, connectionCount))); 
  Serial.print(" : "); 
  Serial.println(connectionCount); 
  for (int i = 0; i < connectionCount; i++) { 
    Serial.print(" - Connection: "); 
    Serial.print(connections[i].id); 
    Serial.print(" - "); 
    Serial.print(getProtocol(connections[i].protocol)); 
    Serial.print(" - "); 
    Serial.print(connections[i].ip); 
    Serial.print(":"); 
    Serial.print(connections[i].port); 
    Serial.print(" - "); 
    Serial.println(getRole(connections[i].role)); 
  } 
} 
     
 
     
//} 
    /****************************************/ 
    /******        WiFi commands       ******/ 
    /****************************************/ 
    // getConnectedStations 
    /*ESP8266Station stations[5]; 
    unsigned int stationCount; 
    Serial.print("getConnectedStations: "); 
    Serial.print(getStatus(wifi.getConnectedStations(stations, stationCount, 5))); 
    Serial.print(" : "); 
    Serial.println(stationCount); 
    for (uint8_t i = 0; i < stationCount; i++) { 
      Serial.print(" - "); 
      Serial.print(stations[i].ip); 
      Serial.print(" - "); 
      for (uint8_t j = 0; j < 6; j++) { 
        Serial.print(stations[i].mac[j], HEX); 
        if (j < 5) 
          Serial.print(":"); 
      } 
      Serial.println(); 
    } 
    delay(5000);*/ 
    /****************************************/ 
    /******       TCP/IP commands      ******/ 
    /****************************************/ 
    // getConnectionStatus 
    /*ESP8266ConnectionStatus connectionStatus; 
    ESP8266Connection connections[5]; 
    unsigned int connectionCount; 
    Serial.print("getConnectionStatus: "); 
    Serial.print(getStatus(wifi.getConnectionStatus(connectionStatus, connections, connectionCount))); 
    Serial.print(" : "); 
    Serial.println(connectionCount); 
    for (int i = 0; i < connectionCount; i++) { 
      Serial.print(" - Connection: "); 
      Serial.print(connections[i].id); 
      Serial.print(" - "); 
      Serial.print(getProtocol(connections[i].protocol)); 
      Serial.print(" - "); 
      Serial.print(connections[i].ip); 
      Serial.print(":"); 
      Serial.print(connections[i].port); 
      Serial.print(" - "); 
      Serial.println(getRole(connections[i].role)); 
    } 
    delay(5000);*/ 
 
    // read data 
    /*unsigned int id; 
    int length; 
    int totalRead; 
    char buffer[11] = {}; 
    if ((length = wifi.available()) > 0) { 
      id = wifi.getId(); 
      totalRead = wifi.read(buffer, 10); 
      if (length > 0) { 
        Serial.print("Received "); 
        Serial.print(totalRead); 
        Serial.print("/"); 
        Serial.print(length); 
        Serial.print(" bytes from client "); 
        Serial.print(id); 
        Serial.print(": "); 
        Serial.println((char*)buffer); 
      } 
    }*/ 
 
String getStatus(bool status) 
{ 
    if (status) 
        return "OK"; 
    return "KO"; 
} 
String getStatus(ESP8266CommandStatus status) 
{ 
    switch (status) { 
    case ESP8266_COMMAND_INVALID: 
        return "INVALID"; 
        break; 
    case ESP8266_COMMAND_TIMEOUT: 
        return "TIMEOUT"; 
        break; 
    case ESP8266_COMMAND_OK: 
        return "OK"; 
        break; 
    case ESP8266_COMMAND_NO_CHANGE: 
        return "NO CHANGE"; 
        break; 
    case ESP8266_COMMAND_ERROR: 
        return "ERROR"; 
        break; 
    case ESP8266_COMMAND_NO_LINK: 
        return "NO LINK"; 
        break; 
    case ESP8266_COMMAND_TOO_LONG: 
        return "TOO LONG"; 
        break; 
    case ESP8266_COMMAND_FAIL: 
        return "FAIL"; 
        break; 
    default: 
        return "UNKNOWN COMMAND STATUS"; 
        break; 
    } 
} 
String getRole(ESP8266Role role) 
{ 
    switch (role) { 
    case ESP8266_ROLE_CLIENT: 
        return "CLIENT"; 
        break; 
    case ESP8266_ROLE_SERVER: 
        return "SERVER"; 
        break; 
    default: 
        return "UNKNOWN ROLE"; 
        break; 
    } 
} 
String getProtocol(ESP8266Protocol protocol) 
{ 
    switch (protocol) { 
    case ESP8266_PROTOCOL_TCP: 
        return "TCP"; 
        break; 
    case ESP8266_PROTOCOL_UDP: 
        return "UDP"; 
        break; 
    default: 
        return "UNKNOWN PROTOCOL"; 
        break; 
    } 
} 
					
										
									 |