• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Serwer WEB, ESP8266, Lua, ESPlorer i przesyłanie znaków ASCII wpisywanych z klawiatury przez UART

VPS Starter Arubacloud
0 głosów
1,039 wizyt
pytanie zadane 23 lutego 2018 w JavaScript przez Czes Nowicjusz (160 p.)
edycja 10 marca 2018 przez Czes

Jak w tytule załączam fotkę ekranu serwera oraz, kod który powinien realizować funkcję przesyłania znaków ASCII z klawiatury do UART ale jest  błąd którego nie umiem określić.
Nie działa mianowicie funkcja przekazywania znaków wpisywanych z klawiatury do  zmiennej 'mycode'. Pozostałe funkcje programu włącznie z samą komunikacją UART (przycisk 'SENDtoUART') czyli nadawaniem i odbiorem znaków  działają bez zarzutu.
Linie kodu gdzie wg mnie przypuszczalnie tkwi błąd:

    conn:send('</form>\n')
conn:send('<form action="" method="GET">\n')
conn:send('<scripttype="text/javascript"\n')
conn:send('function inptext(){\n')
conn:send('var mycode = document.getElementById("field").value \n')
conn:send('document.getElementById("mycode").innerHTML = mycode}\n')
conn:send('</script>\n')

conn:send('<input type="text" id="field" />\n')
conn:send('<input type="submit" value="<-INPUT" onclick="inptext()" />\n')
conn:send('<div id="mycode"></div>\n')

Być może powinna być zastosowana inna metoda?
Jak widać na fotce program generuje przycisk onclick i okienko i można do niego wpisywać znaki. Jednak po kliknięciu przycisku  INPUT wpisane znaki znikają z okienka nic sie nie dzieje, czyli zmienna 'mycode' pozostaje pusta, ma wartość 'nil'.
Do obsługi programowania płytki używałem programu Flasher oraz ESPlorera wg opisu:
https://nodemcu.readthedocs.io/en/master/en/flash/#sdk-init-data

Jest pytanie i prośba do programistów, którzy ogarniają ESP8266 i programowanie w LUA by przyjrzeć sie temu.

całość kodu:

--uart
uart.setup(0,9600,8,0,1,1)
dwa = " "
datax = " "
--mycode= "oz"
gpio.mode(2, gpio.OUTPUT)
gpio.write(2, gpio.LOW)

---- Set the WEB AP server, constant IP address of the router needed
SSID = "TTTTTTTT" --input your router login
PW = "SSSSSSSSS"--input your router password
IPADR = "192.168.1.175"--Requested router static IP address for the ESP
IPROUTER = "192.168.1.1"--IP address your router (LAN)
PORT = "78"--set the inner port 
PORTZEWN = "31"--set the external port
wifi.setmode(wifi.STATION)
wifi.sta.setip({ip=IPADR,netmask="255.255.255.0",gateway=IPROUTER,port=PORT})
wifi.sta.config(SSID,PW)
srv=net.createServer(net.TCP) srv:listen(PORTZEWN,function(conn)
conn:on("receive",function(conn,payload)
--print(payload)
--print(wifi.sta.getmac())
--print(wifi.sta.getip())
    function ctrlpower()
   klik=string.sub(payload,kdesi[2]+1,#payload)

if klik=="ON2" then gpio.write(2, gpio.HIGH) dwa = "* " return end
if klik=="OFF2" then gpio.write(2, gpio.LOW) dwa = " " return end
if klik=="SENDtoUART" and mycode~=nil then uart.write(0,mycode.."$") return end--send to UART string
end

    kdesi={string.find(payload,"pwmi=")}
    if kdesi[2]~=nil then ctrlpower()end
    conn:send('HTTP/1.1 200 OK\n\n')
    conn:send('<!DOCTYPE HTML>\n')
    conn:send('<html>\n')
    conn:send('<head><meta  content="text/html; charset=utf-8">\n')
    conn:send('<title>ESP8266</title></head>\n')
    conn:send('<body>\n')
    conn:send('<h4>NodeMcu Esp8266</h4>\n')
--------
    conn:send('<form action="" method="POST">\n')
   conn:send(dwa)
     conn:send('<input type="submit" name="pwmi" value="ON2">\n')
    conn:send('<input type="submit" name="pwmi" value="OFF2"><br><br>\n')
-------
    conn:send('<input type="submit" name="pwmi" value="SENDtoUART"><br><br>\n')
--   conn:send(mycode)
    conn:send(datax) --wyświetl odpowiedź odebraną z UART
conn:send('</form>\n')

----------------------------------------------------
conn:send('<form action="http://192.168.1.175:31" onsubmit="event.preventDefault(); return false;">\n')
--conn:send('<form onsubmit="event.preventDefault(); return false;">\n')
conn:send('<script type="text/javascript">\n')
conn:send('function wprowadz(){\n')
conn:send('var mycode = document.getElementById("pole").value\n')
conn:send('document.getElementById("mycode").innerHTML = mycode\n')
conn:send('console.log(mycode)}\n')
--conn:send('}\n')
conn:send('</script>\n')

conn:send('<input type="text" id="pole"/>\n')
conn:send('<input type="submit" value="<-INPUT" onclick="wprowadz()"/>\n')
conn:send('<div id="mycode"></div>\n')
--------------------------------------------------------
    conn:send('</form></body></html>\n')
    conn:on("sent",function(conn) conn:close() end)

end)
end)


--the dot ends the string of UART string receiving
uart.on("data", "\.", function(data)
datax = data
    if data=="quit\." then
      uart.on("data") -- unregister callback function
    end
end, 0)

--------------
--blinking led at output 4, its only for conroll program
znacznik = 1
pin=4
gpio.mode(pin, gpio.OUTPUT)
tmr.alarm(0, 100, 1,--2 sek
function ()
if znacznik == 0 then
gpio.write(pin, gpio.LOW)
znacznik = 1
else
gpio.write(pin, gpio.HIGH)
znacznik = 0
end
end)

Płytka ESP8266

 

komentarz 24 lutego 2018 przez ScriptyChris Mędrzec (190,190 p.)

conn:send('<scripttype="text/javascript"\n')

Czy tworzysz tutaj element <script> z atrybutem type? Tam spacja powinna być, czyli <script type...

function inptext()

Wstaw na końcu w funkcji console.log( mycode ). Wyświetla się coś? W ogóle, czy w konsoli nie pojawia się jakiś błąd?

1 odpowiedź

0 głosów
odpowiedź 24 lutego 2018 przez Czes Nowicjusz (160 p.)
edycja 24 lutego 2018 przez Czes

Wstawilem spację w 'script type' i po uruchomieniu programu skutek jest taki że zniknął na ekranie przycisk '<--INPUT' oraz to okienko po lewej jego stronie do wprowadzania znaków.

Dodałem w koncu lini conn:send('<script type="text/javascript">\n') znak '>' i po uruchomieniu wyzej wspomniane okienko znowu sie pokazało ale bład z wczytywamiem znakow jest dalej

 

 

Co do konsoli to jak rozumiem sa to dwa głowne okna po prowej stronie  czyli dolne 'LOG' i górne komunikaty. W górnym oknie niepojawiaja sie zadne komunikaty o bledach. W dolnym (zielony tekst) jest mnóstwo komunikatów, których nie da sie przekleić. Jeśli to cos moze dać to spróbuję je przepisać albo zrobic fotkę i zalaczyć.

cytat:"Wstaw na końcu w funkcji console.log( mycode ). Wyświetla się coś? W ogóle, czy w konsoli nie pojawia się jakiś błąd?"

Własnie nie rozumiem w ktorym miejscu mam wstawić to 'console.log( mycode )'?

komentarz 5 marca 2018 przez Czes Nowicjusz (160 p.)
edycja 5 marca 2018 przez Czes

"Z przeglądarki na submit wysyłasz żądanie POST"

Nie wiem gdzie znaleźć na przeglądarce 'submit'.  Używjąc firefoksa na konsoli mam wybory, na pasku od lewej strony jest: 

inspektor, konsola, debuger, edytor stylów, wydajność, pamięć, sieć...gdzie to 'submit' (o żądaniu 'post' na razie nie wspomnę)? No jeszcze na dole okna głownego przeglądarki jest pasek gdzie mozna coś wpisać ...próbowalem wpisac tam "post" 

komentarz 6 marca 2018 przez ScriptyChris Mędrzec (190,190 p.)

Dokumentacja dev toolsów w Firefox: https://developer.mozilla.org/en-US/docs/Tools/Network_Monitor

Przykład sprawdzenia żądania POST w Firefox: https://www.youtube.com/watch?v=PUgRMRQoTq4&t=0m45s

Otwórz sobie zakładkę Sieć (z ang. Network) i wyślij ten formularz. Powinien pojawić się request w dev toolsach. Kliknij w niego i otworzy się podokienko z informacjami, a tam m.in. powód błędu (jeśli takowy jest), odpowiedź z serwera, przesłane dane i metadane nagłówka.

komentarz 9 marca 2018 przez Czes Nowicjusz (160 p.)
edycja 9 marca 2018 przez Czes
Otwieram link: http://93.180.171.10:31/ wprowadzam 'jakiśtekst', klikam 'INPUT', klikam 'SENDtoUART'
klikam F12 > sieć(network)>jedno żądanie(one request) - wtedy otwiera sie okienko  na którym klikam "prześlij ponownie" pokazuje sie komunikat:
Rozmiar:0,69KB
Czas: 0,1sek
W pamieci podręcznej: 0
Liczba żądan: 1

Nie widac żadnych komunikatow o błędach. Co zrobiłem nie tak?

Dodałem w programie wyświetlanie komunikatow zwrotnych z UART i uaktualniłem kod na forum.
Wpisanie do okienka przykładowego komunikatu 'oz'  i wklikanie tekstu do UART powinno zwrócić aktualny czas gdyby działało przekazywanie wartości ze zmiennej 'mycode'.

Sama komunikacja UART jest przetestowana, sprawna i przesyła komunikaty w obydwie strony. Jesli do zmiennej 'mycode' zada się wartość inną metodą to wartość ta po kliknieciu SENDtoUART zostaje wysłana.
komentarz 10 marca 2018 przez ScriptyChris Mędrzec (190,190 p.)

Widzę, że w formularzu nie ma atrybut action, który powinieneś wstawić jak napisałem w komentarzu wyżej. Stąd zapewne formularz nie jest wysłany POSTem.

komentarz 10 marca 2018 przez Czes Nowicjusz (160 p.)
edycja 11 marca 2018 przez Czes
Przywrócilem spowrotem w formularzu linię 53 czyli -
('<form action="http://192.168.1.175:31" onsubmit="event.preventDefault(); return false;">\n')
Usunąlem linię 54
Przywrócilem linię 59 czyli ('console.log(mycode)}\n')

Uaktualniłem kod w okienku na górze tematu.

Wystartowalem układ z tymi zmianami. Nie widzę pozytywnych efektow. Czy mozesz spróbować teraz sprawdzić zdalnie co sie dzieje w formularzu?

Z jakiej przegladarki jest ten zrzut ekranu ktory zamieściłeś? Ja mam Chrome i Firefoxa ale nie udaje mi sie zrobić ustawień takich jak u Ciebie. Chodzi o to na dole ekranu.

Układ pozostawiam załączony cały czas. Na UARcie układ ESP otrzymuje czasem komunikaty z innego urzadzenia więc są one wyswietlane na ekranie i w konsoli. Nadal mozna próbować wpisywać na UART jakieś komunikaty, ktore powinny skutkować przesłaniem komunikatu zwrotnego. Na przykład 'oz' , 'od', 'a', 's'

Podobne pytania

0 głosów
1 odpowiedź 323 wizyt
0 głosów
2 odpowiedzi 2,130 wizyt
0 głosów
0 odpowiedzi 408 wizyt

92,417 zapytań

141,222 odpowiedzi

318,984 komentarzy

61,831 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...