PHP pro ovládání arduina:
Kód: Vybrat vše
<?php
header('Content-Type: text/plain');
// put your code here
require_once('Db.php');
Db::connect('127.0.0.1:3306', 'arduino', 'admin', 'Bartolomej');
$water = Db::queryAll('
SELECT * FROM `water`;
');
foreach ($water as $u)
{
$xD = ($u['xD']);
$yD = ($u['yD']);
$xN = ($u['xN']);
$yN = ($u['yN']);
$prodlevaD= ($u['prodlevaD']);
$prodlevaN = ($u['prodlevaN']);
$nepProvoz = ($u['nepProvoz']);
}
$profil = Db::queryAll('
SELECT * FROM `profil`;
');
foreach ($profil as $v)
{
$DTnas = ($v['DTnas']);
$DHnas = ($v['DHnas']);
$DCnas = ($v['DCnas']);
$NTnas = ($v['NTnas']);
$NHnas = ($v['NHnas']);
$NCnas = ($v['NCnas']);
$Thystereze = ($v['Thystereze']);
$Hhystereze = ($v['Hhystereze']);
$Chystereze = ($v['Chystereze']);
$trvaniDneHod = ($v['trvaniDneHod']);
$trvaniDneMin = ($v['trvaniDneMin']);
$SzapHod = ($v['SzapHod']);
$SzapMin = ($v['SzapMin']);
}
$settings = Db::queryAll('
SELECT * FROM `settings`;
');
foreach ($settings as $w)
{
$IP_arduino = ($w['IP_arduino']);
}
/*$bool = Db::queryAll('
SELECT * FROM `bool`;
');
foreach ($bool as $x)
{
$atmosOn = htmlspecialchars($x['atmosOn']);
$vetrakOn = htmlspecialchars($x['vetrakOn']);
$vetrakSvetla = htmlspecialchars($x['vetrakSvetla']);
}*/
echo("$xD;");
echo("$yD;");
echo("$xN;");
echo("$yN;");
echo("$prodlevaD;");
echo("$prodlevaN;");
echo("$DTnas;");
echo("$DHnas;");
echo("$DCnas;");
echo("$NTnas;");
echo("$NHnas;");
echo("$NCnas;");
echo("$Thystereze;");
echo("$Hhystereze;");
echo("$Chystereze;");
echo("$trvaniDneHod;");
echo("$trvaniDneMin;");
echo("$SzapHod;");
echo("$SzapMin");
/*
echo("IP_arduino $IP_arduino ");
/*echo("atmosOn $atmosOn");
echo("vetrakOn $vetrakOn");
echo("vetrakSvetla $vetrakSvetla")*/
?>
Kód: Vybrat vše
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xAA, 0xBB, 0xCC, 0x81, 0x7B, 0x4A }; //fyzicka adresa MAC
IPAddress serverName (10,0,0,139); // webserver
IPAddress ip(10, 0, 0, 150);
EthernetClient client;
void setup(){
if (Ethernet.begin(mac) == 0) {
Serial.println("DHCP nepridelilo adresu, skusam so statickou...");
Ethernet.begin(mac, ip);
}
Serial.begin(115200);
Serial.println("setup");
}
void loop(){
Serial.println("loop");
if (client.connect(serverName, 80)) { //starts client connection, checks for connection
Serial.println("Pripojene");
client.println("GET /ovladani.php"); //download text
client.println("Host: 10.0.0.139");
client.println("Connection: close");
client.println();
/*while (client.connected()) {
String hlavicka = client.readStringUntil('\n');
Serial.println(hlavicka);
if (hlavicka == "\r") {
break;
}*/
String premenna = client.readStringUntil('\n');
delay(5000);
Serial.println("Premenna je:");
Serial.println(premenna);
/*char ovladani [50];
premenna.toCharArray(ovladani ,50);
Serial.println(ovladani);
*/
}
else {
Serial.println("Pripojenie neuspesne"); //chyba ak nie som pripojeny
Serial.println();
}
client.stop(); //ukonc spojenie
delay(5000); //pockaj 5s a vykonaj novu slucku loop
}
Přičemž vypsaný String by měl vypadat takto:23:31:55.889 -> setup
23:31:55.889 -> loop
23:31:55.889 -> Pripojene
23:31:55.889 -> Premenna je:
23:31:55.921 -> 2 ,!,!,!,!, , 5 4 , 0 , 7 4 , 0 ,1,1,50,1,1,1,0
Zkoušel jsem i kód s funkcí client.find ale to mělo prachbídnou úspěšnost. Za 30 min běhu kódu to našlo hledaný výraz jen 2x20,1,3,1,1,0,25,40,400,27,40,400,1,1,50,1,1,1,0
Taky jsem zkoušel knihovnu MySQL connector https://github.com/ChuckBell/MySQL_Connector_Arduino ale v tomto případě se mi nepodařilo ani připojit do databáze. Chybí mi tam někde zadávání do jaké databáze by se mělo arduino připojit.
Pak mě ještě napadlo další řešení a to,že by PHP vytvořilo soubor s proměnými a ten by si arduino potom stáhlo a zněj vytáhlo informace. Ale to není tak elegantní.
Nejdivnější je, že mi to dneska v jednu chvíli vypisovalo správně. Pak jsem se tam ale pokusil použít funkci strtok() a arduino mi přestalo kompilovat, musel sem aktualizovat balíček AVR desek. Ani po vrácení se na předchozí verzi to nefunguje.
Poradíte mi někdo prosím jak správně ovládat arduino přes webovou stránku? Jak ho ovládáte vy?