Arduino schéma - arduino.sk

riadenie kurenia cez web

Programovanie arduina
Obrázok užívateľa
Príspevky: 28
Registrovaný: Pon 13. Okt 2014 16:42:00
Bydlisko: Ružomberok

riadenie kurenia cez web

Poslaťod speko2 » Pon 15. Feb 2016 22:02:04

Zdravim pokusam sa vytvorit riadenie el.vykurovania na dialku ale narazil som na problem ako dostat z retazca samotne cislo teda nastavenu teplotu a toto cislo ulozit do premennej aby som mohol premennu dalej pouzivat
Kód: Vybrať všetko
  //citanie nastavenej teploty
  Serial.println("Citam nastavenu teplotu A");
  readString = "TziadA";//aka je nastavana teplotaA
    if ( exosite.writeRead(writeString ,readString, returnString)){
    Serial.println("OK");
    Serial.print("Nastavena teplotu A je: ");
    Serial.println(returnString);//vrati sa mi hodnota TziadA=23
    //int TziadA =?????/tu chcem dosadit len to cislo co sa mi vrati z webu
  }else{
    Serial.println("Nepodarilo sa nacitat teplotu A");
  }


Ďakujem mozno budem potrebovat do buducna viac rad :)

Príspevky: 33
Registrovaný: Pia 26. Jún 2015 21:17:41

Re: riadenie kurenia cez web

Poslaťod barado » Pon 15. Feb 2016 22:56:32

toto Ti urcite pomoze

int TziadA =atoi(returnString);

http://www.tutorialspoint.com/c_standard_library/c_function_atoi.htm

Obrázok užívateľa
Príspevky: 28
Registrovaný: Pon 13. Okt 2014 16:42:00
Bydlisko: Ružomberok

Re: riadenie kurenia cez web

Poslaťod speko2 » Uto 16. Feb 2016 3:34:51

Nepomohlo :( vyhadzuje chybu
EXOSITE_TERMOSTAT_1_1:110: error: cannot convert 'String' to 'const char*' for argument '1' to 'int atoi(const char*)' navod moc nepomohol spanielska dedina pre mna :( Tu je pre istotu cely kod ktrory som zatial splodil
Kód: Vybrať všetko

#include <EEPROM.h>
#include <SPI.h>
#include <Ethernet.h>
#include <Exosite.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONEWIRE 7 //pin to use for One Wire interface

//String cikData = "0000000000000000000000000000000000000000";  // <-- Fill in your CIK here! (https://portals.exosite.com -> Add Device)
byte macData[] = {0x22, 0xA5, 0x0B, 0xC3, 0xDC, 0xAC};        // <-- Fill in your Ethernet shield's MAC address here.
char unique_id[11] = "0052B50884"; //JEDINECNY IDENTIFIKATOR NA EXOSITE

String readString;
String writeString;
String returnString;
String readParam ;
String writeParam ;
char buffer[7];

float TskutA ;//namerana teplota
int TziadA;//pozadovana teplota
int TstavA;//stav kurenia kuri-nekuri
int TvipA;//vypinac konvektora
int ReleA=2;//rele konvektora
//int atoi(const char *str);
OneWire oneWire(ONEWIRE);
DallasTemperature sensors(&oneWire);

//ADRESY CIDIEL DALAS
/*DeviceAddress T0 = { 0x28, 0xB8, 0xFA, 0x85, 0x04, 0x00, 0x00, 0x65 };
DeviceAddress T1 = { 0x28 ,0xFF, 0x67, 0x27, 0x53, 0x04, 0x00, 0x5A };
DeviceAddress T2 = { 0x28, 0x74, 0x4F, 0xC3, 0x04, 0x00, 0x00, 0xF3 };
DeviceAddress T3 = { 0x28, 0xFF, 0x04, 0x91, 0x74, 0x04, 0x00, 0x73 };
DeviceAddress T4 = { 0x28, 0x6A, 0x3B, 0xC3, 0x04, 0x00, 0x00, 0xC9 };
DeviceAddress T5 = { 0x28, 0x56, 0x3C, 0xB0, 0x06, 0x00, 0x00, 0x67 };
DeviceAddress T6 = { 0x28, 0x7A, 0x0D, 0xD4, 0x04, 0x00, 0x00, 0x34 };
DeviceAddress T7 = { 0x28, 0xF5, 0x08, 0x86, 0x04, 0x00, 0x00, 0xF7 };*/
EthernetClient client;
//Exosite exosite(cikData, &client);//ked používam CIK
Exosite exosite(&client);//ked pouzivam ID

void setup(){   
  Serial.begin(115200);
  Serial.println("Priprava");
  pinMode(ReleA, OUTPUT);
  Ethernet.begin(macData);
  // wait 3 seconds for connection:
  delay(3000);
}
void loop(){
Serial.println("Nacitanie hodnot z teplotnych senzorov...");
sensors.requestTemperatures(); // nacitanie teplot zo snimacov ds18b20
//TskutA = sensors.getTempC(T0);
TskutA = sensors.getTempCByIndex(0);
Serial.print("Teplota TskutA :");
Serial.print(TskutA);
  Serial.println(" C");

    Serial.println("Posielam teplotu A na Exosite portal...");
    //teplotaA
    readParam = "";        //nothing to read back at this time e.g. 'control&status' if you wanted to read those data sources
    writeParam = "TskutA="; //parameters to write e.g. 'temp=65.54' or 'temp=65.54&status=on'
   
    String TskutAvalue = dtostrf(TskutA, 1, 2, buffer); // convert float to String, minimum size = 1, decimal places = 2
   
    writeParam += TskutAvalue;    //add converted temperature String value
    if ( exosite.writeRead(writeParam, readParam, returnString)) {
      Serial.println("Exosite OK"); 
            if (returnString != "") {
        Serial.println("Teplota A odoslana");
      }
    }
    else {
      Serial.println("Exosite chyba Teplota A neodoslana");
    }
    delay(1000);
   
//citanie stavu vypinača
Serial.println("Citam stav vypinaca A");
  readString = "TvipA";
  if ( exosite.writeRead(writeString, readString, returnString)){
    Serial.println("OK");
    Serial.print("Stav vypinaca A je: ");
    Serial.println(returnString);
   
  }else{
    Serial.println("Error");
  }
      if (returnString == "TvipA=1"){
      TvipA=1;
      }else{
        TvipA=0;
        }
    returnString = ""  ;
  delay(1000);
  //citanie nastavenej teploty
  Serial.println("Citam nastavenu teplotu A");
  readString = "TziadA";//aka je nastavana teplotaA
    if ( exosite.writeRead(writeString ,readString, returnString)){
    Serial.println("OK");
    Serial.print("Nastavena teplotu A je: ");
    Serial.println(returnString);//vypis na seriovom porte TziadA=23

    TziadA =atoi(returnString);
  }else{
    Serial.println("Nepodarilo sa nacitat teplotu A");
  }
//zapínanie spotrebiča
digitalWrite(ReleA, TvipA);
 
  Serial.println("pauza 5 sec");
  delay(5000);
 
  Serial.println(TvipA);
  Serial.println(TziadA);
 
}


Príspevky: 33
Registrovaný: Pia 26. Jún 2015 21:17:41

Re: riadenie kurenia cez web

Poslaťod barado » Uto 16. Feb 2016 12:39:01

speko2 píše: navod moc nepomohol spanielska dedina pre mna :(


Neboj, aj pre mna. Takze kedze pouzivas premennu typu object String. Tak potom takto:

int TziadA = returnString.toInt();

https://www.arduino.cc/en/Reference/StringToInt

Obrázok užívateľa
Príspevky: 28
Registrovaný: Pon 13. Okt 2014 16:42:00
Bydlisko: Ružomberok

Re: riadenie kurenia cez web

Poslaťod speko2 » Uto 16. Feb 2016 13:48:47

barado píše:int TziadA = returnString.toInt();


Toto som hned skusal ale vysledok prevodu je stale Tziad == 0

Kód: Vybrať všetko
String returnString ="Tziad=55";
int TziadA;
void setup() {
Serial.begin(115200);
Serial.println("String toInt():");
Serial.println();
}
void loop() {
TziadA = returnString.toInt();
Serial.println(TziadA);
delay(7000);
}


vysledok nula cakal som 55
ako tu 55 odtial dostanem :roll:
Naposledy upravil speko2 dňa Uto 16. Feb 2016 14:11:28, celkovo upravené 1

Príspevky: 33
Registrovaný: Pia 26. Jún 2015 21:17:41

Re: riadenie kurenia cez web

Poslaťod barado » Uto 16. Feb 2016 14:11:11

speko2 píše: //citanie nastavenej teploty
Serial.println("Citam nastavenu teplotu A");
readString = "TziadA";//aka je nastavana teplotaA
if ( exosite.writeRead(writeString ,readString, returnString)){
Serial.println("OK");
Serial.print("Nastavena teplotu A je: ");
Serial.println(returnString);//vypis na seriovom porte TziadA=23
[/code]


Aha ...
Takze v tomto pripade pouzi najskor toto:

https://www.arduino.cc/en/Reference/StringSubstring

a potom az toto:

https://www.arduino.cc/en/Reference/StringToInt

A preco??
Prehliadol som to, ze z tej stranky Ti vracia spat cely String v tvare "TziadA=23" a kedze:


toInt()
Description

Converts a valid String to an integer. The input string should start with an integer number. If the string contains non-integer numbers, the function will stop performing the conversion.


V preklade ak String obsahuje aj nenumericke znaky, tak funkcia zastavi konverziu na int ...

Obrázok užívateľa
Príspevky: 28
Registrovaný: Pon 13. Okt 2014 16:42:00
Bydlisko: Ružomberok

Re: riadenie kurenia cez web

Poslaťod speko2 » Uto 16. Feb 2016 15:26:48

Funguje vdaka za pomoc :D
Kód: Vybrať všetko
String returnString ="TziadA=55";
int TziadA;
void setup() {
Serial.begin(115200);
Serial.println("String toInt():");
Serial.println();
}
void loop() {
String hodnota = returnString.substring(7);
TziadA= hodnota.toInt();

Serial.println(TziadA);
delay(7000);
}

Obrázok užívateľa
Príspevky: 28
Registrovaný: Pon 13. Okt 2014 16:42:00
Bydlisko: Ružomberok

Re: riadenie kurenia cez web

Poslaťod speko2 » Ned 21. Feb 2016 12:19:33

Tu je ukážka z môjho už skoro dokončeného projektu.
https://youtu.be/MJiV8y69iUU

Príspevky: 174
Registrovaný: Ned 16. Mar 2014 23:22:00

Re: riadenie kurenia cez web

Poslaťod posjirka » Pon 22. Feb 2016 17:07:33

to vypadá dost dobře. Jednoduché a funkční.
Nezkoušel jsi i něco jiného než Exosite pro webovou vizualizaci, případně nějáké zkušenosti s tím?

Obrázok užívateľa
Príspevky: 28
Registrovaný: Pon 13. Okt 2014 16:42:00
Bydlisko: Ružomberok

Re: riadenie kurenia cez web

Poslaťod speko2 » Uto 23. Feb 2016 13:37:36

Nie neskúšal len som letmo pozrel na /Plotly,Phant,Thingspeak,IBM Bluemix/ ale Exosite je asi najjednoduchšie a existuje aj knižnica skôr ma to ťahá vytvoriť vlastnú stránku a vlastný server ale php... mi moc nejde musím ešte hodne čítať :)

Príspevky: 174
Registrovaný: Ned 16. Mar 2014 23:22:00

Re: riadenie kurenia cez web

Poslaťod posjirka » Štv 25. Feb 2016 20:36:58

ok díky za info ... snad jednou :)
Teď chci zkusit vyřešit týdenní termostat přes www stránku generovanou samotným arduinem.
Zkoušel jsem si udělat stránku klsicky a má 15kb jen jako klikačka do pole 24h/7dní.
Takže budu muset zkusit generovat html kod přes stav arduina ... to jsem celý já, proč využít prostro na sd kartě když si to můžu zkomplikovat :)

Späť na Software