NodeMCU é uma plataforma de internet das coisas, de baixo custo e open-source .[2][3] Inicialmente incluía o firmware executado no sistema-em-um-chip ESP8266 Wi-fi, da fabricante Espressif Systems, e hardware baseado no módulo ESP-12 .[4][5] Posteriormente, suporte para o microcontrolador ESP32 32-bit foi adicionado.

NodeMCU
Microcontrolador de Placa Única

NodeMCU DEVKIT 1.0
Desenvolvedor Comunidade Opensource ESP8266
Fabricante Lolin
Fonte de Energia 5V via USB ou pino Vin

3V3 via pino 3V REG

CPU ESP8266
Armazenamento 4MBytes[1]
Loja Online www.nodemcu.com

Visão Geral

editar

NodeMCU é um firmware de código aberto, para o qual projetos abertos de placas de prototipação estão disponíveis. O nome "NodeMCU" combina as palavras em inglês "node" () e "MCU" (Acrônimo para microcontrolador).[6] O termo "NodeMCU" se refere estritamente ao firmware, e não aos kits de desenvolvimento associados.

Tanto o firmware quanto os projetos de placa de desenvolvimento são Open-source.[6]

O firmware usa a linguagem de script Lua.[7] Baseado no projeto eLua, foi construído sobre o SDK ESP8266 0.9.5. Existem muitos projetos de código aberto para o seu uso como a lua-cjson e SPIFFS. Devido à restrição de recursos, os usuários precisam selecionar os módulos relevantes para seus projetos, e construir um firmware específico para suas necessidades. Suporte para o ESP32 de 32-bit também foi implementado.

O hardware para prototipação geralmente consiste em uma placa de circuito impresso funcionando como dual in-line package (DIP), que integra um controlador USB com uma placa menor, contendo o microcontrolador e a antena. A escolha do formato DIP facilita a prototipação em placas de ensaio. O projeto foi baseado inicialmente no módulo ESP-12 do ESP8266, que consistem em um sistema-em-um-chip (em inglês SoC) integrado com um núcleo Tensilica Xtensa LX106, largamente utilizado em aplicações Iot.

História

editar

NodeMCU foi criado logo após o lançamento do ESP8266. Em 30 de dezembro de 2013, a empresa Espressif começou a produzir o ESP8266. A produção do NodeMCU começou em 13 outubro de 2014, quando Hong postou o primeiro arquivo do nodemcu-firmware no GitHub.[8]

Corrente de trabalho

editar

Corrente de trabalho 70mA (Máximo 200mA)

Corrente máxima

editar

1A limitado pelo controlador (AMS1117), imaginando 200mA de pico de trabalho, têm-se livre 800MA, a recomendação é que nunca se ultrapasse 500mA de consumo para componentes externos

Códigos

editar

Conectando em um AP

editar
    ip = wifi.sta.getip()
    print(ip)
    --nil
    wifi.setmode(wifi.STATION)
    wifi.sta.config("SSID","password")
    wifi.sta.connect()
    ip = wifi.sta.getip()
    print(ip)
    --192.168.18.110

Controlando GPIO

editar
    pin = 1
    gpio.mode(pin,gpio.OUTPUT)
    gpio.write(pin,gpio.HIGH)
    print(gpio.read(pin))

HTTP request

editar
    -- A simple http client
    conn=net.createConnection(net.TCP, 0)
    conn:on("receive", function(conn, payload) print(payload) end )
    conn:on("connection", function(c)
        conn:send("GET / HTTP/1.1\r\nHost: www.baidu.com\r\n"
            .."Connection: keep-alive\r\nAccept: */*\r\n\r\n")
        end)
    conn:connect(80,"115.239.210.27")

HTTP server

editar
    -- A simple http server
    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)
      conn:on("sent",function(conn) conn:close() end)
    end)

Conectando a um MQTT Broker

editar
-- init mqtt client with keepalive timer 120sec
m = mqtt.Client("clientid", 120, "user", "password")

-- setup Last Will and Testament (optional)
-- Broker will publish a message with qos = 0, retain = 0, data = "offline"
-- to topic "/lwt" if client don't send keepalive packet
m:lwt("/lwt", "offline", 0, 0)

m:on("connect", function(con) print ("connected") end)
m:on("offline", function(con) print ("offline") end)

-- on publish message receive event
m:on("message", function(conn, topic, data)
  print(topic .. ":" )
  if data ~= nil then
    print(data)
  end
end)

-- for secure: m:connect("192.168.11.118", 1880, 1)
m:connect("192.168.11.118", 1880, 0, function(conn) print("connected") end)

-- subscribe topic with qos = 0
m:subscribe("/topic",0, function(conn) print("subscribe success") end)
-- or subscribe multiple topic (topic/0, qos = 0; topic/1, qos = 1; topic2 , qos = 2)
-- m:subscribe({["topic/0"]=0,["topic/1"]=1,topic2=2}, function(conn) print("subscribe success") end)
-- publish a message with data = hello, QoS = 0, retain = 0
m:publish("/topic","hello",0,0, function(conn) print("sent") end)

m:close();
-- you can call m:connect again

UDP cliente e servidor

editar
-- a udp server
s=net.createServer(net.UDP)
s:on("receive",function(s,c) print(c) end)
s:listen(5683)

-- a udp client
cu=net.createConnection(net.UDP)
cu:on("receive",function(cu,c) print(c) end)
cu:connect(5683,"192.168.18.101")
cu:send("hello")

Referências

  1. Vowstar. «NodeMCU Devkit». Github. NodeMCU Team. Consultado em 2 de abril de 2015 
  2. Zeroday. «A lua based firmware for wifi-soc esp8266». Github. Consultado em 2 de abril de 2015 
  3. Hari Wiguna. «NodeMCU LUA Firmware». Hackaday. Consultado em 2 de abril de 2015 
  4. Systems, Espressif. «Espressif Systems». Espressif-WikiDevi. Consultado em 3 de junho de 2017. Arquivado do original em 1 de dezembro de 2017 
  5. Brian Benchoff. «A DEV BOARD FOR THE ESP LUA INTERPRETER». Hackaday. Consultado em 2 de abril de 2015 
  6. a b https://developer.ibm.com/tutorials/iot-nodemcu-open-why-use/
  7. «The Programming Language Lua». www.lua.org. Consultado em 23 de junho de 2016 
  8. Hong. «First commit of NodeMCU Firmware». Github. Consultado em 2 de abril de 2015