2014-04-03 65 views
0

我正在使用可以發送HTTP的串口轉WiFi模塊。我做了一個草圖,用PHP腳本更新MySQL中的表格。 我的問題是,使用變量時我無法更新表格。它可以很好地處理靜態值。 我想知道Arduino草圖中是否存在問題或使用HTTP命令的方式。使用PHP更新MySQL的Arduino變量失敗

看從環線以下()和PHP腳本也:

float tm = 21.8; 

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

如果我插入值21.8,而不是變量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

兩個不相關的事情:使用PDO /庫MySQLi,mysql_已被棄用,MySQL有一個「日期時間「類型,你可以通過使用它而不是分離它來節省自己的一些工作 –

回答

0

,因爲C沒有「掃描」的字符串,sobstitute「以舊換新」與值(想想會發生什麼,你使用了一個名爲「我」或類似變量所有的時間......) 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); 

注意,我並置的字符串一行;那是因爲在右邊我們沒有對象String,而是C string:char數組。這是無效的tm

也真正的C級聯(什麼是String類裏面appening可以在這裏找到: How do I concatenate const/literal strings in C?

+0

謝謝,它通過將串行命令拆分成更多行來解決問題 – user3493816

+0

還注意到print與write的用法:write將發送RAW字節例如,TM會發送4個總是字節),而打印將把原始表單轉換成一個humand可讀(和URL兼容)字符串(女巫的字節大小是每個字母一個,加一個點) – Lesto

+0

編輯了答案,將鏈接添加到C中的REAL字符串連接,以及使用String類的字符串連接。 – Lesto