28-03-2017, 13:14
Witam
Jestem początkującym w dziedzinie programowania więc z góry prosze za wyrozumiałość
Wiem ze ten kod teraz nie działa bo nie ma prawa wstawiłem tylko kawałki. ale mniej wiecej jest jego obraz. U mnie na Arduino jest OK jednak chce coś pozmieniać:
Problemy jakie mnie męczą to:
1. Chciałem by ta część kodu była wykonywana co np ~ 3s wymyśliłem sobie to tak
i będzie się zwiększało przy każdym przebiegu pętli a pętla jest zawsze opuźniona o 1ms (wiem ze to będzie ciut więcej ale to nie istotne) gdy spełnimy warunek if wykonamy odczyt i program będzie latał w koło:
Void setup
int i;
Void loop
if (i<=3000){
float ho = DHT_out.readHumidity();
float to = DHT_out.readTemperature();
float hi = DHT_in.readHumidity();
float ti = DHT_in.readTemperature();
i=0;
}
------------------
Reszta kodu
------------------
i++;
delay(1);
Gdzieś popełniam błąd bo jeśli zamykam to w "if" to wyrzuca mi że ho,to,hi,ti jest nie zadeklarowane...
2. W kawałku kodu:
<head> <meta http-equiv=\"refresh\" content=\"5\" /> </head>" <- powinno mi stronkę www odświeżać co 5s jednak to nie działa...
Wiem że na ESP8266 można postawić serwer WWW jednak ja chce mieć tylko podgląd i nie będę się puki co uczył programować ESP tym bardziej ze będę wyświetlał raptem 10 parametrów...
3. Najmniej istotne... ale zadam to pytanie czy można jednak zrobić by w tym kodzie HTML dodać działający przycisk bez stawiania serwera na ESP8266?
Pozdrawiam i dziękuje za pomoc.
Jestem początkującym w dziedzinie programowania więc z góry prosze za wyrozumiałość
Kod:
#include "DHT.h"
#define DHTW 2
LiquidCrystal_I2C lcd(0x3f, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
SoftwareSerial esp8266(8,9);
#define DHTTYPE DHT22
DHT DHT_out(DHTZ, DHTTYPE);
void setup() {
lcd.begin(20, 4);
lcd.clear(); lcd.setCursor(5, 1);
lcd.print("Inicjacja");
lcd.backlight();
DHT_out.begin();
--------------------------------
Ustawienia ESP8266
---------------------------------
}
Void loop
{
float ho = DHT_out.readHumidity();
float to = DHT_out.readTemperature();
float hi = DHT_in.readHumidity();
float ti = DHT_in.readTemperature();
lcd.setCursor(0, 1);
lcd.print("T: ");
lcd.print(to,1);
lcd.setCursor(0,2);
lcd.print("H: ");
lcd.print(ho,1);
if(esp8266.available()) // check if the esp is sending a message
{
/*
while(esp8266.available())
{
// The esp has data so display its output to the serial window
char c = esp8266.read(); // read the next character.
Serial.write(c);
} */
if(esp8266.find("+IPD,"))
{
delay(1000);
int connectionId = esp8266.read()-48; // subtract 48 because the read() function returns
// the ASCII decimal value and 0 (the first decimal number) starts at 48
String SW2;
String webpage= "<head> <meta http-equiv=\"refresh\" content=\"5\" /> </head>";
webpage = "<h1>Strona tytułowa</h1>"
"<h4>Temperatura: " + String(to) + "*C</h4><h4>Wilgotność: " + String(ho) + "%</h4>"
"<button>SW1</button>";
String cipSend = "AT+CIPSEND=";
cipSend += connectionId;
cipSend += ",";
cipSend +=webpage.length();
cipSend +="\r\n";
wyslij(cipSend,2000,DEBUG);
wyslij(webpage,2000,DEBUG);
String closeCommand = "AT+CIPCLOSE=";
closeCommand+=connectionId; // append connection id
closeCommand+="\r\n";
wyslij(closeCommand,3000,DEBUG);
}
}
}
String wyslij(String command, const int timeout, boolean debug)
{
String response = "";
esp8266.print(command); // send the read character to the esp8266
long int time = millis();
while( (time+timeout) > millis())
{
while(esp8266.available())
{
// The esp has data so display its output to the serial window
char c = esp8266.read(); // read the next character.
response+=c;
}
}
if(debug)
{
Serial.print(response);
}
return response;
}
Wiem ze ten kod teraz nie działa bo nie ma prawa wstawiłem tylko kawałki. ale mniej wiecej jest jego obraz. U mnie na Arduino jest OK jednak chce coś pozmieniać:
Problemy jakie mnie męczą to:
1. Chciałem by ta część kodu była wykonywana co np ~ 3s wymyśliłem sobie to tak
i będzie się zwiększało przy każdym przebiegu pętli a pętla jest zawsze opuźniona o 1ms (wiem ze to będzie ciut więcej ale to nie istotne) gdy spełnimy warunek if wykonamy odczyt i program będzie latał w koło:
Void setup
int i;
Void loop
if (i<=3000){
float ho = DHT_out.readHumidity();
float to = DHT_out.readTemperature();
float hi = DHT_in.readHumidity();
float ti = DHT_in.readTemperature();
i=0;
}
------------------
Reszta kodu
------------------
i++;
delay(1);
Gdzieś popełniam błąd bo jeśli zamykam to w "if" to wyrzuca mi że ho,to,hi,ti jest nie zadeklarowane...
2. W kawałku kodu:
<head> <meta http-equiv=\"refresh\" content=\"5\" /> </head>" <- powinno mi stronkę www odświeżać co 5s jednak to nie działa...
Wiem że na ESP8266 można postawić serwer WWW jednak ja chce mieć tylko podgląd i nie będę się puki co uczył programować ESP tym bardziej ze będę wyświetlał raptem 10 parametrów...
3. Najmniej istotne... ale zadam to pytanie czy można jednak zrobić by w tym kodzie HTML dodać działający przycisk bez stawiania serwera na ESP8266?
Pozdrawiam i dziękuje za pomoc.