webserver s IR ako citat IR kody z SD karty

Odpovědět
jozinecko
Příspěvky: 7
Registrován: 17 bře 2018, 15:02
Reputation: 0

webserver s IR ako citat IR kody z SD karty

Příspěvek od jozinecko » 29 bře 2018, 17:14

Ahojte, prosim viete mi pomoct s dalsim projektom?

chcel by som spravit take jednoduche home automation, okrem zaluzii, co mi nijak nevychadza smartovo, iba jednoducho, ze rele sa zopne a pojdu hore a vypne a pojdu dole, na zaluziach je koncovy spinac ale nan sa uz neviem pripojit a inak asi neviem zistit polohu zaluzie (ci su hore, ci otvorene, lebo zatvorene) takze jedine asi casovo (kratke zopnutie pre krok a dlhe pre uplne otvorenie alebo zatvorenie)

problem je, ze chcem vyuzit aj ovladanie klimi cez IR a ovladat cez webserver. A kedze klima vysiela z dialkoveho vsetko nastavenie jednym kodom, tak musim na kazdu funkciu tzn potrebujem pre kazdy stupen °C musi odoslat aj komplet s nastavenim ventilatora aj ci ma ohrievat alebo chladit (viac netreba)
myslim si, ze problem bude v pamati arduina a najlepsie by bolo vyuzit SD kartu, kde vzdy pri vyvolani adresy napr.: /ip/?chladenie_22_auto odosle kod z sd karty bud bude kazdy prikaz v samostatnom subore alebo jeden dlhy text a tam bude vyhladavat, asi najrozumnejsie je vytvorit subory presne typu:

(rezim_stupne_ventilator)

chladenie_17_auto
chladenie_18_auto
..
chladenie_30_auto

potom:
chladenie_17_low
..
chladenie_30_low

potom:
ohrievanie_17_auto
..
ohrievanie_30_auto

je to mozne takto spravit?

momentlne vyuzivam tento kod (su tam aj nejake skusobne prikazy ked som chcel vyuzit aj LCD avsak neni to mozne lebo IR potrebuje PIN 3 a pri zapojeni LCD je tento pin vyuzity a s inym mi LEDka nevysielala nic):

Kód: Vybrat vše

/* *** *** ***
  Mega -  ok       18.758/253.952 - 2.090/8.192
  Leonardo - ok    21.498/28.672 - 2.059/2.560
  UNO - no ok      18.800/32.256 - 2.090/2.048
*** *** *** */

#include <String.h>
#include <SPI.h>
#include <Ethernet.h>
#include "IRremote.h"
#include <DHT.h>
#include <LiquidCrystal.h>

/*
  controllare un condizionatore via web
  con sensori di temperatura e umidità
  ARDUINO UNO - limitato
  Mega o Leonardo
  ETHERNET SHIELD
  DHT22, IR led
*/
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // mac address
byte ip[] = { 192, 168, 82, 135 }; // ip arduino internet in
byte gateway[] = { 192, 168, 82, 1 }; // internet access via router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
EthernetServer server(80); //server port

IRsend irsend;
int khz = 38; //NB Change this default value as neccessary to the correct modulation frequency


// define some values used by the panel and buttons
int lcd_key     = 0;
int adc_key_in  = 0;
#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5

// read the buttons
int read_LCD_buttons()
{
 adc_key_in = analogRead(0);      // read the value from the sensor 
 // my buttons when read are centered at these valies: 0, 144, 329, 504, 741
 // we add approx 50 to those values and check to see if we are close
 // For V1.0 comment the other threshold and use the one below:
 if (adc_key_in < 50)   return btnRIGHT;  
 if (adc_key_in < 195)  return btnUP; 
 if (adc_key_in < 380)  return btnDOWN; 
 if (adc_key_in < 555)  return btnLEFT; 
 if (adc_key_in < 790)  return btnSELECT;   
 return btnNONE;  // when all others fail, return this...
}

// ON HEAT
unsigned dry[] = {
                  4560, 4416, 624, 1632, 628, 1632, 624, 1632, 628, 508, 620, 508, 620, 508, 620, 508, 620, 508, 620, 1636, 624, 1636, 624, 1632, 628, 504, 624, 504, 624, 504, 624, 504, 624, 508, 624, 504, 624, 1632, 624, 504, 624, 504, 628, 504, 624, 504, 624, 504, 624, 504, 624, 1632, 628, 508, 648, 1608, 620, 1636, 624, 1636, 620, 1636, 624, 1636, 652, 1604, 624, 45964, 4560, 4416, 648, 1608, 624, 1632, 628, 1636, 620, 508, 620, 508, 624, 508, 648, 480, 620, 508, 620, 1636, 628, 1628, 652, 1608, 624, 504, 628, 504, 648, 480, 648, 480, 624, 504, 624, 504, 628, 1628, 628, 504, 624, 504, 624, 504, 624, 508, 624, 504, 652, 476, 652, 1608, 620, 508, 624, 1632, 628, 1632, 624, 1632, 628, 1628, 652, 1608, 624, 1632, 628,
};
// OFF - AC
unsigned OFF[] = {
                  4536, 4444, 620, 1640, 620, 1640, 616, 1640, 624, 528, 600, 532, 596, 536, 592, 536, 592, 536, 592, 1636, 624, 1636, 620, 1636, 624, 532, 596, 532, 596, 536, 592, 540, 588, 536, 596, 532, 596, 1636, 620, 536, 596, 536, 592, 532, 596, 536, 596, 532, 596, 536, 592, 1636, 620, 536, 592, 1636, 624, 1636, 620, 1624, 636, 1636, 620, 1640, 616, 1640, 620, 
};

// ON cool 23°C FAN-auto - AC
unsigned COOL[] = {
                  4536, 4444, 624, 1636, 620, 1636, 624, 1636, 620, 536, 596, 532, 596, 536, 592, 536, 592, 536, 592, 1636, 624, 1636, 620, 1636, 624, 532, 596, 536, 592, 536, 592, 536, 592, 536, 596, 532, 596, 1640, 616, 536, 592, 536, 596, 532, 596, 536, 592, 536, 592, 536, 592, 1640, 620, 536, 596, 1636, 620, 1636, 624, 1636, 620, 1636, 620, 1640, 616, 1640, 620
                  };


#define DHTPIN 22 // PIN data of DHT22
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);

int irPin = 3; // pin IR led
String readString; //string
boolean COOLON = false; // flag status Cooling
boolean DRYON = false; // flag status Drying

boolean textOff = false;

int lcdState = 1; 

unsigned long previousMillis = 0;        // will store last time LED was updated

// constants won't change:
const long interval = 7000;  


void setup() {
  Ethernet.begin(mac, ip, gateway, subnet);
  dht.begin();
  pinMode(irPin, OUTPUT);
  Serial.begin(115200);

  lcd.begin(16, 2);              // start the library
 lcd.setCursor(0,0);
 
 // lcd.print("Push the buttons"); // print a simple message
}

/*
if (DRYON) {
           
           lcd.begin(16, 2); 
          lcd.setCursor(0,0);
          lcd.print("Ohrev");
          lcd.setCursor(0,1);
          lcd.print("je zapnuty");
          
          }
          else if (COOLON) {
          
           lcd.begin(16, 2); 
          lcd.setCursor(0,0);
          lcd.print("Klima");
          lcd.setCursor(0,1);
          lcd.print("je zapnuta");
 
          }
          else {


  lcd.begin(16, 2); 
          lcd.setCursor(0,0);
 lcd.print("Teplota: ");
 lcd.print(t); 
  lcd.print(" C");
 lcd.setCursor(0,1);
 lcd.print("Vhkost: ");
 lcd.print(h);   
 lcd.print(" %");
      
          }
    
  }*/


void loop() {

  float t = dht.readTemperature(); // Value of Temp
  float h = dht.readHumidity(); // Value of Humidity
  
// show temp and hum
 /*
*/


lcd.setCursor(0,0);
 lcd.print("Teplota: ");
 lcd.print(t); 
  lcd.print(" C");
 lcd.setCursor(0,1);
 lcd.print("Vhkost: ");
 lcd.print(h);   
 lcd.print(" %");
 

  /*inizio client*/
  EthernetClient client = server.available();
  if (client) {
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        readString.concat(c); //memorizzo ogni carattere della stringa
        //if HTTP request has ended
        if (c == '\n' && currentLineIsBlank) {
          Serial.print(readString);

          if (readString.indexOf("L=0") > 0) {
            if (COOLON || DRYON) { // if is ON, switch it OFF
              //Serial.println("AC -> OFF");
              irsend.sendRaw(OFF, sizeof(OFF) / sizeof(int), khz);
              COOLON = false;
              DRYON = false;          
            }
          }
          else if (readString.indexOf("L=1") > 0) { // lettura del valore se il AC si deve accendere
            if (!DRYON) { //se non è acceso
              //Serial.println("Dry ON");
              irsend.sendRaw(dry, sizeof(dry) / sizeof(int), khz);
              DRYON = true;
              COOLON = false;
            }
          }
          else if (readString.indexOf("L=2") > 0) {
            if (!COOLON) { //se è acceso
              //Serial.println("Cool ON");
              irsend.sendRaw(COOL, sizeof(COOL) / sizeof(int), khz);
              COOLON = true;
              DRYON = false;
            }
          }


unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;

    // if the LED is off turn it on and vice-versa:



 if (DRYON) {
           
          
          
          }
          else if (COOLON) {
          
          
 
          }
          else {

      
          }
    
  }

          // COSTRUZIONE PAGINA HTML
          client.println("HTTP/1.1 200 OK.....");
          client.println("Content-Type: text/html");
          client.println();
          // inizializzo pagina (da togliere se uso ajax)
          client.print("<html><head><title>MoniCris AC</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' ></head><body>");
          //iniza il body
          client.println("<div style='width:960px; height:1136px;'>"); //risoluzione per nokia 5800 640x360, iPhone4 960x640 pixel, iPhone5 1136x640
          client.println("<h1>Home STATUS</h1><hr />");
          //Scrive sul browser il valore del termistore
          client.println("<p>TEMPERATURE = ");
          client.print(t);
          client.println(" *C <br /></p>");

          //Scrive sul browser il valore della fotoresistenza
          client.println("<p>HUMIDITY = ");
          client.print(h);
          client.println(" % <br /></p>");

          // link per aggiornare pagina e valori
          client.print("<h2>Refresh: <a href=''>CHECK</a></h2><hr />");
          client.println("<h1>AC CONTROL</h1>");
          //scrivo il AC status
          client.print("<font size='5'>Status: ");
          if (DRYON) {
            client.println("<span style='color:green; font-weight:bold;'>DRY</span></font>");
          }
          else if (COOLON) {
            client.println("<span style='color:green; font-weight:bold;'>COOL</span></font>");
          }
          else {
            client.println("<span style='color:grey; font-weight:bold;'>OFF</span></font>");
          }

          
          client.print("<h2><a href='/?L=1'> DRY </a> | <a href='/?L=0'> OFF </a> | <a href='/?L=2'> COOL </a></h2>");

          //semnătura ;)
          client.println("<hr />");
          client.print("<h4>MoniCris Home Project 2015</h4>");
          client.println("<hr />");

          // chiudo il div
          client.println("</div>");
          // chiudo pagina da togliere se uso ajax
          client.println("</body></html>");

          // pulisco la stringa per la successiva lettura
          readString = "";
          //fermo il client
          client.stop();

        } //if c == /n
      } // if client available
    } // while client connesso
   } // FINE if client
} // fine loop


jozinecko
Příspěvky: 7
Registrován: 17 bře 2018, 15:02
Reputation: 0

Re: webserver s IR ako citat IR kody z SD karty

Příspěvek od jozinecko » 07 dub 2018, 18:48

nikto mi nevie prosim pomoct?
nasiel som na nete stranku firmy remotec ale neviem sa dostat k tej databaze.. takze asi jedine si vytvorit vlastnu.

velmi pekne dakujem.

marh
Příspěvky: 37
Registrován: 19 bře 2018, 15:13
Reputation: 0

Re: webserver s IR ako citat IR kody z SD karty

Příspěvek od marh » 07 dub 2018, 22:27

napíš či ti ovládač vysiela kód pri každom stlačení a nie ako sekvencie po nastavení hodnôt v menu(pochybujem, že sekvencie)
dlhý text ale aspoň vodítko
dúfam, že môžem poslať link na inú stranke kde je arduino
https://www.zive.cz/clanky/pojdme-progr ... ault.aspx
a
https://arduino.cz/forum/tema/ovladani-klimatizace/

Môžeš použiť I2C LCD a ESP8266 s WIFI bez ARDUINA.
Pre LCD si definuješ konektory, ktoré pripojiť alebo použiješ I2C LCD(16x2 alebo 20x2). Riadkový displej nepoužíva prerušenie.
Arduino NANO má prerušenia 0 a 1 na konektore 2 a 3. Prijímacia IR LED nepotrebuje prerušenie(skôr RF).
Vysielacia IR LED na hociktorom výstupnom konektore.
int irPin = 3; // pin IR led ,,,,zmeň si na 10 a daj tam LED,,,,možno IR LIBRARY používa PWM

ANALOG OUTPUT (PWM) 8bit (max 255)
arduino nano 3, 5, 6, 9, 10, 11

Diaľkové ovládače nemajú plávajúci kód. Skôr RF pre autá.
IR kódy si naskenuješ v DEMO programe a len skopíruješ výpis na sériovom porte a vložíš do programu pre IR prijímaciu/vys.diódu. Pokiaľ knižnica rozpozná kódovanie.
https://github.com/z3t0/Arduino-IRremot ... s/IRrecord
Ak chceš ovládať arduino: napríklad 4 tlačidla potom v CASE zistíš aké bolo stlačené a urobíš akciu ak chceš pomocou IR prijímacej diódy ovládať arduino.
http://www.circuitbasics.com/arduino-ir ... -tutorial/
Pri odosielaní cez vysielaciu IR diódu - najprv si naskenuj IR ovládač od klimy.
https://github.com/z3t0/Arduino-IRremote



Ak ti klimatizácia vysiela viac kódov po sebe ako čas+teplota+chladenie tak to možno bude ťažšie so skenovaním.
Zisti či jedno stlačenie je jeden kód. Lebo ty asi ideš do menu a nastavuješ teplotu a pod. to znamená, že potrebuješ vyslať sekvencie kódov ale to pochybujem.
napr. menu UP UP right right ok exit t.j. menu ,2x do menu pre teplotu, 2x z 22c a 24c, ulož, exit ,,,
to je 7x kód alebo sekvencia po poslednom kóde po potvrdení zmien.
Obrázek
http://www.instructables.com/id/Control ... droid-and/

AK naskenuješ osobitne nastavenie, čas a pod a teploty tak si do dáš do poľa []
Cez web odošleš ako nastavenie+čas+teplota 192.168.11/?n1c1t1
budú sa meniť len čísla a arduino podľa poľa skombinuje všetky tri nastavenia
Alebo ak nie je miesto vo flash pamäti tak kódy môžeš odosielať cez php/html či android aplikáciu a vytvoriť časovače mimo arduina.
Ak kúpiš hotový produkt, ktorý využíva cloud tak nemáš istotu kedy to skončí a lepšie je mať svoju doménu( php,databázu mysql, html atď).
DOMOTICZ atď ako Int.domácosť na Raspberry pi/PC

unsigned nast[] = { 4536, 4444, 624, 1636, 620 }; on off
unsigned cas[] = { 4536, 4444, 624, 1636, 620 }; hhmm,,,na čas možno nepotrebuješ pole ak sa k
unsigned tepl[] = { 4536, 4444, 624, 1636, 620 }; //apr. 21c 22c 23c 24c atď

Nemám osciloskop ani klimatizáciu a neviem až tak všetko o arduine


LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
čiže takto sú rozmiestené konektory pre 4-vodičový prenos LiquidCrystal(rs, enable, d4, d5, d6, d7)
https://www.arduino.cc/en/Reference/Liq ... onstructor

Pozri, neviem aké IR kódy sú kompatibilné a najmä pre klimatizácia ak vysiela kódy opakovane ako hovoríš.
WIFI/IR/RF ,,,,môžeš ovládať RF dotykové spínače, zásuvký, TV, vež atď. Mimo domu potrebuješ presmerovať porty na routri pretože použivaš aplikáciu pripojenú cez WIFI a ide to cez cloud.
Support all IR controlled devices such as TV, Air condition, DVD and etc,
--
Broadlink RM Mini 3
Broadlink RM Pro



--------------------------------ARDUINO INFO
microcontroller
arduino Pro Mini ATmega328
arduino mini ATmega328
arduino nano Atmel ATmega168 or ATmega328
arduino uno ATmega328
arduino leonardo ATmega32u4
arduino mega ATmega2560
Arduino Micro ATmega32u4
Arduino DUE AT91SAM3X8E

-----
(I2C) sda scl
arduino Pro Mini A4 A5
arduino mini A4 A5
arduino nano A4 A5
arduino uno A4 A5
arduino leonardo 2 3
arduino mega 20 21
Arduino Micro 2 3
Arduino DUE 20 21 and SDA1 and SCL1

wire library

Zoznam známych adries:
Tu je zoznam adries, ktoré obvykle používajú niektoré zariadenia:
0x23 - BH1750FVI svetelný senzor na rozptýlené svetlo. Pin ADDR=L.
0x50-0x58 - EEPROM.
0x5C - BH1750FVI svetelný senzor na rozptýlené svetlo. Pin ADDR=H.
0x68 - DS1307 hodiny reálneho času.
pcf8574at expander module- 0x38

---------
(SPI) SS MOSI MISO SCK
arduino Pro Mini 10 11 12 13
arduino nano 10 11 12 13
arduino nano 10 11 12 13
arduino uno 10 11 12 13
arduino leonardo only ICSP header
arduino mega 53 51 50 52
Arduino Micro on header
Arduino DUE on header

MCP41100 je digitálny potenciometer
---------
(UART) HARDWARE serial RX TX
arduino Pro Mini 0 1
arduino mini 0 1
arduino nano 0 1
arduino uno 0 1
arduino leonardo 0 1
arduino mega 0/19/17/15 1/18/16/14
Arduino Micro 0 1
Arduino DUE 0/19/17/15 1/18/16/14

(UART) software serial RX TX
arduino nano
arduino uno
arduino mega

Not all pins on the Mega and Mega 2560 support change interrupts, so only the following can be used for RX: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).
Not all pins on the Leonardo and Micro support change interrupts, so only the following can be used for RX: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
A SoftwareSerial library allows for serial communication on any of the Mega 2560's digital pins.

-----
analog input: how many? 10bit resolution (max 1023)
arduino pro mini 4-8 --it depend on version
arduino mini 8 (A0-A7)
arduino nano 8 (A0-A7)
arduino uno 6 (A0-A5)
arduino leonardo 12 (A0-A5, A6-A11 on DIGITAL 4, 6, 8, 9, 10, and 12)
arduino mega 16 (A0-A15)
Arduino Micro 12 A0-A5, A6 - A11 (on digital pins 4, 6, 8, 9, 10, and 12)
Arduino DUE 12 A0 to A11 12 bits of resolution / default is 10 bit

---

Analog Output Pins(true analog) (DAC) How many?
Arduino DUE 2 / DAC1 and DAC2 12-bits resolution
...DAC output range is actually from 0.55 V to 2.75 V only.
---

-----
digital I/O
arduino pro mini 14
arduino mini 14
arduino nano 14
arduino uno 14
arduino leonardo 20 (all A0-A11 can be digital)
arduino mega 54
Arduino Micro 20
Arduino DUE 54
-----

-----
built-in LED connected to digital pin:
arduino pro mini 13
arduino mini
arduino nano 13
arduino uno 13
arduino leonardo 13
arduino mega 13
Arduino Micro 13
all 13
MKR1000 6
Gemma 1
-----

-----
External Interrupts name of PIN / name of interrupt
arduino Pro Mini 2 and 3 /INT.1 INT.0
arduino mini 2 and 3 /INT.1 INT.0
arduino nano 2 and 3 /INT.1 INT.0
arduino uno 2 and 3 /INT.0 INT.1
arduino leonardo 0,1,2,3,7 /INT.2 INT.3 INT.3 INT.0 INT.4
arduino mega 2,3,18,19,20,21 /INT.0 INT.1 INT.5 INT.4 INT.3 INT.2
other 32u4-based 0,1,2,3,7 /INT.2 INT.3 INT.3 INT.0 INT.4
arduino with 328 2 and 3 /INT.1 INT.0
arduino Due all digital pins
arduino 101 all digital pins (Only pins 2, 5, 7, 8, 10, 11, 12, 13 work with CHANGE)
...For Due, Zero, MKR1000 and 101 boards the interrupt number = pin number.

-----
ANALOG OUTPUT (PWM) 8bit (max 255)
arduino Pro Mini 3, 5, 6, 9, 10, 11
arduino mini 3, 5, 6, 9, 10, 11
arduino nano 3, 5, 6, 9, 10, 11
arduino uno 3, 5, 6, 9, 10, 11
arduino leonardo 3, 5, 6, 9, 10, 11, 13
arduino mega 2 - 13 and 44 - 46
Arduino Micro 5, 6, 9, 10, 11 and 13
Arduino DUE 2 - 13

-----
BOOTLOADER kB
arduino pro mini
arduino mini 2
arduino nano 2
arduino uno
arduino leonardo
arduino mega 8
Arduino Micro 4
Arduino DUE
--------------
rtc
Ds1302
Ds1307
DS3231 good time+internal temperature sensor 0x68
Most displays use I2C Adress 0x27 but a FEW use 0x3F , 0x20
môj I2C 16x2 LCD 0x27
môj I2C 20x4 LCD 0x3f
i2c lcd or
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7); // 0x27 is the I2C bus address



----------------------------------
//////////////////////////////////
----------------------------------
Rozměrný textový řetězec JSON by mohl být na drobných arduinech s 2kB RAM smrtící, Wi-Fi čipy od Espressifu však mají k dispozici přinejmenším desítky kB RAM, a tak si to můžeme dovolit. Ostatně i z toho důvodu, jak se bude náš program vlastně chovat. Více na:
pozri knihovnu https://github.com/bblanchon/ArduinoJson

marh
Příspěvky: 37
Registrován: 19 bře 2018, 15:13
Reputation: 0

Re: webserver s IR ako citat IR kody z SD karty

Příspěvek od marh » 08 dub 2018, 00:26

nemôžem upraviť
https://github.com/z3t0/Arduino-IRremote
LCD zmeň konektor 9 na iný a prehoď kábel lebo IR vys.led funguje len na 3 a 9
čítaj hore

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host