NodeMCU

NodeMCU是一个开源[4]物联网平台。 它使用Lua脚本语言编程[4]。该平台基于eLua [5]开源项目,底层使用ESP8266 sdk 0.9.5版本。该平台使用了很多开源项目, 例如 lua-cjson[6], spiffs[7]. NodeMCU包含了可以运行在 esp8266 Wi-Fi SoC芯片之上的固件,以及基于ESP-12模组的硬件。

NodeMCU
NodeMCU DEVKIT 1.0 BETA
研發商ESP8266开源社区
类型片上系统
作業系統XTOS
電源USB
中央处理器ESP8266[1](LX106[2])
記憶體20kBytes
硬盘儲存空間4MBytes[3]
網站http://www.nodemcu.com
NodeMCU DEVKIT 1.0 BETA 背面

固件烧写

nodemcu_latest.bin: 0x00000
对于大多数 esp8266 模块, 直接拉低 GPIO0 引脚的电平,并且重新上电或重启。
可以使用 nodemcu-flasher页面存档备份,存于 烧写固件[17]

特别的,如果你想编译/构建自己的固件,需要注意以下烧写地址:
0x00000.bin: 0x00000
0x10000.bin: 0x10000

注意,在烧写之后,最好执行 file.format()

硬體連接

如果使用 NodeMCU devkit, 只需要安裝 CH340G 驅動程式[17], 並且將開發模組使用micro-usb 線連接到電腦。 然後,將波特率設為9600, 並打開序列埠。若使用普通的esp8266模组, 則必須準備usb-ttl 轉接器。

程式举例

连接Wi-Fi热点

    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

如同arduino般操作硬体

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

使用 nodejs 风格网络编程

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

简易的HTTP伺服器

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

连接 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 客户端与伺服器

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

引用文献

  1. Kumar, Abhijeet, and Apoorva Sharma. "Internet of Life (IOL)." (2015). ISBN 978-93-5156-328-0
  2. Brian Benchoff. . Hackaday.
  3. Vowstar. . Github. NodeMCU Team. [2 April 2015]. (原始内容存档于2015-08-15).
  4. . [2015-04-01]. (原始内容存档于2015-08-12).
  5. . [2015-04-01]. (原始内容存档于2010-12-27).
  6. . [2015-04-01]. (原始内容存档于2015-12-31).
  7. . [2015-04-01]. (原始内容存档于2015-11-03).
  8. Espressif system. . 中国上海讯. December 30, 2013 [2 April 2015]. (原始内容存档于2015-04-02).
  9. Hong. . Github. [2 April 2015]. (原始内容存档于2021-08-15).
  10. Huang R. . Github. [2 April 2015]. (原始内容存档于2021-08-15).
  11. Tuan PM. . Github. [2 April 2015]. (原始内容存档于2017-01-02).
  12. Olikraus; Daniel Sittig. . Google code. [2 April 2015]. (原始内容存档于2015-04-06).
  13. Devsaurus. . Github. [2 April 2015]. (原始内容存档于2021-08-15).
  14. . [2015-04-01]. (原始内容存档于2015-04-02).
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.