2014-04-03 2 views
0

HTTP를 보낼 수있는 직렬 포트를 사용하고 있습니다. PHP 스크립트로 MySQL의 테이블을 업데이트하기위한 스케치를 만들었습니다. 내 문제는, 변수를 사용할 때 테이블을 업데이트 할 수 없다는 것입니다. 그것은 정적 값으로 잘 작동합니다. Arduino 스케치 또는 HTTP 명령을 사용하는 방법에 문제가 있는지 알고 싶습니다. 아래 루프에서 라인에서PHP를 사용하여 MySQL을 업데이트하는 Arduino 변수가 실패합니다.

봐() 또한 PHP 스크립트 : 나는 값 21.8 대신 변수 TM을 삽입하면

float tm = 21.8; 

Serial.write("AT+HTTPPH=/update1x.php?tmp=tm\n"); // Parse values to PHP script 

, 그것은 작동합니다. C는 값으로 문자열 sobstitute "TM"을 "스캔"하지 않기 때문에

<?php 

    $aa = (isset($_GET['tmp']) ? $_GET['tmp'] : null); 

    mysql_connect('my.dk.mysql','my_dk','my_pw') or die("Can't connect that way!"); 

    @mysql_select_db('my_dk') or die("Unable to select a database called 'My'"); 

    date_default_timezone_set("Europe/Copenhagen"); 

    $dat = date("Y-m-d"); 

    $tim = date("H:i:s"); 

    $qry = "INSERT INTO temp1(temp, date, time) VALUES('$aa','$dat','$tim')"; 

    mysql_query($qry); 

    mysql_close(); 

    exit('OK'); 

?> 
+0

두 관련이없는 것들 : 그 String 클래스 내부 appening 것은 여기에서 찾을 수 있습니다 무엇 (tm 또한

실제 C의 연결을 위해 유효하지 않은 사용 PDO/MySQLi는 mysql_로는 사용되지 않으며 MySQL의는 "날짜가 있습니다 "형식을 사용하면 별도의 작업이 아닌 사용하여 작업을 절약 할 수 있습니다. –

답변

0

가 C입니다 (... 당신이 "나"또는 같은라는 변수를 사용하는 모든 시간을 일해야하는지에 대해 생각) 많은 "낮은"수준, 당신은 손으로 연결해야합니다.

Serial.print("AT+HTTPPH=/update1x.php?tmp="); 
Serial.print(tm); 
Serial.print("\n"); 

사용하여 String 클래스는 가능하지만, 당신은 RAM이 dinamically, 마녀가 마이크로 컨트롤러에 권고하지 않습니다 사용합니다 : : 실제로는 쉬운 일이있을 수 있습니다 전 라인에 대한 하나 개의 문자열을 연결

String s = "AT+HTTPPH=/update1x.php?tmp="; 
s += tm; 
s += "\n"; 
Serial.print(s); 

노트 ; 왜냐하면 오른쪽에는 객체 문자열이 없지만 C 문자열 : char 배열입니다. How do I concatenate const/literal strings in C?

+0

감사합니다. 직렬 명령을 줄 바꿈으로써 문제를 해결합니다. – user3493816

+0

또한 print vs write의 사용에주의하십시오. 예를 들어, TM은 항상 4 바이트를 전송합니다), print는 원시 형식을 인간이 읽을 수있는 (그리고 URL을 준수하는) 문자열 (바이트의 마녀 크기는 모든 문자에 대해 하나, 점에 하나)로 변환합니다. – Lesto

+0

는 C에서 REAL 문자열 연결에 대한 링크를 추가하고, String 클래스를 사용하여 문자열 연결을 추가하는 답을 편집했습니다. – Lesto

관련 문제