====== NodeMCU ======
The name **NodeMCU** refers to two separate components:
* The NodeMCU **firmware** which provides a Lua development and execution environment which can run on //any// ESP8266 module with a minimum of 512Kb Flash Memory.
* The NodeMCU Inc manufactured **development kits**. These are low-cost breadboard-friendly modules which are aimed at providing a simple to configure and set up, hardware platform for developing ESP8266-based Lua IoT applications.
===== Firmware =====
This is hosted on Github in the [[https://github.com/nodemcu/nodemcu-firmware|Nodemcu Firmware Repository]] with the [[https://nodemcu.readthedocs.org/en/dev/#nodemcu-documentation|NodeMCU Documentation]] online, and an [[nodemcu-unofficial-faq|nodeMCU Unofficial FAQ]] maintained on this wiki for answers to your "Frequently Asked Questions".
===== Hardware =====
NodeMCU devkit is a development kit for NodeMCU firmware. It's aim is to make NodeMCU firmware development more easy. With a micro USB cable, you can connect NodeMCU devkit to your laptop and flash it without any trouble, just like Arduino. It is an open hardware, with ESP-12 core with 32Mbits(4MBytes) flash.
==== Devkit 0.8 ====
This was the original design of NodeMCU devkit which never released on general sale.
==== Devkit 0.9 ====
It is the second design of NodeMCU devkit. It uses CH340G as UART bridge, and can flash firmware automatically by using nodemcu-flasher.
{{:devkit_0.9.jpg?300|}}
{{:devkit_0.9_B.jpg?300|}}
==== Devkit 1.0 ====
It is the 5th design of NodeMCU devkit. This uses CP2102 as UART bridge, and can flash firmware automatically by using nodemcu-flasher. It also supports Apple's MAC OS.
{{:devkit_1.0.jpg?600|}}
===== Introduction =====
* Website: [[http://www.nodemcu.com/index_en.html]]
* Forum: [[http://www.esp8266.com/viewforum.php?f=17]]
* Firmware: [[https://github.com/nodemcu/nodemcu-firmware]]
* Hardware: [[https://github.com/nodemcu/nodemcu-devkit]]
* Flasher: [[https://github.com/nodemcu/nodemcu-flasher]]
===== Summary =====
* Easy to access wireless router
* Based on Lua 5.1.4 (without debug, os module.)
* Event-Drive programming preferred.
* Build-in json, file, timer, pwm, i2c, spi, 1-wire, net, mqtt, coap, gpio, wifi, adc, uart and system api.
* GPIO pin re-mapped, use the index to access gpio, i2c, pwm.
* Both Floating Point and Integer versions of the firmware can be built.
===== Dependencies =====
* Build on ESP8266 the current Espressif non-OS SDK.
* Lua core based on eLua project
* cjson based on lua-cjson
* File system based on spiffs
===== Flash the firmware =====
nodemcu_latest.bin: 0x00000\\ for most esp8266 modules, just pull GPIO0 down and restart.\\ You can use the [[https://github.com/nodemcu/nodemcu-flasher|nodemcu-flasher]] to burn the firmware.
Or, if you build your own bin from source code.\\ 0x00000.bin: 0x00000\\ 0x10000.bin: 0x10000
//Better run file.format() after flash//
===== Connect to the hardware via serial interface =====
Need to explain how to connect up serial portion.
baudrate:9600
===== Start play =====
=== Connect to your ap ===
ip = wifi.sta.getip()
print(ip)
-- nil
wifi.setmode(wifi.STATION)
wifi.sta.config("SSID","password")
ip = wifi.sta.getip()
print(ip)
-- 192.168.18.110
=== Manipulate hardware like a arduino ===
pin = 1
gpio.mode(pin,gpio.OUTPUT)
gpio.write(pin,gpio.HIGH)
print(gpio.read(pin))
=== Write network application in nodejs style ===
-- A simple http client
conn=net.createConnection(net.TCP, 0)
conn:on("receive", function(conn, payload) print(payload) end )
conn:connect(80,"115.239.210.27")
conn:send("GET / HTTP/1.1\r\nHost: www.baidu.com\r\n"
.."Connection: keep-alive\r\nAccept: */*\r\n\r\n")
=== Or a simple 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(" Hello, NodeMcu.
")
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")