This shows you the differences between two versions of the page.
Next revision | Previous revision Last revision Both sides next revision | ||
nodemcu [2015/01/07 11:44] gwizz created |
nodemcu [2015/12/07 18:57] mrmonteith [Connect the hardware in serial] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | NodeMCU is under very active development. | + | ====== NodeMCU ====== |
- | See the github page: [[https://github.com/nodemcu/nodemcu-firmware]] | + | * See the [[nodemcu-unofficial-faq|nodeMCU Unofficial FAQ]] for answers to your "Frequently Asked Questions". |
+ | |||
+ | ===== Hardware ===== | ||
+ | NodeMCU devkit is a development kit for NodeMCU firmware.\\ It will make NodeMCU 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 ==== | ||
+ | It is the original design of NodeMCU devkit. Very old and never sell on shop. It can't automatic flash firmware. | ||
+ | |||
+ | {{:devkit_0.8.jpg?600|}} | ||
+ | |||
+ | ==== 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. It uses CP2102 as UART bridge, and can flash firmware automatically by using nodemcu-flasher. It support 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 Integer(less memory usage) and Float version firmware provided. | ||
+ | |||
+ | ===== Dependencies ===== | ||
+ | |||
+ | * Build on ESP8266 sdk 0.9.5 | ||
+ | * 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 === | ||
+ | |||
+ | <code lang="lua"> | ||
+ | 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 | ||
+ | </code> | ||
+ | === Manipulate hardware like a arduino === | ||
+ | |||
+ | <code lang="lua"> | ||
+ | pin = 1 | ||
+ | gpio.mode(pin,gpio.OUTPUT) | ||
+ | gpio.write(pin,gpio.HIGH) | ||
+ | print(gpio.read(pin)) | ||
+ | </code> | ||
+ | === Write network application in nodejs style === | ||
+ | |||
+ | <code lang="lua"> | ||
+ | -- 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") | ||
+ | </code> | ||
+ | === Or a simple http server === | ||
+ | |||
+ | <code lang="lua"> | ||
+ | -- 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) | ||
+ | </code> | ||
+ | === Connect to MQTT Broker === | ||
+ | |||
+ | <code lang="lua"> | ||
+ | -- 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 | ||
+ | </code> | ||
+ | === UDP client and server === | ||
+ | |||
+ | <code lang="lua"> | ||
+ | |||
+ | -- 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") | ||
+ | |||
+ | </code> | ||
- | And the website for the project: [[http://nodemcu.com/index_en.html]] |