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

已隱藏部分未翻譯内容，歡迎參與翻譯。
History
-------

NodeMCU is started after ESP8266 come out. In December 30, 2013, Espressif systems begin production of ESP8266. ESP8266 is an Wi-Fi SoC and integrated with LX106 core, widely used in IoT applications(See related projects). In 13 Oct 2014, Hong committed first file of nodemcu-firmware to github, NodeMCU project started. And then more and more developers from ESP8266 opensource community join in NodeMCU developer team. On 1 Dec 2014, Huang R commit the gerber file of an ESP8266 board, then NodeMCU project have the first open-hardware which named devkit 1.0, thus NodeMCU is not only a firmware, it becomes a platform. In 31 Dec 2014, Tuan PM port MQTT client library from Contiki to ESP8266 SoC platform, and commit to NodeMCU project, then NodeMCU can support MQTT IoT protocol, using Lua access MQTT broker, it is an important update of firmware. Another important update is in 30 Jan 2015, Devsaurus port u8glib to NodeMCU project, and NodeMCU can drive LCD, Screen, OLED, even VGA display module easily.

固件烧写
----

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

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

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

硬體連接
----

如果使用 NodeMCU devkit, 只需要安裝 CH340G 驅動程式, 並且將開發模組使用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.  缺少或`|url=`为空 (帮助); 使用`|accessdate=`需要含有`|url=` (帮助)
3. ↑  Vowstar.. Github. NodeMCU Team.  [2 April 2015]. （原始内容存档于2015-08-15）.
4. 1 2 .  [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. ↑
10. ↑
11. ↑
12. ↑  Hong.. Github.  [2 April 2015]. （原始内容存档于2021-08-15）.
13. ↑  Huang R.. Github.  [2 April 2015]. （原始内容存档于2021-08-15）.
14. ↑  Tuan PM.. Github.  [2 April 2015]. （原始内容存档于2017-01-02）.
15. ↑  Olikraus; Daniel Sittig.. Google code.  [2 April 2015]. （原始内容存档于2015-04-06）.
16. ↑  Devsaurus.. Github.  [2 April 2015]. （原始内容存档于2021-08-15）.
17. 1 2 .  [2015-04-01]. （原始内容存档于2015-04-02）.

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
环境智能 |
| --- |
|  |
| 概念 | 
* 上下文感知（英语：）
* 物联网
* 超链接对象（英语：）
* Profiling（英语：）
* Spime（英语：）
* Supranet（英语：）
* 普适计算
* Web of Things（英语：）
* 无线传感器网络

 |
|  |
| 技术 | 
* 6LoWPAN（英语：）
* ANT+（英语：）
* DASH7（英语：）
* IEEE 802.15.4（英语：）
* Internet 0（英语：）
* 机器对机器
* 射频识别
* 智能微尘
* Tera-play（英语：）
* XBee（英语：）

 |
|  |
| 平台 | 
* Arduino
* Contiki
* Electric Imp（英语：）
* Gadgeteer（英语：）
* ioBridge（英语：）
* 树莓派
* TinyOS
* Wiring（英语：）
* Xively（英语：）
* NodeMCU

 |
|  |
| 应用 | 
* 环境设备（英语：）
* CeNSE（英语：）
* 互聯汽車
* 家庭自动化
* HomeOS
* 互联网电冰箱（英语：）
* 娜芭兔（英语：）
* 智慧城市
* 智能电视
* Smarter Planet（英语：）

 |
|  |
| 开拓者 | 
* 凯文·阿什顿（英语：）
* 亚当·邓克尔斯（英语：）
* 斯丹法诺·马扎诺（英语：）
* 唐·諾曼
* 罗培博（英语：）
* Josef Preishuber-Pflügl（英语：）
* 约翰·希利·布郎（英语：）
* 布鲁斯·斯特林
* 马克·维瑟

 |
|  |
| 其他 | 
* 环境设备（英语：）
* 环境感知（英语：）
* Ebbits project（英语：）
* IPSO Alliance（英语：）

 |

 |