从 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");   

}