<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://w.electrodragon.com/w/index.php?action=history&amp;feed=atom&amp;title=ESP8266_NodeMCU_Code</id>
	<title>ESP8266 NodeMCU Code - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://w.electrodragon.com/w/index.php?action=history&amp;feed=atom&amp;title=ESP8266_NodeMCU_Code"/>
	<link rel="alternate" type="text/html" href="https://w.electrodragon.com/w/index.php?title=ESP8266_NodeMCU_Code&amp;action=history"/>
	<updated>2026-06-05T00:42:30Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.2</generator>
	<entry>
		<id>https://w.electrodragon.com/w/index.php?title=ESP8266_NodeMCU_Code&amp;diff=27119&amp;oldid=prev</id>
		<title>Chao: Created page with &quot;==  Examples and Demo == * using IDE [https://github.com/4refr0nt/ESPlorer esplorer] can easily manage and program the ESP8266 board * Here we only try and make sure the code...&quot;</title>
		<link rel="alternate" type="text/html" href="https://w.electrodragon.com/w/index.php?title=ESP8266_NodeMCU_Code&amp;diff=27119&amp;oldid=prev"/>
		<updated>2020-06-18T16:59:37Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==  Examples and Demo == * using IDE [https://github.com/4refr0nt/ESPlorer esplorer] can easily manage and program the ESP8266 board * Here we only try and make sure the code...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==  Examples and Demo ==&lt;br /&gt;
* using IDE [https://github.com/4refr0nt/ESPlorer esplorer] can easily manage and program the ESP8266 board&lt;br /&gt;
* Here we only try and make sure the code can be compiled well, ds18b20 is not connected.&lt;br /&gt;
* Use &amp;quot;upload&amp;quot; to upload code is better for avoiding errors&lt;br /&gt;
[[File:Using esplorer.png|500px]]&lt;br /&gt;
&lt;br /&gt;
=== DS18B20 Read Temperature (simplified codes)===&lt;br /&gt;
&lt;br /&gt;
* ds18b20.lua shorten code, this will be used as a lua module&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
-- DS18B20 one wire module for NODEMCU &lt;br /&gt;
-- LICENCE: http://opensource.org/licenses/MIT &lt;br /&gt;
-- Vowstar &amp;lt;vowstar@nodemcu.com&amp;gt; &lt;br /&gt;
-- Dramatic simplification: Peter Scargill &lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
-- Set module name as parameter of require &lt;br /&gt;
local modname = ...&lt;br /&gt;
local M = {} &lt;br /&gt;
_G[modname] = M &lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
-- Local used modules &lt;br /&gt;
--&lt;br /&gt;
-- Table module &lt;br /&gt;
local table = table &lt;br /&gt;
-- String module &lt;br /&gt;
local string = string &lt;br /&gt;
-- One wire module &lt;br /&gt;
local ow = ow &lt;br /&gt;
-- Timer module &lt;br /&gt;
local tmr = tmr &lt;br /&gt;
-- Limited to local environment &lt;br /&gt;
setfenv(1,M) &lt;br /&gt;
----&lt;br /&gt;
-- Implementation – you don’t get any shorter than this &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
function readNumber(pin) &lt;br /&gt;
        ow.setup(pin) &lt;br /&gt;
        ow.reset(pin) &lt;br /&gt;
        ow.write(pin, 0xCC, 1) &lt;br /&gt;
        ow.write(pin, 0xBE, 1) &lt;br /&gt;
        data = nil &lt;br /&gt;
        data = &amp;quot;&amp;quot; &lt;br /&gt;
        for i = 1, 2 do &lt;br /&gt;
            data = data .. string.char(ow.read(pin)) &lt;br /&gt;
        end &lt;br /&gt;
        t = (data:byte(1) + data:byte(2) * 256) / 16 &lt;br /&gt;
        if (t&amp;gt;100) then &lt;br /&gt;
        t=t-4096 &lt;br /&gt;
        end &lt;br /&gt;
        ow.reset(pin) &lt;br /&gt;
        ow.write(pin,0xcc,1) &lt;br /&gt;
        ow.write(pin, 0x44,1)   &lt;br /&gt;
        return t           &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Return module table &lt;br /&gt;
return M&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Main code file readDS.lua, will use module ds18b20&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
t=require(&amp;quot;ds18b20&amp;quot;) &lt;br /&gt;
print(&amp;quot;the temperature is  &amp;quot;..t.readNumber(4)) &lt;br /&gt;
t = nil &lt;br /&gt;
ds18b20 = nil &lt;br /&gt;
package.loaded[&amp;quot;ds18b20&amp;quot;]=nil&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Init.lua entry, setup wifi and dofile readDS.lua&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
print(wifi.sta.getip())&lt;br /&gt;
wifi.setmode(wifi.STATION)&lt;br /&gt;
wifi.sta.config(&amp;quot;apname&amp;quot;,&amp;quot;password&amp;quot;)&lt;br /&gt;
print(wifi.sta.getip())&lt;br /&gt;
dofile('readDS.lua')&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HTTP Client ===&lt;br /&gt;
&lt;br /&gt;
* simple HTTP client&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- A simple http client&lt;br /&gt;
conn=net.createConnection(net.TCP, false) &lt;br /&gt;
conn:on(&amp;quot;receive&amp;quot;, function(conn, pl) print(pl) end)&lt;br /&gt;
conn:connect(80,&amp;quot;121.41.33.127&amp;quot;)&lt;br /&gt;
conn:send(&amp;quot;GET / HTTP/1.1\r\nHost: www.nodemcu.com\r\n&amp;quot;&lt;br /&gt;
    ..&amp;quot;Connection: keep-alive\r\nAccept: */*\r\n\r\n&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== More simple HTTP client ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- a simple http server&lt;br /&gt;
srv=net.createServer(net.TCP) &lt;br /&gt;
srv:listen(80,function(conn) &lt;br /&gt;
    conn:on(&amp;quot;receive&amp;quot;,function(conn,payload) &lt;br /&gt;
    print(payload) &lt;br /&gt;
    conn:send(&amp;quot;&amp;lt;h1&amp;gt; Hello, NodeMcu.&amp;lt;/h1&amp;gt;&amp;quot;)&lt;br /&gt;
    end) &lt;br /&gt;
end)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PWM operation ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function led(r,g,b) &lt;br /&gt;
    pwm.setduty(1,r) &lt;br /&gt;
    pwm.setduty(2,g) &lt;br /&gt;
    pwm.setduty(3,b) &lt;br /&gt;
end&lt;br /&gt;
pwm.setup(1,500,512) &lt;br /&gt;
pwm.setup(2,500,512) &lt;br /&gt;
pwm.setup(3,500,512)&lt;br /&gt;
pwm.start(1) &lt;br /&gt;
pwm.start(2) &lt;br /&gt;
pwm.start(3)&lt;br /&gt;
led(512,0,0) -- red&lt;br /&gt;
led(0,0,512) -- blue&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Blink LED ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
lighton=0&lt;br /&gt;
tmr.alarm(0,1000,1,function()&lt;br /&gt;
if lighton==0 then &lt;br /&gt;
    lighton=1 &lt;br /&gt;
    led(512,512,512) &lt;br /&gt;
    -- 512/1024, 50% duty cycle&lt;br /&gt;
else &lt;br /&gt;
    lighton=0 &lt;br /&gt;
    led(0,0,0) &lt;br /&gt;
end &lt;br /&gt;
end)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== repeat using timer ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
tmr.alarm(1,5000,1,function() print(&amp;quot;alarm 1&amp;quot;) end)&lt;br /&gt;
tmr.alarm(0,1000,1,function() print(&amp;quot;alarm 0&amp;quot;) end)&lt;br /&gt;
tmr.alarm(2,2000,1,function() print(&amp;quot;alarm 2&amp;quot;) end)&lt;br /&gt;
-- after sometime&lt;br /&gt;
tmr.stop(0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Telnet server ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- a simple telnet server&lt;br /&gt;
s=net.createServer(net.TCP,180) &lt;br /&gt;
s:listen(2323,function(c) &lt;br /&gt;
    function s_output(str) &lt;br /&gt;
      if(c~=nil) &lt;br /&gt;
        then c:send(str) &lt;br /&gt;
      end &lt;br /&gt;
    end &lt;br /&gt;
    node.output(s_output, 0)   &lt;br /&gt;
    -- re-direct output to function s_ouput.&lt;br /&gt;
    c:on(&amp;quot;receive&amp;quot;,function(c,l) &lt;br /&gt;
      node.input(l)           &lt;br /&gt;
      --like pcall(loadstring(l)), support multiple separate lines&lt;br /&gt;
    end) &lt;br /&gt;
    c:on(&amp;quot;disconnection&amp;quot;,function(c) &lt;br /&gt;
      node.output(nil)        &lt;br /&gt;
      --unregist redirect output function, output goes to serial&lt;br /&gt;
    end) &lt;br /&gt;
    print(&amp;quot;Welcome to NodeMcu world.&amp;quot;)&lt;br /&gt;
end)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Read ds18b20 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- read temperature with DS18B20&lt;br /&gt;
t=require(&amp;quot;ds18b20&amp;quot;)&lt;br /&gt;
t.setup(9)&lt;br /&gt;
addrs=t.addrs()&lt;br /&gt;
-- Total DS18B20 numbers, assume it is 2&lt;br /&gt;
print(table.getn(addrs))&lt;br /&gt;
-- The first DS18B20&lt;br /&gt;
print(t.read(addrs[1],t.C))&lt;br /&gt;
print(t.read(addrs[1],t.F))&lt;br /&gt;
print(t.read(addrs[1],t.K))&lt;br /&gt;
-- The second DS18B20&lt;br /&gt;
print(t.read(addrs[2],t.C))&lt;br /&gt;
print(t.read(addrs[2],t.F))&lt;br /&gt;
print(t.read(addrs[2],t.K))&lt;br /&gt;
-- Just read&lt;br /&gt;
print(t.read())&lt;br /&gt;
-- Just read as centigrade&lt;br /&gt;
print(t.read(nil,t.C))&lt;br /&gt;
-- Don't forget to release it after use&lt;br /&gt;
t = nil&lt;br /&gt;
ds18b20 = nil&lt;br /&gt;
package.loaded[&amp;quot;ds18b20&amp;quot;]=nil&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* List the code files inside of the board&lt;br /&gt;
[[File:Lua run2.jpg|thumbnail]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
--list.lua&lt;br /&gt;
l = file.list();&lt;br /&gt;
    for k,v in pairs(l) do&lt;br /&gt;
      print(&amp;quot;name:&amp;quot;..k..&amp;quot;, size:&amp;quot;..v)&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
--init.lua will be excuted&lt;br /&gt;
file.open(&amp;quot;init.lua&amp;quot;,&amp;quot;w&amp;quot;)&lt;br /&gt;
file.writeline([[print(&amp;quot;Hello World!&amp;quot;)]])&lt;br /&gt;
file.close()&lt;br /&gt;
node.restart()  -- this will restart the module.&lt;br /&gt;
=== Basic Init for wifi setup ===&lt;br /&gt;
* Connect wifi&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
print(wifi.sta.getip())&lt;br /&gt;
--nil&lt;br /&gt;
wifi.setmode(wifi.STATION)&lt;br /&gt;
wifi.sta.config(&amp;quot;SSID&amp;quot;,&amp;quot;password&amp;quot;)&lt;br /&gt;
print(wifi.sta.getip())&lt;br /&gt;
--192.168.18.110&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* default init lua, connect to wifi, retrieve IP and then dofile&lt;br /&gt;
[[File:Lua run1.jpg|thumbnail]]&lt;br /&gt;
&lt;br /&gt;
* init file&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
--init.lua&lt;br /&gt;
print(&amp;quot;set up wifi mode&amp;quot;)&lt;br /&gt;
wifi.setmode(wifi.STATION)&lt;br /&gt;
wifi.sta.config(&amp;quot;SSID&amp;quot;,&amp;quot;PassWord&amp;quot;)&lt;br /&gt;
 --here SSID and PassWord should be modified according your wireless router&lt;br /&gt;
wifi.sta.connect()&lt;br /&gt;
tmr.alarm(1, 1000, 1, function() &lt;br /&gt;
    if wifi.sta.getip()== nil then &lt;br /&gt;
    	print(&amp;quot;IP unavaiable, Waiting...&amp;quot;) &lt;br /&gt;
    else &lt;br /&gt;
    	tmr.stop(1)&lt;br /&gt;
    	print(&amp;quot;Config done, IP is &amp;quot;..wifi.sta.getip())&lt;br /&gt;
    	--dofile(&amp;quot;yourfile.lua&amp;quot;)&lt;br /&gt;
    end &lt;br /&gt;
 end)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== GPIO control ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
pin = 1&lt;br /&gt;
&lt;br /&gt;
gpio.mode(pin, gpio.OUTPUT)&lt;br /&gt;
gpio.write(pin, gpio.HIGH)&lt;br /&gt;
&lt;br /&gt;
gpio.mode(pin, gpio.INPUT)&lt;br /&gt;
print(gpio.read(pin))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Blink LED or relay&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
pin = 6&lt;br /&gt;
lighton=0&lt;br /&gt;
&lt;br /&gt;
gpio.mode(pin,gpio.OUTPUT)&lt;br /&gt;
&lt;br /&gt;
tmr.alarm(1, 1000, 1, function()&lt;br /&gt;
    if lighton==0 then&lt;br /&gt;
        lighton=1&lt;br /&gt;
        gpio.write(pin,gpio.HIGH)&lt;br /&gt;
    else&lt;br /&gt;
      lighton=0&lt;br /&gt;
      gpio.write(pin,gpio.LOW)&lt;br /&gt;
    end&lt;br /&gt;
  end)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== File operation ===&lt;br /&gt;
* Read config from config.tx&lt;br /&gt;
   --MQTT, server, user, password, port&lt;br /&gt;
   file.open(&amp;quot;config.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
   MQTTs = file.readline()&lt;br /&gt;
   print(&amp;quot;server:&amp;quot;..MQTTs)&lt;br /&gt;
   --MQTTs = &amp;quot;m11.cloudmqtt.com&amp;quot;&lt;br /&gt;
   MQTTu = file.readline()&lt;br /&gt;
   MQTTp = file.readline()&lt;br /&gt;
   MQTTpo = file.readline()&lt;br /&gt;
   file.close()&lt;br /&gt;
   print(&amp;quot;server:&amp;quot;..MQTTs)&lt;br /&gt;
* the config should represent:&lt;br /&gt;
 m = net.createConnection(net.TCP, 0)&lt;br /&gt;
 print(&amp;quot;user:&amp;quot;..MQTTu)&lt;br /&gt;
 m = mqtt.Client(MQTTu, 120, MQTTu, MQTTp)&lt;br /&gt;
&lt;br /&gt;
 m:connect(MQTTs, MQTTpo, 0, function(conn) &lt;br /&gt;
         print(&amp;quot;connected&amp;quot;) &lt;br /&gt;
         m:subscribe(&amp;quot;/android/&amp;quot;,0, function(conn)&lt;br /&gt;
            print(&amp;quot;subscribed&amp;quot;) &lt;br /&gt;
         end)&lt;br /&gt;
      end)&lt;br /&gt;
&lt;br /&gt;
=== Smartconfig ===&lt;br /&gt;
* [http://www.electrodragon.com/smartconfig-nodemcu/ Smartconfig for Nodemcu]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wifi.setmode(wifi.STATION)&lt;br /&gt;
&lt;br /&gt;
wifi.startsmart(0,&lt;br /&gt;
  function(ssid, password)&lt;br /&gt;
  print(string.format(“Success. SSID:%s ; PASSWORD:%s”, ssid, password))&lt;br /&gt;
  end&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
* Client ID can be anything you like, for example Nodemcu_ID1234&lt;br /&gt;
* Topic and message is a pair, each topic can have its own message, only the client who subscribe to this topic can receive the message&lt;br /&gt;
* You can find the MQTT SPY demo test tool [https://github.com/kamilfb/mqtt-spy/releases here].&lt;br /&gt;
* See how it works below&lt;br /&gt;
&amp;lt;gallery widths=400px heights=300px&amp;gt;&lt;br /&gt;
File:CloudMQTT Websocket Console.png|Use websocket UI to send and received message&lt;br /&gt;
File:Mqtt-spy.png|Use mqttspy to send and received message&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Demo Code ===&lt;br /&gt;
* Note to change client_id, username, password, hostname and port below&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- initiate the mqtt client and set keepalive timer to 120sec&lt;br /&gt;
mqtt = mqtt.Client(&amp;quot;client_id&amp;quot;, 120, &amp;quot;username&amp;quot;, &amp;quot;password&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
mqtt:on(&amp;quot;connect&amp;quot;, function(con) print (&amp;quot;connected&amp;quot;) end)&lt;br /&gt;
mqtt:on(&amp;quot;offline&amp;quot;, function(con) print (&amp;quot;offline&amp;quot;) end)&lt;br /&gt;
&lt;br /&gt;
-- on receive message&lt;br /&gt;
mqtt:on(&amp;quot;message&amp;quot;, function(conn, topic, data)&lt;br /&gt;
  print(topic .. &amp;quot;:&amp;quot; )&lt;br /&gt;
  if data ~= nil then&lt;br /&gt;
    print(data)&lt;br /&gt;
  end&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
mqtt:connect(&amp;quot;hostname&amp;quot;, port, 0, function(conn) &lt;br /&gt;
  print(&amp;quot;connected&amp;quot;)&lt;br /&gt;
  -- subscribe topic with qos = 0&lt;br /&gt;
  mqtt:subscribe(&amp;quot;my_topic&amp;quot;,0, function(conn) &lt;br /&gt;
    -- publish a message with data = my_message, QoS = 0, retain = 0&lt;br /&gt;
    mqtt:publish(&amp;quot;my_topic&amp;quot;,&amp;quot;my_message&amp;quot;,0,0, function(conn) &lt;br /&gt;
      print(&amp;quot;sent&amp;quot;) &lt;br /&gt;
    end)&lt;br /&gt;
  end)&lt;br /&gt;
end)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category: NodeMCU]]&lt;/div&gt;</summary>
		<author><name>Chao</name></author>
	</entry>
</feed>