NodeMcu
+A lua based firmware for wifi-soc esp8266
+version 0.9.2 build 2014-12-11
+Change log
+2014-12-09
+increased the number of alarm in tmr module, now it has 7 alarm.
2014-12-08
+add uart.setup(), uart.write() api.
Summary
+-
+
- Easy to access wireless router +
- Based on Lua 5.1.4 +
- Event-Drive programming preferred. +
- Build-in file, timer, pwm, i2c, 1-wire, net, gpio, wifi, adc, uart and system api. +
- GPIO pin re-mapped, use the index to access gpio, i2c, pwm. +
- GPIO Map Table: +
IO index | ESP8266 pin | IO index | ESP8266 pin | +
---|---|---|---|
0 | GPIO12 | 8 | GPIO0 | +
1 | GPIO13 | 9 | GPIO2 | +
2 | GPIO14 | 10 | GPIO4 | +
3 | GPIO15 | 11 | GPIO5 | +
4 | GPIO3 | + | |
5 | GPIO1 | + | |
6 | GPIO9 | + | |
7 | GPIO10 | + |
Flash the firmware
+nodemcu_512k.bin: 0x00000
+for most esp8266 modules, just pull GPIO0 down and restart.
+You can use the nodemcu-flasher to burn the firmware.
Connect the hardware in serial
+braudrate:9600
+Start play
+Connect to your ap
+print(wifi.sta.getip()) + --0.0.0.0 + wifi.setmode(wifi.STATION) + wifi.sta.config("SSID","password") + print(wifi.sta.getip()) + --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("<h1> Hello, NodeMcu.</h1>") + end) + conn:on("sent",function(conn) conn:close() end) + end) +
Do something shining
+function led(r,g,b) + pwm.setduty(0,r) + pwm.setduty(1,g) + pwm.setduty(2,b) + end + pwm.setup(0,500,512) + pwm.setup(1,500,512) + pwm.setup(2,500,512) + pwm.start(0) + pwm.start(1) + pwm.start(2) + led(512,0,0) -- red + led(0,0,512) -- blue +
And blink it
+lighton=0 + tmr.alarm(1,1000,1,function() + if lighton==0 then + lighton=1 + led(512,512,512) + else + lighton=0 + led(0,0,0) + end + end) +
If you want to run something when system started
+--init.lua will be excuted + file.open("init.lua","w") + file.writeline([[print("Hello, do this at the beginning.")]]) + file.close() + node.restart() -- this will restart the module. +
With below code, you can telnet to your esp8266 now
+-- a simple telnet server + s=net.createServer(net.TCP,180) + s:listen(2323,function(c) + function s_output(str) + if(c~=nil) + then c:send(str) + end + end + node.output(s_output, 0) -- re-direct output to function s_ouput. + c:on("receive",function(c,l) + node.input(l) -- works like pcall(loadstring(l)) but support multiple separate line + end) + c:on("disconnection",function(c) + node.output(nil) -- un-regist the redirect output function, output goes to serial + end) + print("Welcome to NodeMcu world.") + end) +
Use DS18B20 module extends your esp8266
+-- read temperature with DS18B20 + t=require("ds18b20") + t.setup(9) + addrs=t.addrs() + -- Total DS18B20 numbers, assume it is 2 + print(table.getn(addrs)) + -- The first DS18B20 + print(t.read(addrs[1],t.C)) + print(t.read(addrs[1],t.F)) + print(t.read(addrs[1],t.K)) + -- The second DS18B20 + print(t.read(addrs[2],t.C)) + print(t.read(addrs[2],t.F)) + print(t.read(addrs[2],t.K)) + -- Just read + print(t.read()) + -- Just read as centigrade + print(t.read(nil,t.C)) + -- Don't forget to release it after use + t = nil + package.loaded["ds18b20"]=nil +
Check this out
+Tencent QQ group: 309957875
+nodemcu wiki
+nodemcu.com