Elektronika

Wyświetlacz LCD (Ethernet)

Hadrware: Arduino + EthernetShield + LCD

(obecnie używam MQTT)

Poprzez spreparowane linki wysyłany dane do arduino.

Wersja V3

/*
 *Wyświetlanie na LCD:            "https://192.168.2.99/??LCD/%20%20%20TEST%20DZIALANIA%20%20%20/%20%20%20Wyswietlacza%20LCD%20/DZIALA%20DZIALA%20DZIALA/123%20567%209012%204567%209" zawsze trzeba wypełnić całe linie: spacje to '%20'
 *Aby włączyć alarm:              "https://192.168.2.99/??ALM/1"                       cyfra po ALM/ określa głośność alarmu
 *Aby włączyć miganie LED:        "https://192.168.2.99/??LED/13"                      cyfry po LED/ 1-poziom migania 3-kolor
 *Ustawienie adresu IP:           "https://192.168.2.99/??SET_IP/192.168.002.099"      ważne aby każda jego część składała się z 3 cyfr
 *
 *
 *  EEPROM:
 *  1013-1016 - IP
 *
 
  Podłączenie LCD na Ethernet Shield:
 * LCD RS -pin to digital pin 7
 * LCD EN -pin to digital pin 6
 * LCD D4 -pin to digital pin 5
 * LCD D5 -pin to digital pin 4
 * LCD D6 -pin to digital pin 3
 * LCD D7 -pin to digital pin 2
 * LCD R/W -pin to ground
 * LCD VSS -pin to ground
 * LCD VCC -pin to 5V
    
        10K rezystor:
     
     +5V ---[===]--- GND
              |
              |
           LCD VO
           (pin3)
 
 */
 
#include 
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);              //piny wg. schematu [RS, EN, D4, D5, D6, D7]
#include 
#include                              //używa pinów 10-SS, 11-MOSI, 12-MISO, 13-SCK  (4-SDCS)
#include 

// WSZYSTKO DO KONFIGU SERWERA
byte ip[] =  { 192,168,2,99 };
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0x10, 0x10 };
byte subnet[] = { 255,255,255,0 };
int ser_p = 80;

String HTTP;
String L0;
String L1;
String L2;
String L3;
String ALM;
String LED;
String LED1;

void setup()
{
    pinMode(8, INPUT);                                  // pin RESET USTAWIEN
    pinMode(10, OUTPUT);
    digitalWrite(10, HIGH);                             // wyłącz Ethernet
    Serial.begin(9600);                                 // for debugging
    lcd.begin(20, 4);                                   // wyświetlacz mam 4X20 znaków

/*if(digitalRead(8) == HIGH){                             // zworka na pin 8 powoduje zapisanie 255.255.255.255 do EEPROM
      for (int i = 0; i <= 3; i++) { EEPROM.write(i + 1013, 255); } }*/ if(EEPROM.read(1013) + EEPROM.read(1014) + EEPROM.read(1015) + EEPROM.read(1016) != 1020){ //jak w EEPROMIE jest 255.255.255.255 to nie czyta konfigu z EEPROM Serial.println("-ODCZYT IP Z EEPROM->");
    for (byte i = 0; i < 5; i++){                       // odczyt IP sieci
        ip[i] = EEPROM.read(i+1013);
      }    
  }
    
    Ethernet.begin(mac, ip, subnet);
    EthernetServer server(ser_p);
    server.begin();                                      // start serwera

    Serial.print("IP: ");                                // wyświetlanie parametrów sieci przez Serial
    Serial.print(Ethernet.localIP());
    Serial.print("/");
    Serial.println(ser_p);    
    Serial.print("MAC: ");
    for (int i = 0; i <= 5; i++) {
    Serial.print(mac[i], HEX);
    if(i<5){Serial.print(":");}
    }
    Serial.println();
    
    lcd.setCursor(0, 0);                                  // wyświetlanie parametrów sieci przez LCD
    lcd.print("-KONFIGURACJA SIECI-");
    lcd.setCursor(0, 2);
    lcd.print("I: ");
    lcd.print(Ethernet.localIP());
    lcd.print("/");
    lcd.print(ser_p);   
    lcd.setCursor(0, 3);                                        
    lcd.print("M: ");  
    for (int i = 0; i <= 5; i++) {
    lcd.print(mac[i], HEX);
    if(i<5){lcd.print(":");}
    }

    delay(5000);
}

void loop()
{
    EthernetServer server(ser_p);
    EthernetClient client = server.available();         // try to get client

    if (client) {                                       // got client?
        boolean currentLineIsBlank = true;
        while (client.connected()) {
            if (client.available()) {                   // client data available to read
                char c = client.read();                 // read 1 byte (character) from client
                       
                if (HTTP.length() < 150) { // dlugosc zapytania HTTP += c; // zapisz zapytanie w ciagu HTTP if (c == '\n') { //-USTAWIENIE IP if(HTTP.indexOf("??SET_IP/") >0)    { 
      Serial.println("-ZAPIS EEPROM->");
      for (int i = 0; i < 4; i++) { EEPROM.write(i + 1013, HTTP.substring(i * 4 + 14, i * 4 + 17).toInt()); } Serial.print("-IP z EEPROM->");      
      for (int i = 0; i < 4; i++) { Serial.print(EEPROM.read(i + 1013)); if(i<3){  Serial.print("."); }}
      Serial.println();
      delay(100);
         ///--------------------RESET------------------------
                      noInterrupts();
                __asm("wdr");
                WDTCSR = (1<<WDCE) | (1<<WDE);
                WDTCSR = (1<<WDE); for(;;){ }; ///--------------------RESET------------------------ } //-USTAWIENIE IP if(HTTP.indexOf("??ALM/") >0)    { 
      ALM = HTTP.substring(11, 12);    
      Serial.println("---ALARM: glosnosc");
      Serial.println(ALM);
      Serial.println("---------------------");
        }
              
    if(HTTP.indexOf("??LED/") >0)    { 
      LED = HTTP.substring(11, 12);
      LED1 = HTTP.substring(12, 13);    
      Serial.println("---LED: poziom migania/kolor");
      Serial.print(LED);Serial.print("/");Serial.println(LED1);
      Serial.println("---------------------");
        }       

//-WYŚWIETLANIE DANYCH NA LCD
     if(HTTP.indexOf("??LCD/") >0)    {   
              HTTP.replace("%20", " ");              
              L0 = HTTP.substring(11, 31);              
              L1 = HTTP.substring(32, 52); 
              L2 = HTTP.substring(53, 73); 
              L3 = HTTP.substring(74, 94); 
              Serial.println("-DANE DO LCD->");
              lcd.setCursor(0,0);
              lcd.print(L0); 
              lcd.setCursor(0,1);
              lcd.print(L1); 
              lcd.setCursor(0,2);
              lcd.print(L2); 
              lcd.setCursor(0,3);
              lcd.print(L3); 
              Serial.println(L0); 
              Serial.println(L1); 
              Serial.println(L2); 
              Serial.println(L3);
     }
//-WYŚWIETLANIE DANYCH NA LCD

              client.println("HTTP/1.1 200 OK");
              client.println("Content-Type: text/xml");
              client.println("Connection: keep-alive");
              client.println();
              XML_response(client);
                   
            delay(1);                                   // give the web browser time to receive the data
            client.stop();                              // close the connection:
            Serial.println("client disonnected");  
  
            HTTP="";                                    //clearing string for next read
               }}
            }                                           // end if (client.available())
        }                                               // end while (client.connected())
    }                                                   // end if (client)
}

// send the XML file with analog values, switch status
//  and LED status

void XML_response(EthernetClient cl)
{
    int analog_val;
    int D_val;
    int i; 
  
  cl.print("");
    cl.print("");
      cl.print("");
         
         cl.print("");
          cl.print("LCD");
         cl.print("");
       
         for (i = 0; i <= 5; i++) {
          analog_val = analogRead(i);
          cl.print("<A");cl.print(i);cl.print(">");
           cl.print(analog_val);
          cl.print("");
          }
          
        cl.print("");
      cl.print("");
}

//int freeRam () {  extern int __heap_start, *__brkval;   int v;   return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); }

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *