ELEKTRONEK.pl

4.02.2016

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 &lt;= 5; i++) {
Serial.print(mac[i], HEX);
if(i&lt;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 &lt;= 5; i++) {
lcd.print(mac[i], HEX);
if(i&lt;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() &lt; 150) { // dlugosc zapytania HTTP += c; // zapisz zapytanie w ciagu HTTP if (c == '\n') { //-USTAWIENIE IP if(HTTP.indexOf("??SET_IP/") &gt;0)    { 
  Serial.println("-ZAPIS EEPROM-&gt;");
  for (int i = 0; i &lt; 4; i++) { EEPROM.write(i + 1013, HTTP.substring(i * 4 + 14, i * 4 + 17).toInt()); } Serial.print("-IP z EEPROM-&gt;");      
  for (int i = 0; i &lt; 4; i++) { Serial.print(EEPROM.read(i + 1013)); if(i&lt;3){  Serial.print("."); }}
  Serial.println();
  delay(100);
     ///--------------------RESET------------------------
                  noInterrupts();
            __asm("wdr");
            WDTCSR = (1&lt;&lt;WDCE) | (1&lt;&lt;WDE);
            WDTCSR = (1&lt;&lt;WDE); for(;;){ }; ///--------------------RESET------------------------ } //-USTAWIENIE IP if(HTTP.indexOf("??ALM/") &gt;0)    { 
  ALM = HTTP.substring(11, 12);    
  Serial.println("---ALARM: glosnosc");
  Serial.println(ALM);
  Serial.println("---------------------");
    }
          
if(HTTP.indexOf("??LED/") &gt;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 &lt;= 5; i++) {
      analog_val = analogRead(i);
      cl.print("&lt;A");cl.print(i);cl.print("&gt;");
       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); }