ESP8266 + zmienna programowa dla kodu HTML
ESP8266 + zmienna programowa dla kodu HTML
Macie pomysł jak powinien wyglądać program, gdzie zmienna jest używana przez kod HTML ?
String WartoscKoloru = "pink";
const char INDEX_HTML[] =
"<body bgcolor=" + WartoscKoloru + ">'Treść strony..."
Proste, a nie działa.
String WartoscKoloru = "pink";
const char INDEX_HTML[] =
"<body bgcolor=" + WartoscKoloru + ">'Treść strony..."
Proste, a nie działa.
Re: ESP8266 + zmienna programowa dla kodu HTML
A działa, jeśli wyślesz tak:
const char INDEX_HTML[] =
"<body bgcolor="pink">'Treść strony..."?
const char INDEX_HTML[] =
"<body bgcolor="pink">'Treść strony..."?
Re: ESP8266 + zmienna programowa dla kodu HTML
Zarówno
'pink' does not name a type
, jak i::
'WartoscKoloru' does not name a type
'pink' does not name a type
, jak i::
'WartoscKoloru' does not name a type
Re: ESP8266 + zmienna programowa dla kodu HTML
Kod: Zaznacz cały
String WartoscKoloru = "pink";
String INDEX_HTML =
"<body bgcolor=\"" + WartoscKoloru + "\">Tresc strony..."
Re: ESP8266 + zmienna programowa dla kodu HTML
Tak, te ukośniki muszą być przed cudzysłowami, które mają być w Stringu.uzi18 pisze: ↑26 mar 2021, 14:22Wysłane z mojego Mi Note 10 przy użyciu TapatalkaKod: Zaznacz cały
String WartoscKoloru = "pink"; String INDEX_HTML = "<body bgcolor=\"" + WartoscKoloru + "\">Tresc strony..."
Re: ESP8266 + zmienna programowa dla kodu HTML
Trochę ewoluowało, ale problemów nie ubywa.
Podana przez kolegów składnia nie kompiluje się.
Natomiast zmodyfikowana do: :
"<body bgcolor=" "\"WartoscKoloru\"" "><center>"
Owszem działa, ale nie działo się nic.
Żeby nie mieszać typów zmiennych, WartoscKoloru zmieniłem na const char, tak jak INDEX_HTML.
Żadnych zmian.
W ferworze nocnego klikania uprościłem nazwę zmiennej z WartoscKoloru na Color, a wartość ze słownej (pink) na szesnastkowy 'zdechły zielony' (008866).
Poszło! Kolor tła zmienił się na bordowy. No ale skąd bordowy, skoro miał być zielony ?
Otóż wczytuje się tylko pierwsza litera parametru Color, czyli C. A kolor C (szestnastkowo C00000) to ów bordowy.
Zmieniłem nazwę na Folor - wczytało F00000 - palący w oko czerwony.
Lokalnie działa logicznie, globalnie nielogicznie.
W czym teraz robię błąd ?
Podana przez kolegów składnia nie kompiluje się.
Natomiast zmodyfikowana do: :
"<body bgcolor=" "\"WartoscKoloru\"" "><center>"
Owszem działa, ale nie działo się nic.
Żeby nie mieszać typów zmiennych, WartoscKoloru zmieniłem na const char, tak jak INDEX_HTML.
Żadnych zmian.
W ferworze nocnego klikania uprościłem nazwę zmiennej z WartoscKoloru na Color, a wartość ze słownej (pink) na szesnastkowy 'zdechły zielony' (008866).
Poszło! Kolor tła zmienił się na bordowy. No ale skąd bordowy, skoro miał być zielony ?
Otóż wczytuje się tylko pierwsza litera parametru Color, czyli C. A kolor C (szestnastkowo C00000) to ów bordowy.
Zmieniłem nazwę na Folor - wczytało F00000 - palący w oko czerwony.
Lokalnie działa logicznie, globalnie nielogicznie.
W czym teraz robię błąd ?
Re: ESP8266 + zmienna programowa dla kodu HTML
To co opisujesz, to dzieje się przy takiem kodzie?
Tak jest na pewno źle, bo tam nie ma pobrania wartości ze zmiennej WartoscKoloru, tylko jest to WartoscKoloru "wrzucane" jako zwykły tekst do kodu HTML.
Wrzuć może cały kod. Możesz też sprawdzić przy okazji czy tak uproszczony kod działa:
A w ogóle to kod HTML przed znacznikiem body jeszcze coś powinien mieć, z tego co się orientuję, to w zwykłym HTML minimum, to
Możesz sprawdzić, czy w ogóle sam kod HTML, który wpisujesz w programie, będzie działał prawidłowo, zapisując go do pliku, na przykład strona.html i otworzyć w przeglądarce.
EDIT
Sprawdziłem, niby działa samo
w pliku html, otwiera się różowa strona.
Kod: Zaznacz cały
"<body bgcolor=" "\"WartoscKoloru\"" "><center>"
Wrzuć może cały kod. Możesz też sprawdzić przy okazji czy tak uproszczony kod działa:
Kod: Zaznacz cały
String INDEX_HTML =
"<body bgcolor=\"pink\">Tresc strony...";
Kod: Zaznacz cały
<html>
<body>
</body>
</html>
EDIT
Sprawdziłem, niby działa samo
Kod: Zaznacz cały
<body bgcolor="pink">
</body>
Re: ESP8266 + zmienna programowa dla kodu HTML
Aha, pisałeś, że ten kod wcześniejszy się nie kompiluje. Tam brakuje średnika na końcu.
Kod: Zaznacz cały
String WartoscKoloru = "pink";
String INDEX_HTML =
"<body bgcolor=\"" + WartoscKoloru + "\">Tresc strony...";
Re: ESP8266 + zmienna programowa dla kodu HTML
Jestem początkującym w C, ale nie aż tak. A w HTML już trochę natworzyłem.
Pobrana ma być wartość, która jest to niczym innym, niż 6 znaków. Stąd typ String, bo dla programu uC nie ma to znaczenia, a jest tylko parametrem dla przeglądarki w statycznym, puki co, kodzie HTML.Tak jest na pewno źle, bo tam nie ma pobrania wartości ze zmiennej WartoscKoloru, tylko jest to WartoscKoloru "wrzucane" jako zwykły tekst do kodu HTML.
Działa, z tym, że 'pink', nie jest tutaj zmienną. Czyli niczego to nie wnosi.Wrzuć może cały kod. Możesz też sprawdzić przy okazji czy tak uproszczony kod działa:
"<body bgcolor=\"pink\">Tresc strony...";
Nie przesadzaj z moją niewiedzą.<html> <body> </body> </html>
Aha, pisałeś, że ten kod wcześniejszy się nie kompiluje. Tam brakuje średnika na końcu.
Napisany w edytorze, sprawdzony w GC, FF, SI. Z punktu widzenia strony html Wszystko jest poprawnie.Możesz sprawdzić, czy w ogóle sam kod HTML, który wpisujesz w programie, będzie działał prawidłowo, zapisując go do pliku, na przykład strona.html i otworzyć w przeglądarce.
Sprawdziłeś w przeglądarce, ale taki kod nie przejdzie przez uC, bo nie zrozumie tych "". Odniesie je do treści całego szkicu, a nie treści strony. Metoda jest prosta - w treści strony nie można używać cudzysłowu.Sprawdziłem, niby działa samo
<body bgcolor="pink">
</body>
Re: ESP8266 + zmienna programowa dla kodu HTML
Wróć do tego kodu, który podał uzi18, tam tylko średnika brakowało, a jest pobranie koloru ze zmiennej.
Re: ESP8266 + zmienna programowa dla kodu HTML
Kod: Zaznacz cały
Automatyka_2021:81:1: error: stray '\' in program
"<body bgcolor=\"" + Color + "\"><center>"
^
Re: ESP8266 + zmienna programowa dla kodu HTML
Po drugim znaku + masz od razu \, on na bym pomiędzy cudzysłowami.
EDIT
Poprawiłeś i dalej to samo. Daj parę linijek kodu w okolicach tego błędu.
EDIT
Poprawiłeś i dalej to samo. Daj parę linijek kodu w okolicach tego błędu.
Re: ESP8266 + zmienna programowa dla kodu HTML
Wartość kolory zapisz w postaci RGB gdzie każdy kolor przyjmuje wartość od 0 do F, a nie 00 do FF.
Więc każdy kolor w postaci xxx.
F0000 wściekły czerwony to trzy pierwsze czyli F00
Bordowy (008866) to 008 i tak dalej.
Więc każdy kolor w postaci xxx.
F0000 wściekły czerwony to trzy pierwsze czyli F00
Bordowy (008866) to 008 i tak dalej.
Re: ESP8266 + zmienna programowa dla kodu HTML
Czyli już działa, jak zrezygnowałeś ze stosowania cudzysłowów w miejscu wstawianego koloru?Metoda jest prosta - w treści strony nie można używać cudzysłowu.
Zobacz na obrazku, że ten kod się kompiluje prawidłowo.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Re: ESP8266 + zmienna programowa dla kodu HTML
Co to ma do rzeczy i dlaczego miałbym burzyć standardy HTML ?Wartość kolory zapisz w postaci RGB gdzie każdy kolor przyjmuje wartość od 0 do F, a nie 00 do FF.
Więc każdy kolor w postaci xxx.
Nie działa tak, jak to przedstawiłeś.
Ale już działa. Wprawdzie "server.send(200, "text/plain", message);" nie powinno być Stringiem, ale jak się bardzo chce, to można.
Re: ESP8266 + zmienna programowa dla kodu HTML
Dziękuję za zaangażowanie, choć nie mam problemów z edycją HTML, ale z C.
Rozwiązane.
Dziękuję i do następnego...
Re: ESP8266 + zmienna programowa dla kodu HTML
Miałeś błędy w kompilacji związane z tym ukośnikiem, więc musiałeś coś źle zapisać, a kodu swojego nie chciałeś dać. Ukośnik \ przed cudzysłowem wewnątrz Stringa, to normalna rzecz, nie tylko w arduino i nie tylko w C. Jak masz różne przykłady kodów dla ESP ze stroną w HTML, to tam zawsze też one są, nikt tu sobie tego nie wymyślił. Inna sprawa, że tak naprawdę można te cudzysłowy pominąć w wielu sytuacjach, a i tak przeglądarki poprawnie zinterpretują kod HTML.
https://randomnerdtutorials.com/esp8266-web-server/
https://circuits4you.com/2019/01/25/ard ... -a-string/
https://forum.arduino.cc/index.php?topic=99599.0
Masz na myśli zmienną message? Jakoś w przykładach, które znalazłem, to ona właśnie zawsze Stringiem jest. Nie wiem, czy może być zastąpiona łańcuchem znaków. Ze Stringami to jest uniwersalna rzecz, że lepiej ich w arduino unikać, bo to łatwa droga do problemów z pamięcią, a w przypadku ESP i tworzenia stron z kodem HTML szczególnie, no bo to są wtedy długie Stringi i potrzeba tej pamięci dużo na nie. Stringi zapisywane są w pamięci RAM w inny sposób, niż pozostałe typy danych i w "niesprzyjających okolicznościach" może dojść do nadpisywania nimi innych zmiennych zapisanych w pamięci i w konsekwencji błędów w działaniu programu.
Re: ESP8266 + zmienna programowa dla kodu HTML
Chodzilo mi o nazwy kolorow jakie mozna uzyc zamiast notacji hex
Wysłane z mojego Mi Note 10 przy użyciu Tapatalka
Wysłane z mojego Mi Note 10 przy użyciu Tapatalka