ESP8266 - LUA Webserver - Arduino Communicatie

Software vragen voor ESP chip familie
Berichten: 13
Geregistreerd: 03 Apr 2015, 12:16
Woonplaats: Leuven

ESP8266 - LUA Webserver - Arduino Communicatie

Berichtdoor Herbdela » 02 Jun 2016, 14:09

Ik heb een werkend domotica project op mijn Arduino. Als uitbreiding wens ik dit project te besturen via WIFI door middel van een webserver op ESP8266-01 en een Arduino GSMapplicatie.
Als basis gebruik ik de programma's van Rui Santos ( http://randomnerdtutorials.com/esp8266-web-server/ //Rui Santos led control by webpage /// http://randomnerdtutorials.com/esp8266- ... -inventor/ //Rui Santos Android led control met AppInventor ).
Hierbij worden op de ESP8266 twee leds geschakeld (basis Lua-programma), ik heb wijzigingen aangebracht om op de webpage naast de besturingsbuttons van de LEDS ook een weergave te hebben van het gegeven seriële stringcommando en een feedback te krijgen van de Ledstatussen. De feedback gebeurt door het uitlezen van de ESP pins met het Commando gpio.read(pin).
Alles werkt doch er gaat iets mis met de weergave van de Ledstatussen in de webpage; deze weergave is NIET synchroon met de Ledstatus op de ESP. Druk ik op Led1 ON button, dan wordt LED1 aangezet, lees ik op webpagina dat string ON1 wordt doorgestuurd, doch Ledstatus blijft op 0 staan. Druk ik een tweede maal op gelijk welk andere button, dan wordt de Ledstatus van Led1 weergegeven. Er is dus een synchronisatiefout.
Bij een nieuwe testcyclus bestuur ik de LEDS via mijn Android GSM en krijg ik terug hetzelfde resultaat op de webpagina!
Ik heb dan na elke commando met mijn Android de webpage manueel een REFRESH gedaan en dan krijg ik de juiste weergave.
De oplossing is dus om na elk commando een refresh te doen van de webpage. Ik heb dan de lijn buf = buf.."META HTTP-EQUIV= "REFRESH" CONTENT= "5" "; in mijn programma opgenomen, maar krijg bij het upladen een ERROR :stdin:24: unexpected symbol near '5' .
Wat doe ik verkeerd en hoe kan ik dit oplossen ?

Bij nazicht op ESP forum blijkt dat grotendeels de programmering van ESP gebeurt met AT Commando's. Zeer weinig informatie te vinden betreffende LUA webserver programmatie. De meeste vragen betreffende seriële communicatie ESP - Arduino met de Lua Commands uart.write() en uart.read() blijven onbeantwoord. Ook geen tutorials hierover gevonden.

Hierbij mijn testprogramma
***********************
Programma:
cpp code
wifi.setmode(wifi.STATION)
wifi.sta.config("bbox2-4fd4","5A1AEA5239")
--ESP8266 Web Server Tutorial
--Controling esp8266 led outputs via lua webser
print(wifi.sta.getip())
led1 = 3
led2 = 4
data =""
gpio.mode(led1, gpio.OUTPUT)
gpio.mode(led2, gpio.OUTPUT)
uart.setup(0,9600,8,0,1)
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)

conn:on("receive", function(client,request)
local buf = "";

local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");
if(method == nil)then
_, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP");
end
local _GET = {}
if (vars ~= nil)then
for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do
_GET[k] = v
print(v)
data = v
end
end

ledbl = gpio.read(3)
ledwh = gpio.read(4)
-- debugging visualisatie gpio.read(pin)
print(ledbl)
print(ledwh)
-- generates HTML web site

client:send(buf); -- Inlezen GPIO(pin) opstart status
-- buf = buf.."HTTP/1.1 200 OK\n\n";
-- buf = buf.."META HTTP-EQUIV= "REFRESH" CONTENT= "5" "; -- ERROR
client:send(buf); -- Inlezen GPIO(pin) status
buf = buf.."<h1> ESP8266 LED Control</h1>";
buf = buf.."<p> Command = "..data.."</p>";
buf = buf.."<p> LedStatus ledblue = "..ledbl.."</p>";
buf = buf.."<p> LedStatus ledwhite = "..ledwh.." </p>";

buf = buf.."<p>GPIO0 <a href=\"?pin=ON1\"><button>ON</button></a>&nbsp;<a href=\"?pin=OFF1\"><button>OFF</button></a></p>";
buf = buf.."<p>GPIO2 <a href=\"?pin=ON2\"><button>ON</button></a>&nbsp;<a href=\"?pin=OFF2\"><button>OFF</button></a></p>";
local _on,_off = "",""
if(_GET.pin == "ON1")then
gpio.write(led1, gpio.HIGH);
uart.write(0,"L1ON\n"); --SerialCommand transfert naar Arduino
elseif(_GET.pin == "OFF1")then
gpio.write(led1, gpio.LOW);
uart.write(0,"L1OFF\n");
elseif(_GET.pin == "ON2")then
gpio.write(led2, gpio.HIGH);
uart.write(0,"L2ON\n");
elseif(_GET.pin == "OFF2")then
gpio.write(led2, gpio.LOW);
uart.write(0,"L2OFF\n");
end

client:send(buf);
client:close();
collectgarbage();
end)
end)

Advertisement

Gebruikers-avatar
Berichten: 4643
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: ESP8266 - LUA Webserver - Arduino Communicatie

Berichtdoor nicoverduin » 02 Jun 2016, 16:45

Ik ken geen lua maar ik vermoed dat je die tussenliggende dubbele quotes vooraf met een backslash moet voorzien. Zie ook: https://www.lua.org/pil/2.4.html
Docent Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 13
Geregistreerd: 03 Apr 2015, 12:16
Woonplaats: Leuven

Re: ESP8266 - LUA Webserver - Arduino Communicatie

Berichtdoor Herbdela » 02 Jun 2016, 20:24

Thanks voor de raadgeving Nico.
Ik heb de bewuste ERROR line aangepast met :
buf = buf.."<meta http-equiv='refresh' content= 1 />";
en de webpage refresh gebeurt na elke seconde, met correcte update van de Ledstatus, zowel bij sturing via de webpage , als met sturing via mijn Android GSM.
Voor een juiste correctie van deze refresh line heb ik nergens een duidelijke aanwijzing gevonden, behalve jouw tip met de "/" , maar nergens vond ik een aanwijzing om de tijdsduur van 1 sec NIET als "1" te schrijven, ook niet voor de "refresh" te corrigeren door 'refresh'. Het was gewoon een Try and Error procedure, die tot een goed resultaat heeft geleid.

Nu naar de volgende stap, aansturing van de ESP via Arduino met uart.on() commando.
Thanks voor je positieve response.
Groetjes Herbert

Gebruikers-avatar
Berichten: 4643
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: ESP8266 - LUA Webserver - Arduino Communicatie

Berichtdoor nicoverduin » 02 Jun 2016, 21:20

Herbdela schreef:behalve jouw tip met de "/" , maar nergens vond ik een aanwijzing om de tijdsduur van 1 sec NIET als "1" te schrijven, ook niet voor de "refresh" te corrigeren door 'refresh'. Het was gewoon een Try and Error procedure, die tot een goed resultaat heeft geleid.

Je had gewoon kunnen googelen met "html refresh". En toen vind ik dit : https://metatags.nl/lijst-van-metatags/ ... ag-refresh
En jij hebt een zgn. forward slash gebruikt en geen backward slash.
Docent Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar ESP Software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast