Php 从MySQL获取输入变量并将输出发送到Arduino
我正在将传感器数据保存到phpMyAdmin数据库中,我想使用该数据(最后一个条目)作为用PHP编写的模糊函数的输入变量 我是否可以将fuzzy的输出变量发送回我的Arduino?我如何在线路板上配置请求Php 从MySQL获取输入变量并将输出发送到Arduino,php,post,arduino,get,Php,Post,Arduino,Get,我正在将传感器数据保存到phpMyAdmin数据库中,我想使用该数据(最后一个条目)作为用PHP编写的模糊函数的输入变量 我是否可以将fuzzy的输出变量发送回我的Arduino?我如何在线路板上配置请求 <?php require_once ('./fuzzy-logic-class.php'); // Include data base connect class $filepath = realpath (dirname(__FILE__)); require_once($file
<?php
require_once ('./fuzzy-logic-class.php');
// Include data base connect class
$filepath = realpath (dirname(__FILE__));
require_once($filepath."/db_connect.php");
// Connecting to database
$db = new DB_CONNECT();
// Actual Values
$sql = mysql_query("SELECT `temp`,`hum`,`moist` FROM `t_measure` ORDER BY id_measure desc LIMIT 1;");
$actual = $conn->query($sql);
if ($actual->num_rows > 0) {
// output data of each row
while($row = $actual->fetch_assoc()) {
$acttemp = number_format($row["temp"],0);
$acthum = number_format($row["humidity"],0);
$actsoil = number_format($row["soil"],0);
}
} else {
echo "0 results";
}
/*----------------Fuzzy Parameters----*/
$x = new Fuzzy_Logic();
$x->clearMembers();
/* ---------- set input members ---------*/
$x->setInputNames(array('TEMP','HUMIDITY', 'SOIL'));
$x->addMember($x->getInputName(0),'COLD', 0, 8, 25 ,LINFINITY);
$x->addMember($x->getInputName(0),'WARM', 20, 35, 100 ,RINFINITY);
$x->addMember($x->getInputName(1),'LOW', 0 ,40 ,60 ,LINFINITY);
$x->addMember($x->getInputName(1),'HIGH',50 ,70 ,100 ,RINFINITY);
$x->addMember($x->getInputName(2),'WET', 0, 400 ,650 ,LINFINITY);
$x->addMember($x->getInputName(2),'DRY',550, 800 ,1025 ,RINFINITY);
/* ---------- set output members ---------*/
$x->setOutputNames(array('OUT'));
$x->addMember($x->getOutputName(0),'LOWER',-10, -5 ,0 ,LINFINITY);
$x->addMember($x->getOutputName(0),'RAISE',0, 5 ,10 ,RINFINITY);
/* ---------- set rule table ------------ */
$x->clearRules();
$x->addRule('IF TEMP.WARM OR SOIL.DRY OR HUMIDITY.LOW THEN OUT.RAISE');
$x->addRule('IF TEMP.COLD OR SOIL.WET OR HUMIDITY.HIGH THEN OUT.LOWER');
/*---------- Get values from database and calculate output ----*/
$x->SetRealInput('TEMP', $acttemp);
$x->SetRealInput('HUMIDITY' ,$acthum);
$x->SetRealInput('SOIL' , $actsoil);
$fuzzy_arr = $x->calcFuzzy();
$Fuzzy = $fuzzy_arr['OUT'];
echo $Fuzzy;
使用HTTP,可以像让Arduino上的HTTPClient向服务器/phpfile发出GET请求并读取响应一样简单。互联网上的例子比比皆是;用于此操作的库取决于您使用的Arduino
PHP的响应应该类似于:
HTTP/1.1 200 OK\n
Connection: close\n
Content-Type: text/plain; charset=utf-8\n\n
[Your string in $Fuzzy]\n
如果您想让服务器主动发送模糊值,事情会变得更复杂。使用HTTP,可以让Arduino上的HTTPClient向服务器/phpfile发出get请求并读取响应。互联网上的例子比比皆是;用于此操作的库取决于您使用的Arduino
PHP的响应应该类似于:
HTTP/1.1 200 OK\n
Connection: close\n
Content-Type: text/plain; charset=utf-8\n\n
[Your string in $Fuzzy]\n
如果你想让服务器主动发送模糊值,事情会变得更复杂。因此,我把两个文件的组合搞砸了。更正了这一部分后,api就可以正常工作了
$servername = "---";
$username = "---";
$password = "---";
$dbname = "---";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$Fuzzy = $_GET['val'];
// Actual Values
$sql= "SELECT `temp`,`hum`,`moist` FROM `t_measure` ORDER BY id_measure desc LIMIT 1;";
$actual = $conn->query($sql);
要在Arduino端接收数据,这是必需的代码
void setup() {
Serial.begin(115200);
WiFi.begin("ssid", "pass"); //WiFi connection
while (WiFi.status() != WL_CONNECTED) { //Wait for the WiFI connection completion
delay(500);
Serial.println("Waiting for connection");
}
}
void loop() {
if(WiFi.status()== WL_CONNECTED){ //Check WiFi connection status
HTTPClient http;
http.begin("http://....."); //api location
http.addHeader("Content-Type", "text/plain");
String payload = http.getString(); //reading from api
Serial.println(payload);
http.end();
}else{
Serial.println("Error in WiFi connection");
}
所以,结果是我把两个文件的组合搞砸了。更正了这一部分后,api就可以正常工作了
$servername = "---";
$username = "---";
$password = "---";
$dbname = "---";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$Fuzzy = $_GET['val'];
// Actual Values
$sql= "SELECT `temp`,`hum`,`moist` FROM `t_measure` ORDER BY id_measure desc LIMIT 1;";
$actual = $conn->query($sql);
要在Arduino端接收数据,这是必需的代码
void setup() {
Serial.begin(115200);
WiFi.begin("ssid", "pass"); //WiFi connection
while (WiFi.status() != WL_CONNECTED) { //Wait for the WiFI connection completion
delay(500);
Serial.println("Waiting for connection");
}
}
void loop() {
if(WiFi.status()== WL_CONNECTED){ //Check WiFi connection status
HTTPClient http;
http.begin("http://....."); //api location
http.addHeader("Content-Type", "text/plain");
String payload = http.getString(); //reading from api
Serial.println(payload);
http.end();
}else{
Serial.println("Error in WiFi connection");
}
谢谢你的回答。你能告诉我是否有什么我需要添加到PHP代码或只是在Arduino方面吗?我会让PHP输出我在答案中输入的内容,而不是简单的$Fuzzy;其余的工作都是在Arduino端使用HTTPClient完成的。它可以在不改变PHP的情况下工作;然后,它将只响应一个包含$Fuzzy的字符串。我曾经用这种方式做过一些事情,但它并不漂亮,在某些情况下可能不起作用。谢谢你的努力,但我想我太落后了,无法实现这一点。我将尝试掌握基本知识,然后尝试此解决方案。谢谢您的回答。你能告诉我是否有什么我需要添加到PHP代码或只是在Arduino方面吗?我会让PHP输出我在答案中输入的内容,而不是简单的$Fuzzy;其余的工作都是在Arduino端使用HTTPClient完成的。它可以在不改变PHP的情况下工作;然后,它将只响应一个包含$Fuzzy的字符串。我曾经用这种方式做过一些事情,但它并不漂亮,在某些情况下可能不起作用。谢谢你的努力,但我想我太落后了,无法实现这一点。我将尝试掌握基本知识,然后尝试此解决方案。