Cca po dvou minutách vypisování blábolů se arduino zaseklo a nevypisuje nic. Vůbec z toho nejsem moudrej, tohle přestává bejt věda..13:36:22.118 -> Pripojene
13:36:27.126 -> Premenna je:
13:36:27.126 -> 20;5;30;5;1;1;0;25;75;1250;23;40;400;1;1;50;18;0;16;20
.
.
.
14:12:26.130 -> Pripojene
14:12:31.166 -> Premenna je:
14:12:31.166 -> 20;5;30;5;1;1;0;25;75;1250;23;40;400;1;1;50;18;0;16;20
14:12:36.172 -> Pripojene
14:12:42.178 -> Premenna je:
14:12:42.178 -> 20;5;30;5;1; ; ; 5!7!;!2!0!2!; 0!4 0!1!1!5 ;!8!0!1 ; 0
.
.
.
14:14:21.336 -> Pripojene
14:14:26.364 -> Premenna je:
14:14:26.364 -> 20;5;30;5;1;1 0!2!;!5!1 5 ; 3!4 ; 0 ;!;!;!0!1 ; ;!6!2
14:14:31.384 -> Pripojene
Ovládání arduina přes web
Re: Ovládání arduina přes web
Ted mi to četlo cca půl hodiny ze stránky správně a pak toto:
Re: Ovládání arduina přes web
Nevím pomocí čeho se připojuješ k serveru, máš nějaký ten Eth shield s SD kartou? Pokud tu kartu nevyužíváš, je (prý) lépe ji zakázat. Nevím z čeho ten poznatek pramení, někde jsem na to kdysi narazil a tak to tak používám. V setup() stačí mít:
Dále pak samotné čtení dat bych trochu upravil. Jednak by se serveru mohla hodit specifikace protokolu, dále pak bych četl z Eth bufferu až když bude uvolněný.
Pokud to ani tak nepůjde, tak bych se podíval na obsazení zbytku pinů, zda nemáš připojeno něco na pin, který je jinak využíván shieldem.
Nebo vyměnit board, nebo vyměnit shield.
Kód: Vybrat vše
pinMode(4,OUTPUT);
digitalWrite(4,HIGH);
Kód: Vybrat vše
if (client.connect(serverName, 80)) {
Serial.println("connected");
client.println("GET /ovladani.php HTTP/1.1");
client.println("Host: 10.0.0.140");
client.println("Connection: close");
client.println();
}
else {
Serial.println("connection failed");
Serial.println();
}
while(client.connected() && !client.available()) delay(1);
while (client.connected() || client.available()) {
char c = client.read();
Serial.print(c);
}
Serial.println();
Serial.println("disconnecting.");
Serial.println("==================");
Serial.println();
client.stop();
Nebo vyměnit board, nebo vyměnit shield.
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: Ovládání arduina přes web
Ano, blbne to - ne když kartu nevyužíváš, ale když tam není zastrčená - bývají problémy.KamilV píše: ↑11 srp 2019, 22:01Nevím pomocí čeho se připojuješ k serveru, máš nějaký ten Eth shield s SD kartou? Pokud tu kartu nevyužíváš, je (prý) lépe ji zakázat. Nevím z čeho ten poznatek pramení, někde jsem na to kdysi narazil a tak to tak používám. V setup() stačí mít:Kód: Vybrat vše
pinMode(4,OUTPUT); digitalWrite(4,HIGH);
Další problém tohoto shieldu a UNO je, že se dotýká plech od konektoru na LAN něčeho na UNO, já tam dal plastovou folii mazi to.
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Re: Ovládání arduina přes web
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:
a kód PHP:
výpis v Serial monitoru:
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:
nebo existuje nějaká lepší cesta, při které nemusím vytvářet další proměnnou?
![Very Happy :D](./images/smilies/icon_e_biggrin.gif)
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]) : "";
}
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")*/
?>
Díky všem.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
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;
}
Re: Ovládání arduina přes web
Tak pro vytazeni hodnoty z webu ti staci v podstate jedna univerzalni promenna, do ktere nactes zrovna vyparsovanou hodnotu.
Pokud to stejne ukladas do eeprom, tak to z eeprom muzes i normalne pouzivat pro vypocty a nemit to vubec v RAM.
a pak tu novou hodnotu z webu (v univerzalni promenne) proste priradis (nebo ne - podle porovnani se stavajici hodnotou v eeprom) do eeprom a dal pouzivas hodnotu z eeprom.
Pokud to stejne ukladas do eeprom, tak to z eeprom muzes i normalne pouzivat pro vypocty a nemit to vubec v RAM.
a pak tu novou hodnotu z webu (v univerzalni promenne) proste priradis (nebo ne - podle porovnani se stavajici hodnotou v eeprom) do eeprom a dal pouzivas hodnotu z eeprom.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 32 hostů