• 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

0 głosów
304 wizyt
pytanie zadane 23 lutego 2018 w JavaScript, jQuery, AJAX 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 JSHolic Szeryf (81,260 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 JSHolic Szeryf (81,260 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 JSHolic Szeryf (81,260 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ź 56 wizyt
0 głosów
2 odpowiedzi 1,400 wizyt
0 głosów
1 odpowiedź 80 wizyt
pytanie zadane 9 sierpnia 2018 w Nasze projekty przez Kamil110501 Bywalec (2,440 p.)
Porady nie od parady
Wynikowy wygląd pytania, odpowiedzi czy komentarza, różni się od tego zaprezentowanego w edytorze postów. Stosuj więc funkcję Podgląd posta znajdującą się pod edytorem, aby upewnić się, czy na pewno ostateczny rezultat ci odpowiada.Podgląd posta

66,985 zapytań

113,890 odpowiedzi

241,339 komentarzy

46,942 pasjonatów

Przeglądających: 205
Pasjonatów: 8 Gości: 197

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...