정보나눔

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

아두이노 wifi mysql 데이터 전송오류
준수 | 2017-06-13

 

wifi를 통해db에 저장하려고 했는데 GET이 안먹는 것 같네요.

어떻게 해야할까요.

http://webnautes.tistory.com/783 여기 사이트 따라하려고 했거는요.

 

php가 리눅스 소스여서 윈도우용으로 바꿨고요 php에 직접입력할떄는 다됩니다.

192.168.200.210/run.php?num=100직접입력해서 보내면 보내집니다.

 <?php
   $conn = mysqli_connect("127.0.0.1", "root", "123456","db"); 
   $num = $_GET[num];
   mysqli_query($conn,"INSERT INTO data(num)VALUES($num)");
   mysqli_close($conn);
?>

 

아두이노 소스 고친거없습니다. 여기서 GET  이 안되는것 같습니다.

#include <OneWire.h>    
#include <DallasTemperature.h>    
#include <string.h>  
  
///////////////////////////////////////////  
#include <SoftwareSerial.h>  
     
#define SSID "ESTI_EDU2"  //공유기 SSID
#define PASS "87654321"   //공유기 비번
#define DST_IP "192.168.200.210"   //MYSQL 서버 주소 
SoftwareSerial dbgSerial(2, 3); // RX, TX 3번,2번핀 
///////////////////////////////////////////  
  
  
  
      
//DS18B20 온도 센서의 데이터선인 가운데 핀을 아두이노 7번에 연결합니다.     
#define ONE_WIRE_BUS 7  
      
//1-wire 디바이스와 통신하기 위한 준비    
OneWire oneWire(ONE_WIRE_BUS);    
      
// oneWire선언한 것을 sensors 선언시 참조함.    
DallasTemperature sensors(&oneWire);    
      
//다비아스 주소를 저장할 배열 선언    
DeviceAddress insideThermometer;    
      
      
      
char * floatToString(char * outstr, double val, byte precision, byte widthp){  
 char temp[16]; //increase this if you need more digits than 15  
 byte i;  
  
 temp[0]='\0';  
 outstr[0]='\0';  
  
 if(val < 0.0){  
   strcpy(outstr,"-\0");  //print "-" sign  
   val *= -1;  
 }  
  
 if( precision == 0) {  
   strcat(outstr, ltoa(round(val),temp,10));  //prints the int part  
 }  
 else {  
   unsigned long frac, mult = 1;  
   byte padding = precision-1;  
     
   while (precision--)  
     mult *= 10;  
  
   val += 0.5/(float)mult;      // compute rounding factor  
     
   strcat(outstr, ltoa(floor(val),temp,10));  //prints the integer part without rounding  
   strcat(outstr, ".\0"); // print the decimal point  
  
   frac = (val - floor(val)) * mult;  
  
   unsigned long frac1 = frac;  
  
   while(frac1 /= 10)   
     padding--;  
  
   while(padding--)   
     strcat(outstr,"0\0");    // print padding zeros  
  
   strcat(outstr,ltoa(frac,temp,10));  // print fraction part  
 }  
  
 // generate width space padding   
 if ((widthp != 0)&&(widthp >= strlen(outstr))){  
   byte J=0;  
   J = widthp - strlen(outstr);  
  
   for (i=0; i< J; i++) {  
     temp[i] = ' ';  
   }  
  
   temp[i++] = '\0';  
   strcat(temp,outstr);  
   strcpy(outstr,temp);  
 }  
  
 return outstr;  
}  
  
  
      
void setup(void)    
{    
  
  
    
  //시리얼 포트 초기화    
  Serial.begin(9600);    
  
   
 /////////////////////////////////////////////////////////////////////////  
  Serial.setTimeout(5000);  
  dbgSerial.begin(9600);   
  Serial.println("ESP8266 connect");  
  
    
   boolean connected=false;  
   for(int i=0;i<10;i++)  
   {  
       if(connectWiFi())  
       {  
         connected = true;  
         break;  
       }  
   }  
     
   if (!connected){while(1);}  
   delay(5000);  
    
   dbgSerial.println("AT+CIPMUX=0");  
  ///////////////////////////////////////////////////////////////////////////     
       
   
   
      
  //1-wire 버스 초기화    
  sensors.begin();    
        
  //발견한 디바이스 갯수    
  Serial.print("Found ");    
  Serial.print(sensors.getDeviceCount(), DEC);    
  Serial.println(" devices.");    
      
  // parasite power 모드일 때에는  2핀(GND와 DQ 핀)만 연결하면 됨.    
  Serial.print("Parasite power is: ");     
  if (sensors.isParasitePowerMode()) Serial.println("ON");    
  else Serial.println("OFF");    
        
       
  //버스에서 첫번째 장치의 주소를 가져온다.    
  if (!sensors.getAddress(insideThermometer, 0)) Serial.println("Unable to find address for Device 0");     
        
  //버스에서 발견한 첫번째 장치의 주소 출력    
  Serial.print("Device 0 Address: ");    
  printAddress(insideThermometer);    
  Serial.println();    
      
  //데이터시트에서 확인결과 9~12비트까지 설정 가능    
  sensors.setResolution(insideThermometer, 10);    
       
  Serial.print("Device 0 Resolution: ");    
  Serial.print(sensors.getResolution(insideThermometer), DEC);     
  Serial.println();    
}    
      
      
// 온도를 출력하는 함수    
void printTemperature(DeviceAddress deviceAddress)    
{    
  //섭씨 온도를 가져옴    
  float  tempC = sensors.getTempC(deviceAddress);    
        
  Serial.print("Temp C: ");    
  Serial.print(tempC);    
  Serial.print(" Temp F: ");    
        
  //화씨 온도로 변환    
  Serial.println(DallasTemperature::toFahrenheit(tempC));  
  
  
  
     String cmd = "AT+CIPSTART=\"TCP\",\"";  
     cmd += DST_IP;  
     cmd += "\",80";  
     Serial.println(cmd);  
     dbgSerial.println(cmd);  
     if(dbgSerial.find("Error"))  
    {  
      Serial.println( "TCP connect error" );  
      return;  
    }  
     
  
    char test[20];  
    String temp(floatToString(test,tempC, 2, 0));  
      
     cmd = "GET /run.php?num="+temp+"\n\r";  
     dbgSerial.print("AT+CIPSEND=");  
     dbgSerial.println(cmd.length());  
          
       
     Serial.println(cmd);  
       
       
     if(dbgSerial.find(">"))  
     {  
       Serial.print(">");  
       }else  
       {  
         dbgSerial.println("AT+CIPCLOSE");  
         Serial.println("connect timeout");  
         delay(1000);  
         return;  
       }  
         
       dbgSerial.print(cmd);  
       delay(2000);  
       //Serial.find("+IPD");  
       while (Serial.available())  
       {  
         char c = Serial.read();  
         dbgSerial.write(c);  
         if(c=='\r') dbgSerial.print('\n');  
       }  
       Serial.println("====");  
       delay(1000);  
}    
      
//디바이스 주소를 출력하는 함수    
void printAddress(DeviceAddress deviceAddress)    
{    
  for (uint8_t i = 0; i < 8; i++)    
  {    
    if (deviceAddress[i] < 16) Serial.print("0");    
        Serial.print(deviceAddress[i], HEX);    
  }    
}    
      
      
void loop(void)    
{     
  Serial.print("Requesting temperatures...");    
  //sensors.requestTemperatures();   //연결되어 있는 전체 센서의 온도 값을 읽어옴    
  sensors.requestTemperaturesByIndex(0); //첫번째 센서의 온도값 읽어옴    
  Serial.println("DONE");    
       
  //센서에서 읽어온 온도를 출력    
  printTemperature(insideThermometer);    
}    
  
  
  
  
boolean connectWiFi()  
{  
   //dbgSerial.println("AT+CWMODE=1");  
     
   String cmd="AT+CWJAP=\"";  
   cmd+=SSID;  
   cmd+="\",\"";  
   cmd+=PASS;  
   cmd+="\"";  
   dbgSerial.println(cmd);  
   Serial.println(cmd);  
   delay(3000);  
    
   if(dbgSerial.find("OK"))  
   {  
     Serial.println("OK, Connected to WiFi.");  
     return true;  
   }  
   else  
   {  
     Serial.println("Can not connect to the WiFi.");  
     return false;  
   }  
 }  

 

이전글   |    모터 부울변수로 만들어보았는데 오류가 뜹니다 ㅠㅠㅠ Help me ... 2017-06-13
다음글   |    초음파 센서를이용하여.. 2017-06-13