从 MySQL 获取输入变量并将输出发送到 Arduino
Getting input variables from MySQL and sending output to Arduino
我正在将传感器数据保存到 phpMyAdmin 数据库中,我想将该数据(最后一个条目)用作用 PHP 编写的模糊函数的输入变量。
我能以某种方式将输出变量从 fuzzy 发送回我的 Arduino 吗?我将如何在板上配置请求?
<?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 向您的 server/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");
}
我正在将传感器数据保存到 phpMyAdmin 数据库中,我想将该数据(最后一个条目)用作用 PHP 编写的模糊函数的输入变量。
我能以某种方式将输出变量从 fuzzy 发送回我的 Arduino 吗?我将如何在板上配置请求?
<?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 向您的 server/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");
}