Ahoj, díky za tipy, zatím se zdá, že po přidání do PHP "charset=utf-8' " a nastavení digitálního pinu 4 na Ethernet shieldu na HIGH to jede
zatím 40 min bez jediného záseku..
Kód arduino, kdyby se někomu hodil:
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, 140); // webserver
IPAddress ip(10, 0, 0, 150);
EthernetClient client;
void setup() {
Serial.begin(115200);
if (Ethernet.begin(mac) == 0) {
Serial.println("DHCP nepridelilo adresu, skusam so statickou...");
Ethernet.begin(mac, ip);
}
else {
Serial.println("pripojeni pres DHCP");
}
pinMode(4, OUTPUT);
digitalWrite(4, HIGH);
}
void 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.140");
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 [500];
premenna.toCharArray(ovladani ,500);
Serial.println(ovladani);*/
String xDStr = getValue(premenna, ';', 0);
int xD = xDStr.toInt();
Serial.println(xD);
String yDStr = getValue(premenna, ';', 1);
int yD = yDStr.toInt();
Serial.println(yD);
String xNStr = getValue(premenna, ';', 2);
int xN = xNStr.toInt();
Serial.println(xN);
String yNStr = getValue(premenna, ';', 3);
int yN = yNStr.toInt();
Serial.println(yN);
String prodlevaDStr = getValue(premenna, ';', 4);
int prodlevaD = prodlevaDStr.toInt();
Serial.println(prodlevaD);
String prodlevaNStr = getValue(premenna, ';', 5);
int prodlevaN = prodlevaNStr.toInt();
Serial.println(prodlevaN);
String nepProvozStr = getValue(premenna, ';', 6);
int nepProvoz = nepProvozStr.toInt();
Serial.println(nepProvoz);
String DTnasStr = getValue(premenna, ';', 7);
int DTnas = DTnasStr.toInt();
Serial.println(DTnas);
String DHnasStr = getValue(premenna, ';', 8);
int DHnas = DHnasStr.toInt();
Serial.println(DHnas);
String DCnasStr = getValue(premenna, ';', 9);
int DCnas = DCnasStr.toInt();
Serial.println(DCnas);
String NTnasStr = getValue(premenna, ';', 10);
int NTnas = NTnasStr.toInt();
Serial.println(NTnas);
String NHnasStr = getValue(premenna, ';', 11);
int NHnas = NHnasStr.toInt();
Serial.println(NHnas);
String NCnasStr = getValue(premenna, ';', 12);
int NCnas = NCnasStr.toInt();
Serial.println(NCnas);
String ThysterezeStr = getValue(premenna, ';', 13);
int Thystereze = ThysterezeStr.toInt();
Serial.println(Thystereze);
String HhysterezeStr = getValue(premenna, ';', 14);
int Hhystereze = HhysterezeStr.toInt();
Serial.println(Hhystereze);
String ChysterezeStr = getValue(premenna, ';', 15);
int Chystereze = ChysterezeStr.toInt();
Serial.println(Chystereze);
String trvaniDneHodStr = getValue(premenna, ';', 16);
int trvaniDneHod = trvaniDneHodStr.toInt();
Serial.println(trvaniDneHod);
String trvaniDneMinStr = getValue(premenna, ';', 17);
int trvaniDneMin = trvaniDneMinStr.toInt();
Serial.println(trvaniDneMin);
String SzapHodStr = getValue(premenna, ';', 18);
int SzapHod = SzapHodStr.toInt();
Serial.println(SzapHod);
String SzapMinStr = getValue(premenna, ';', 19);
int SzapMin = SzapMinStr.toInt();
Serial.println(SzapMin);
}
else {
Serial.println("Pripojenie neuspesne"); //chyba ak nie som pripojeny
Serial.println();
}
//client.flush();
client.stop(); //ukonc spojenie
delay(5000); //pockaj 5s a vykonaj novu slucku loop
}
String getValue(String data, char separator, int index)
{
int found = 0;
int strIndex[] = { 0, -1 };
int maxIndex = data.length() - 1;
for (int i = 0; i <= maxIndex && found <= index; i++) {
if (data.charAt(i) == separator || i == maxIndex) {
found++;
strIndex[0] = strIndex[1] + 1;
strIndex[1] = (i == maxIndex) ? i + 1 : i;
}
}
return found > index ? data.substring(strIndex[0], strIndex[1]) : "";
}
a kód PHP:
Kód: Vybrat vše
<?php
header('Content-Type: text/plain; charset=utf-8');
// 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("$nepProvoz;");
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")*/
?>
výpis v Serial monitoru:
21:29:25.883 -> Pripojene
21:29:30.897 -> Premenna je:
21:29:30.897 -> 20;5;30;5;1;1;1;25;75;1250;23;40;400;1;1;50;18;0;16;20
21:29:30.897 -> 20
21:29:30.897 -> 5
21:29:30.897 -> 30
21:29:30.897 -> 5
21:29:30.897 -> 1
21:29:30.897 -> 1
21:29:30.897 -> 1
21:29:30.897 -> 25
21:29:30.897 -> 75
21:29:30.897 -> 1250
21:29:30.897 -> 23
21:29:30.897 -> 40
21:29:30.897 -> 400
21:29:30.897 -> 1
21:29:30.897 -> 1
21:29:30.897 -> 50
21:29:30.897 -> 18
21:29:30.897 -> 0
21:29:30.897 -> 16
21:29:30.897 -> 20
Díky všem.
Mám ještě jednu otázku, tyto hodnoty bych rád nějak porovnával s předchozíma hodnotama a pokud se některá z nich změnila, tak bych ji rád uložil do EEPROM. Nechci přepisovat všechny na jednou, chci přepsat jenom tu změněnou.
něco jako:
Kód: Vybrat vše
if (hodnota != hodnotaWeb){
hodnota = hodnotaWeb;
zapis hodnota do eeprom;
}
nebo existuje nějaká lepší cesta, při které nemusím vytvářet další proměnnou?