12 julho, 2016

Comandos Wifi NodeMCU

Comandos Wifi NodeMCU


[Listar Access Points]

-- Definindo Modo Wifi como estação
wifi.setmode(wifi.STATION)

-- print ap list
function listap(t)
for ssid,v in pairs(t) do
authmode, rssi, bssid, channel =
string.match(v, "(%d),(-?%d+),(%x%x:%x%x:%x%x:%x%x:%x%x:%x%x),(%d+)")
print(ssid,authmode,rssi,bssid,channel)
end
end
wifi.sta.getap(listap)

[Conectar Roteador Wifi]

-- Definindo Modo Wifi como estação
wifi.setmode(wifi.STATION)

-- Configurando conexão com o roteador, trocar o SSID pelo nome da rede wifi e a senha
wifi.sta.config("SSID","SENHA")

-- Iniciando conexão
print("Tentando conectar ao Roteador Wifi, aguarde...")
wifi.sta.connect()

print("Aguardando...")
-- Timer de 1 em 1 segundo para aguardar conectar
local cnt = 0
-- Definindo máximo de tentativas de conexão
local maxtry = 30
tmr.alarm(0, 1000, 1, function()
print("timer acionado...")
if (wifi.sta.getip() == nil) and (cnt <= maxtry) then
print("Tentando conectar ao Roteador Wifi, aguarde...")
cnt = cnt + 1
else
tmr.stop(0);
print("Conexão efetuada com sucesso")
if (cnt <= maxtry) then
print("Conectado ao Roteador\r\nMAC:"..wifi.sta.getmac().."\r\nIP:"..wifi.sta.getip())
else
print("Timeout na conexão com o roteador")
end
cnt = nil;
collectgarbage();
end
end)


[Requesição HTTP]

-- Fazendo uma requisição Http GET
conn=net.createConnection(net.TCP, false)
conn:on("receive", function(conn, pl) print(pl) end)
conn:connect(80,"121.41.33.127")
conn:send("GET / HTTP/1.1\r\nHost: www.nodemcu.com\r\n"
.."Connection: keep-alive\r\nAccept: */*\r\n\r\n")

[NodeMCU como Access Point]

-- Setando modo Wifi para estação e Ponto de Acesso
wifi.setmode(wifi.STATIONAP)

-- Access Point com senha
cfg={}
cfg.ssid="nodemcu_hotspot"
cfg.pwd="12345678"
wifi.ap.config(cfg)


-- Timer de 1 em 1 segundo para aguardar conectar
local cnt = 0
local maxtry = 30
tmr.alarm(0, 1000, 1, function()
if (wifi.ap.getip() == nil) and (cnt <= maxtry) then
print("Configurando Access Point, aguarde...")
cnt = cnt + 1
else
tmr.stop(0);
print("Configuração efetuada com sucesso")
if (cnt <= maxtry) then
print("Access Point\r\nMAC:"..wifi.ap.getmac().."\r\nIP:"..wifi.ap.getip())
else
print("Timeout configurando access point")
end
cnt = nil;
collectgarbage();
end
end)

-- Configurando Servidor Http
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
conn:on("receive",function(conn,payload)
print(payload)
conn:send("<h1> Hello, NodeMCU.</h1>")
end)
end)

[Servidor HTTP]

srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
conn:on("receive",function(conn,payload)
print(payload)
conn:send("<h1> Hello, NodeMCU.</h1>")
end)
end)

Utilizando o LED LDR e Sensor de Luminosidade do Mini NodeMCU

Utilizando o LED LDR do Mini NodeMCU

Nesse artigo vamos utilizar o Led LDR em conjunto com o sensor de luminosidade que veem embutidos no Mini NodeMCU. Quando a luminosidade estiver abaixo do valor 400 (Pode-se ajustar esse valor) vamos ligar a luz verde e quando estiver acima vamos ligar a luz vermelha. Você pode testar colocando a mão sob o sensor de luminosidade e depois retirar a mão.

Código Lua:


print("Waiting Startup")
tmr.alarm(0, 30000, 1, function() 
    print("Startup")
    tmr.stop(0)
    start()
end)


function start()

LDR_GREEN=6
LDR_BLUE=7
LDR_RED=8

gpio.mode(LDR_RED, gpio.OUTPUT)
gpio.mode(LDR_GREEN, gpio.OUTPUT)
gpio.mode(LDR_BLUE, gpio.OUTPUT)

gpio.write(LDR_RED, gpio.LOW)
gpio.write(LDR_GREEN, gpio.LOW)
gpio.write(LDR_BLUE, gpio.LOW) 


lumins=adc.read(0)

if (lumins > 400) then
    state = 1
    gpio.write(LDR_RED, gpio.HIGH)
    gpio.write(LDR_GREEN, gpio.LOW)
else
    gpio.write(LDR_GREEN, gpio.HIGH)
    gpio.write(LDR_RED, gpio.LOW)
    state = 0
end


lastState = state
while 1 do
    lumins=adc.read(0)
    if (lumins > 400) then
        state = 1
    else
        state = 0
    end

    if (lastState ~= state) then
        print("state change")
        if (state == 1) then
            gpio.write(LDR_RED, gpio.HIGH)
            gpio.write(LDR_GREEN, gpio.LOW)
        else
            gpio.write(LDR_GREEN, gpio.HIGH)
            gpio.write(LDR_RED, gpio.LOW)
        end
        lastState = state
    end
    
    tmr.delay(1000000);
end

end

Sensor de luminosidade analógico no NodeMCU

Sensor de luminosidade analógico no NodeMCU



Para utilizar o pino analógico basta conectar no pino A0 da Board :

Nesse caso foi utilizado o sensor da gbk robotics, utilizando apenas os pinos VCC, Sinal Analog. 

Para efetuar a leitura do sensor no Script Lua, utilizamos o seguinte comando:
adc.read(0)


Código lua para o sensor de luminosidade:
tmr.alarm(1, 10000, 1, function()
-- Efetuando a leitura do sensor de luminosidade
lumins = adc.read(0)
print(lumins)
if (lumins > 200) then
print("Luz acesa")
else
print("Luz apagada")
end
lumins=nil
collectgarbage();
end)


Definição de Pinos Mini NodeMCU

Definição de Pinos 

Mini NodeMCU


No NodeMCU todo acesso é baseado no número do indice do I/O e não no número do GPIO. Por exemplo, se quisermos conectar algum sensor GPIO 10 (SD3 na board) no Script Lua devemos definir o número do PIN como 12. Abaixo temos duas tabelas que são muito importantes para podermos definir o número do índice corretamente.

IO index
ESP8266 pin
IO index
ESP8266 pin
0 [*]
GPIO16
7
GPIO13
1
GPIO5
8
GPIO15
2
GPIO4
9
GPIO3
3
GPIO0
10
GPIO1
4
GPIO2
11
GPIO9
5
GPIO14
12
GPIO10
6
GPIO12




[*] D0(GPIO16) somente pode ser utilizada como gpio read/write. Não tem suporte para open-drain/interrupt/pwm/i2c/ow.



Board Layout






Documentação NodeMCU

Você pode encontrar toda documentação do NodeMCU, e também exemplos de como utilizar no seguinte link oficial: http://nodemcu.readthedocs.org/en/dev/



10 julho, 2016

Sensor de movimento digital PIR NodeMCU

Sensor de movimento digital PIR no NodeMCU



]


Código Lua:


-- Definindo input pin - GPIO12
inpin=6                      
-- Atachando input pin como PullUp
gpio.mode(inpin,gpio.INT,gpio.PULLUP)
-- Função que sera acionada quando movimento detectado
function motion()
           print("Movimento Detectado!")
          --gpio.write(outpin,gpio.HIGH)  -- Led ON – Ligando Led
          --tmr.delay(5000000)           -- Aguardando um tempo para marcar movimento
         --gpio.write(outpin,gpio.LOW)   -- Led OFF – Desligando led
      end

-- Associando a função a trigger e definindo que quando o pin 6 estiver em Up deve acionar
gpio.trig(6,"up",motion)

Definição de Pinos ESP8266 NodeMCU V3

Definição de Pinos 

ESP8266 NodeMCU V3


No NodeMCU todo acesso é baseado no número do indice do I/O e não no número do GPIO. Por exemplo, se quisermos conectar algum sensor GPIO 10 (SD3 na board) no Script Lua devemos definir o número do PIN como 12. Abaixo temos duas tabelas que são muito importantes para podermos definir o número do índice corretamente.

IO index
ESP8266 pin
IO index
ESP8266 pin
0 [*]
GPIO16
7
GPIO13
1
GPIO5
8
GPIO15
2
GPIO4
9
GPIO3
3
GPIO0
10
GPIO1
4
GPIO2
11
GPIO9
5
GPIO14
12
GPIO10
6
GPIO12




[*] D0(GPIO16) somente pode ser utilizada como gpio read/write. Não tem suporte para open-drain/interrupt/pwm/i2c/ow.



Board Layout






Documentação NodeMCU

Você pode encontrar toda documentação do NodeMCU, e também exemplos de como utilizar no seguinte link oficial: http://nodemcu.readthedocs.org/en/dev/


Sensor de Temperatura DHT11 NodeMCU

Sensor de Temperatura DHT11 NodeMCU


Código lua para o sensor de Temperatura e Humidade DHT11:

PIN_DHT_11 = 5  --­­ Definindo pino de dados digital, GPIO14 (Ver tabela)

TEMPERATURE_FORMATER="Temperatura:%d.%02d,Humidade:%d.%02d"

-- Efetua a leitura do sensor DHT no GPIO14

status,temp,humi,temp_decimial,humi_decimial = dht.read(PIN_DHT_11)

 if( status == dht.OK ) then

 dadosTemperatura =
        string.format(
          TEMPERATURE_FORMATER,
          temp,
          temp_decimial,
          humi,
          humi_decimial

        )
      print(dadosTemperatura)
elseif( status == dht.ERROR_CHECKSUM ) then

      print("Erro de checksum na leitura do sensor")
 elseif( status == dht.ERROR_TIMEOUT ) then
      print("Timeout na leitura do sensor")
end