ESP8266 + zmienna programowa dla kodu HTML

Masz problem z Arduino? Tutaj możesz szukać pomocy.
ODPOWIEDZ
Awatar użytkownika
Karl
Majsterkowicz
Posty: 75
Rejestracja: 3 gru 2014, 10:00

ESP8266 + zmienna programowa dla kodu HTML

Post autor: Karl » 25 mar 2021, 20:30

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.

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


Awatar użytkownika
Marhef
Złota rączka
Posty: 1268
Rejestracja: 18 lis 2011, 02:18

Re: ESP8266 + zmienna programowa dla kodu HTML

Post autor: Marhef » 26 mar 2021, 12:00

A działa, jeśli wyślesz tak:
const char INDEX_HTML[] =
"<body bgcolor="pink">'Treść strony..."?
Awatar użytkownika
Karl
Majsterkowicz
Posty: 75
Rejestracja: 3 gru 2014, 10:00

Re: ESP8266 + zmienna programowa dla kodu HTML

Post autor: Karl » 26 mar 2021, 13:04

Zarówno
'pink' does not name a type
, jak i::
'WartoscKoloru' does not name a type
uzi18
Majsterkowicz
Posty: 152
Rejestracja: 10 maja 2018, 05:06

Re: ESP8266 + zmienna programowa dla kodu HTML

Post autor: uzi18 » 26 mar 2021, 14:22

Kod: Zaznacz cały

String WartoscKoloru = "pink";
String  INDEX_HTML =
"<body bgcolor=\"" + WartoscKoloru + "\">Tresc strony..."
Wysłane z mojego Mi Note 10 przy użyciu Tapatalka


stiven
Złota rączka
Posty: 1655
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: ESP8266 + zmienna programowa dla kodu HTML

Post autor: stiven » 26 mar 2021, 15:17

uzi18 pisze:
26 mar 2021, 14:22

Kod: Zaznacz cały

String WartoscKoloru = "pink";
String  INDEX_HTML =
"<body bgcolor=\"" + WartoscKoloru + "\">Tresc strony..."
Wysłane z mojego Mi Note 10 przy użyciu Tapatalka
Tak, te ukośniki muszą być przed cudzysłowami, które mają być w Stringu.
Awatar użytkownika
Karl
Majsterkowicz
Posty: 75
Rejestracja: 3 gru 2014, 10:00

Re: ESP8266 + zmienna programowa dla kodu HTML

Post autor: Karl » 27 mar 2021, 11:21

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 ?
stiven
Złota rączka
Posty: 1655
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: ESP8266 + zmienna programowa dla kodu HTML

Post autor: stiven » 27 mar 2021, 11:53

To co opisujesz, to dzieje się przy takiem kodzie?

Kod: Zaznacz cały

"<body bgcolor=" "\"WartoscKoloru\"" "><center>"
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:

Kod: Zaznacz cały

String  INDEX_HTML =
"<body bgcolor=\"pink\">Tresc strony...";
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

Kod: Zaznacz cały

<html>
<body>
</body>
</html>
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

Kod: Zaznacz cały

<body bgcolor="pink">
</body>
w pliku html, otwiera się różowa strona.
stiven
Złota rączka
Posty: 1655
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: ESP8266 + zmienna programowa dla kodu HTML

Post autor: stiven » 27 mar 2021, 12:18

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...";
Awatar użytkownika
Karl
Majsterkowicz
Posty: 75
Rejestracja: 3 gru 2014, 10:00

Re: ESP8266 + zmienna programowa dla kodu HTML

Post autor: Karl » 27 mar 2021, 15:12

Jestem początkującym w C, ale nie aż tak. A w HTML już trochę natworzyłem.

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.
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.

Wrzuć może cały kod. Możesz też sprawdzić przy okazji czy tak uproszczony kod działa:
"<body bgcolor=\"pink\">Tresc strony...";
Działa, z tym, że 'pink', nie jest tutaj zmienną. Czyli niczego to nie wnosi.

<html> <body> </body> </html>
Aha, pisałeś, że ten kod wcześniejszy się nie kompiluje. Tam brakuje średnika na końcu.
Nie przesadzaj z moją niewiedzą.

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.
Napisany w edytorze, sprawdzony w GC, FF, SI. Z punktu widzenia strony html Wszystko jest poprawnie.

Sprawdziłem, niby działa samo
<body bgcolor="pink">
</body>
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.
stiven
Złota rączka
Posty: 1655
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: ESP8266 + zmienna programowa dla kodu HTML

Post autor: stiven » 27 mar 2021, 15:18

Wróć do tego kodu, który podał uzi18, tam tylko średnika brakowało, a jest pobranie koloru ze zmiennej.
Awatar użytkownika
Karl
Majsterkowicz
Posty: 75
Rejestracja: 3 gru 2014, 10:00

Re: ESP8266 + zmienna programowa dla kodu HTML

Post autor: Karl » 27 mar 2021, 15:43

Kod: Zaznacz cały

Automatyka_2021:81:1: error: stray '\' in program
 "<body bgcolor=\"" + Color + "\"><center>"
 ^
Zonk.
stiven
Złota rączka
Posty: 1655
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: ESP8266 + zmienna programowa dla kodu HTML

Post autor: stiven » 27 mar 2021, 15:56

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.
vanessa
Młodszy majsterkowicz
Posty: 25
Rejestracja: 21 sty 2018, 14:59

Re: ESP8266 + zmienna programowa dla kodu HTML

Post autor: vanessa » 27 mar 2021, 17:35

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.


stiven
Złota rączka
Posty: 1655
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: ESP8266 + zmienna programowa dla kodu HTML

Post autor: stiven » 27 mar 2021, 18:56

Metoda jest prosta - w treści strony nie można używać cudzysłowu.
Czyli już działa, jak zrezygnowałeś ze stosowania cudzysłowów w miejscu wstawianego koloru?

Zobacz na obrazku, że ten kod się kompiluje prawidłowo.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
uzi18
Majsterkowicz
Posty: 152
Rejestracja: 10 maja 2018, 05:06

Re: ESP8266 + zmienna programowa dla kodu HTML

Post autor: uzi18 » 27 mar 2021, 21:07

https://www.w3schools.com/colors/colors_names.asp

Wysłane z mojego Mi Note 10 przy użyciu Tapatalka

Awatar użytkownika
Karl
Majsterkowicz
Posty: 75
Rejestracja: 3 gru 2014, 10:00

Re: ESP8266 + zmienna programowa dla kodu HTML

Post autor: Karl » 27 mar 2021, 21:58

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.
Co to ma do rzeczy i dlaczego miałbym burzyć standardy HTML ?


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.
Awatar użytkownika
Karl
Majsterkowicz
Posty: 75
Rejestracja: 3 gru 2014, 10:00

Re: ESP8266 + zmienna programowa dla kodu HTML

Post autor: Karl » 27 mar 2021, 22:00

Dziękuję za zaangażowanie, choć nie mam problemów z edycją HTML, ale z C.
Rozwiązane.
Dziękuję i do następnego...
stiven
Złota rączka
Posty: 1655
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: ESP8266 + zmienna programowa dla kodu HTML

Post autor: stiven » 27 mar 2021, 22:51

Karl pisze:
27 mar 2021, 21:58
Nie działa tak, jak to przedstawiłeś.
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
Karl pisze:
27 mar 2021, 21:58
Wprawdzie "server.send(200, "text/plain", message);" nie powinno być Stringiem, ale jak się bardzo chce, to można.
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.
uzi18
Majsterkowicz
Posty: 152
Rejestracja: 10 maja 2018, 05:06

Re: ESP8266 + zmienna programowa dla kodu HTML

Post autor: uzi18 » 28 mar 2021, 19:15

Chodzilo mi o nazwy kolorow jakie mozna uzyc zamiast notacji hex

Wysłane z mojego Mi Note 10 przy użyciu Tapatalka

ODPOWIEDZ

Strony partnerskie: