NodeMCU

From Infogalactic: the planetary knowledge core
Jump to: navigation, search
NodeMCU
NodeMCU DEVKIT 1.0
NodeMCU DEVKIT 1.0 BOTTOM
Developer ESP8266 Opensource Community
Type Single-board microcontroller
Operating system XTOS
CPU ESP8266[1](LX106[2])
Memory 20kBytes
Storage 4MBytes[3]
Power USB
Website www.nodemcu.com

NodeMCU is an open source IoT platform.[4][5] It uses the Lua scripting language. It is based on the eLua project, and built on the ESP8266 SDK 1.4. It uses many open source projects, such as lua-cjson,[6] and spiffs.[7] It includes firmware which runs on the ESP8266 Wi-Fi SoC, and hardware[8] which is based on the ESP-12 module.

History

NodeMCU was created shortly after the ESP8266 came out. On December 30, 2013, Espressif systems began production of the ESP8266.[9] The ESP8266 is a Wi-Fi SoC integrated with a Tensilica Xtensa LX106 core, widely used in IoT applications (see related projects[10][11][12]). NodeMCU started on 13 Oct 2014, when Hong committed the first file of nodemcu-firmware to GitHub.[13] Two months later, the project expanded to include an open-hardware platform when developer Huang R committed the gerber file of an ESP8266 board, named devkit 1.0.[14] Later that month, Tuan PM ported MQTT client library from Contiki to the ESP8266 SoC platform,[15] and committed to NodeMCU project, then NodeMCU was able to support the MQTT IoT protocol, using Lua to access the MQTT broker. Another important update was made on 30 Jan 2015, when Devsaurus ported the u8glib[16] to NodeMCU project,[17] enabling NodeMCU to easily drive LCD, Screen, OLED, even VGA displays.

Related projects

The Button

The Button is a Wi-Fi connected push button designed by Peter Jennings.[10] The Button is design for single-purpose, internet-enabled functions. When the button is pressed, a connection is made to a web server which will perform the desired task. Applications include a doorbell or panic button.

NodeUSB

NodeUSB is an open IoT platform about the size of a standard USB stick. It was designed to leverage NodeMCU's (Lua) for easy programming and has the extra feature of USB capability. It is ideal for Plug-n-Play solutions, allowing easy prototyping for developers.[11]

ijWatch

ijWatch is an open-hardware and open-source Wi-Fi smartwatch, using an OLED screen and running NodeMCU firmware.[12] The author believes it may be the first smartwatch.

Start play

Connect to an AP

    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

Control GPIO

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

HTTP request

    -- 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

    -- 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)

Connect to MQTT Broker

-- 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 client and server

-- 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")

References

  1. Kumar, Abhijeet, and Apoorva Sharma. "Internet of Life (IOL)." (2015). ISBN 978-93-5156-328-0
  2. Lua error in package.lua at line 80: module 'strict' not found.
  3. Lua error in package.lua at line 80: module 'strict' not found.
  4. Lua error in package.lua at line 80: module 'strict' not found.
  5. Lua error in package.lua at line 80: module 'strict' not found.
  6. Lua error in package.lua at line 80: module 'strict' not found.
  7. Lua error in package.lua at line 80: module 'strict' not found.
  8. Lua error in package.lua at line 80: module 'strict' not found.
  9. Lua error in package.lua at line 80: module 'strict' not found.
  10. 10.0 10.1 Lua error in package.lua at line 80: module 'strict' not found.
  11. 11.0 11.1 Lua error in package.lua at line 80: module 'strict' not found.
  12. 12.0 12.1 Lua error in package.lua at line 80: module 'strict' not found.
  13. Lua error in package.lua at line 80: module 'strict' not found.
  14. Lua error in package.lua at line 80: module 'strict' not found.
  15. Lua error in package.lua at line 80: module 'strict' not found.
  16. Lua error in package.lua at line 80: module 'strict' not found.
  17. Lua error in package.lua at line 80: module 'strict' not found.

External links