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); }