2014-04-03 60 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