├── README.md └── nodemcu ├── scripts ├── connect_wifi ├── create_AP ├── light_switch_pullup ├── light_switch_pullup_send ├── relay_server_lua_commands ├── relay_server_lua_commands_buttons └── server_hotspot_untill_connect_lua └── upload_file.py /README.md: -------------------------------------------------------------------------------- 1 | esp2866_tools 2 | ============= 3 | 4 | tools for the esp8266 different firmwares 5 | 6 | Nodemcu-wikipage : https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_en 7 | -------------------------------------------------------------------------------- /nodemcu/scripts/connect_wifi: -------------------------------------------------------------------------------- 1 | wifi.setmode(wifi.STATION) 2 | wifi.sta.config("SSID","password") 3 | print(wifi.sta.getip()) -------------------------------------------------------------------------------- /nodemcu/scripts/create_AP: -------------------------------------------------------------------------------- 1 | cfg={} 2 | cfg.ssid="myhotspot" 3 | cfg.pwd="myhotspot" 4 | wifi.ap.config(cfg) 5 | print(wifi.ap.getip()) 6 | -------------------------------------------------------------------------------- /nodemcu/scripts/light_switch_pullup: -------------------------------------------------------------------------------- 1 | file.remove("light_switch.lua") 2 | file.open("light_switch.lua","w") 3 | file.writeline([[pin=3]]) 4 | file.writeline([[light_status = 0]]) 5 | file.writeline([[gpio.mode(pin,gpio.INPUT)]]) 6 | 7 | file.writeline([[pin_mode = gpio.read(pin)]]) 8 | 9 | file.writeline([[if pin_mode == 0 and light_status == 0 then ]]) 10 | file.writeline([[light_status = 1]]) 11 | file.writeline([[print("light on")]]) 12 | file.writeline([[end]]) 13 | 14 | file.writeline([[if pin_mode == 1 and light_status == 1 then ]]) 15 | file.writeline([[light_status = 0]]) 16 | file.writeline([[print("light off")]]) 17 | file.writeline([[end]]) 18 | file.close() 19 | 20 | file.remove("init.lua") 21 | file.open("init.lua","w") 22 | file.writeline([[tmr.alarm(0, 1000, 1, function() dofile("light_switch.lua") end )]]) 23 | file.close() -------------------------------------------------------------------------------- /nodemcu/scripts/light_switch_pullup_send: -------------------------------------------------------------------------------- 1 | 2 | file.remove("light_switch.lua") 3 | file.open("light_switch.lua","w") 4 | file.writeline([[pin=3]]) 5 | file.writeline([[gpio.mode(pin,gpio.INPUT)]]) 6 | 7 | file.writeline([[pin_mode = gpio.read(pin)]]) 8 | 9 | file.writeline([[if pin_mode == 0 and light_status == 0 then ]]) 10 | file.writeline([[print("Light on")]]) 11 | file.writeline([[light_status = 1]]) 12 | file.writeline([[sk=net.createConnection(net.TCP, 0)]]) 13 | file.writeline([[sk:connect(80,"10.0.0.1")]]) 14 | file.writeline([[ sk:send("GET / HTTP/1.1\r\nHost: 192.168.0.66\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\nsecret=99999&light_on")]]) 15 | file.writeline([[end]]) 16 | 17 | file.writeline([[if pin_mode == 1 and light_status == 1 then ]]) 18 | file.writeline([[light_status = 0]]) 19 | file.writeline([[print("Light off")]]) 20 | file.writeline([[sk=net.createConnection(net.TCP, 0)]]) 21 | file.writeline([[sk:connect(80,"10.0.0.1")]]) 22 | file.writeline([[ sk:send("GET / HTTP/1.1\r\nHost: 192.168.0.66\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\nsecret=99999&light_off")]]) 23 | file.writeline([[end]]) 24 | 25 | file.close() 26 | 27 | file.remove("init.lua") 28 | file.open("init.lua","w") 29 | file.writeline([[light_status=0]]) 30 | file.writeline([[tmr.alarm(0, 1000, 1, function() dofile("light_switch.lua") end )]]) 31 | 32 | file.close() 33 | node.restart() -------------------------------------------------------------------------------- /nodemcu/scripts/relay_server_lua_commands: -------------------------------------------------------------------------------- 1 | file.remove("relay_server.lua") 2 | file.open("relay_server.lua","w") 3 | file.writeline([[status=0]]) 4 | file.writeline([[pin=3]]) 5 | file.writeline([[gpio.mode(pin,gpio.OUTPUT)]]) 6 | file.writeline([[srv=net.createServer(net.TCP) srv:listen(80,function(conn)]]) 7 | file.writeline([[conn:on("receive",function(conn,payload)]]) 8 | file.writeline([[print(payload)]]) 9 | 10 | file.writeline([[if string.find(payload,"favicon.ico") == nil then]]) 11 | file.writeline([[if status==0 then gpio.write(pin,gpio.HIGH); status=1 else gpio.write(pin,gpio.LOW); status=0 end]]) 12 | file.writeline([[end]]) 13 | file.writeline([[conn:send("

The relay status is " .. status ..".

")]]) 14 | 15 | file.writeline([[end)]]) 16 | 17 | file.writeline([[conn:on("sent",function(conn) conn:close() end)]]) 18 | 19 | file.writeline([[end)]]) 20 | 21 | file.close() 22 | 23 | dofile("relay_server.lua") 24 | file.remove("init.lua") 25 | file.open("init.lua","w") 26 | file.writeline([[dofile("relay_server.lua")]]) 27 | file.close() 28 | node.restart() 29 | -------------------------------------------------------------------------------- /nodemcu/scripts/relay_server_lua_commands_buttons: -------------------------------------------------------------------------------- 1 | file.remove("relay_server.lua") 2 | file.open("relay_server.lua","w") 3 | file.writeline([[status=0]]) 4 | file.writeline([[pin=3]]) 5 | file.writeline([[gpio.mode(pin,gpio.OUTPUT)]]) 6 | file.writeline([[srv=net.createServer(net.TCP) srv:listen(80,function(conn)]]) 7 | file.writeline([[conn:on("receive",function(conn,payload)]]) 8 | file.writeline([[print(payload)]]) 9 | 10 | file.writeline([[if string.find(payload,"secret=9999") ~= nil then]]) 11 | file.writeline([[if string.find(payload,"light_on") ~= nil then gpio.write(pin,gpio.LOW) end]]) 12 | file.writeline([[if string.find(payload,"light_off") ~= nil then gpio.write(pin,gpio.HIGH) end]]) 13 | file.writeline([[end]]) 14 | 15 | file.writeline([[if string.find(payload,"favicon.ico") == nil then]]) 16 | file.writeline([[conn:send('

')]]) 17 | file.writeline([[end]]) 18 | 19 | file.writeline([[end)]]) 20 | 21 | file.writeline([[conn:on("sent",function(conn) conn:close() end)]]) 22 | 23 | file.writeline([[end)]]) 24 | 25 | file.close() 26 | 27 | dofile("relay_server.lua") 28 | file.remove("init.lua") 29 | file.open("init.lua","w") 30 | file.writeline([[dofile("relay_server.lua")]]) 31 | file.close() 32 | node.restart() 33 | -------------------------------------------------------------------------------- /nodemcu/scripts/server_hotspot_untill_connect_lua: -------------------------------------------------------------------------------- 1 | wifi.setmode(wifi.STATIONAP) 2 | cfg={} 3 | cfg.ssid="myhotspot" 4 | cfg.pwd="myhotspot" 5 | wifi.ap.config(cfg) 6 | print(wifi.ap.getip()) 7 | 8 | file.remove("connect.lua") 9 | file.open("connect.lua","w") 10 | file.writeline([[print("starting server")]]) 11 | file.writeline([[print(wifi.ap.getip())]]) 12 | file.writeline([[ssid = ""]]) 13 | file.writeline([[pwd = ""]]) 14 | file.writeline([[srv=net.createServer(net.TCP) srv:listen(80,function(conn)]]) 15 | file.writeline([[conn:on("receive",function(conn,payload)]]) 16 | file.writeline([[print(payload)]]) 17 | 18 | 19 | 20 | file.writeline([[if string.find(payload,"favicon.ico") == nil then]]) 21 | file.writeline([[if (string.find(payload,"ssid") ~= nil) and (string.find(payload,"pwd") ~= nil) then]]) 22 | 23 | file.writeline([[payload_len = string.len(payload)]]) 24 | file.writeline([[ssid_idx = string.find(payload,"ssid")]]) 25 | file.writeline([[pwd_idx = string.find(payload,"pwd=")]]) 26 | file.writeline([[amp_idx = string.find(payload,"&")]]) 27 | 28 | file.writeline([[if amp_idx < pwd_idx then]]) 29 | file.writeline([[ssid=string.sub(payload,ssid_idx+5,amp_idx-1)]]) 30 | file.writeline([[pwd=string.sub(payload,pwd_idx+4,payload_len)]]) 31 | file.writeline([[else]]) 32 | file.writeline([[pwd=string.sub(payload,pwd_idx+4,amp_idx-1)]]) 33 | file.writeline([[ssid=string.sub(payload,ssid_idx+5,payload_len)]]) 34 | file.writeline([[end]]) 35 | 36 | file.writeline([[print(ssid)]]) 37 | file.writeline([[print(pwd)]]) 38 | 39 | file.writeline([[wifi.setmode(wifi.STATION)]]) 40 | file.writeline([[wifi.sta.config(ssid,pwd)]]) 41 | 42 | file.writeline([[print("Connected to " .. ssid)]]) 43 | 44 | file.writeline([[file.open("connected","w")]]) 45 | file.writeline([[file.close()]]) 46 | file.writeline([[node.restart()]]) 47 | 48 | file.writeline([[end]]) 49 | file.writeline([[end]]) 50 | 51 | file.writeline([[html='

ssid:

']]) 52 | file.writeline([[html = html .. '

pwd:

']]) 53 | file.writeline([[html = html .. '

']]) 54 | file.writeline([[conn:send( "".. html .." ssid was :" .. ssid .. " pwd was : " .. pwd)]]) 55 | 56 | file.writeline([[end)]]) 57 | 58 | file.writeline([[conn:on("sent",function(conn) conn:close() end)]]) 59 | 60 | file.writeline([[end)]]) 61 | 62 | file.close() 63 | 64 | 65 | file.remove("connected.lua") 66 | file.open("connected.lua","w") 67 | 68 | file.writeline([[print("starting connected server")]]) 69 | file.writeline([[print(wifi.sta.getip())]]) 70 | file.writeline([[srv=net.createServer(net.TCP) srv:listen(80,function(conn)]]) 71 | file.writeline([[conn:on("receive",function(conn,payload)]]) 72 | file.writeline([[print(payload)]]) 73 | 74 | file.writeline([[if string.find(payload,"favicon.ico") == nil then]]) 75 | file.writeline([[end]]) 76 | 77 | file.writeline([[conn:send("Connected!")]]) 78 | file.writeline([[end)]]) 79 | 80 | file.writeline([[conn:on("sent",function(conn) conn:close() end)]]) 81 | 82 | file.writeline([[end)]]) 83 | 84 | file.close() 85 | 86 | file.remove("init.lua") 87 | file.open("init.lua","w") 88 | 89 | file.writeline([[if file.open("connected","r") == nil then]]) 90 | file.writeline([[dofile("connect.lua")]]) 91 | file.writeline([[else]]) 92 | file.writeline([[dofile("connected.lua")]]) 93 | file.writeline([[end]]) 94 | 95 | file.close() 96 | node.restart() 97 | -------------------------------------------------------------------------------- /nodemcu/upload_file.py: -------------------------------------------------------------------------------- 1 | import serial 2 | import sys 3 | import os 4 | import time 5 | 6 | def write_lines(ser, lines): 7 | for line in lines: 8 | print "writing to esp : %s " % line.strip() 9 | ser.write(line) 10 | ser.write(chr(10)) 11 | 12 | res = ser.read(1024) 13 | while line.strip() not in res: 14 | res += ser.read(1024) 15 | 16 | #print "got from esp : %s " % res 17 | return res 18 | 19 | if len(sys.argv) < 3: 20 | print "Usage: %s device filename" % sys.argv[0] 21 | exit(1) 22 | 23 | if not os.path.exists(sys.argv[2]): 24 | print "File %s doesn't exist" % sys.argv[2] 25 | exit(1) 26 | 27 | # TODO: add option to compile the file on ESP. 28 | # TODO: Extract the baudrate as parameter => flash faster! 29 | try: 30 | ser = serial.Serial(sys.argv[1], baudrate=9600) 31 | if not ser.isOpen(): 32 | print "failed ser.open()" 33 | exit(1) 34 | except: 35 | print "Port %s is locked. Can't open it." % sys.argv[1] 36 | exit(1) 37 | 38 | print sys.argv[1], "port is opened successfully." 39 | ser.timeout = 0.5 40 | upload_file = open(sys.argv[2], 'r') 41 | 42 | filename = sys.argv[2] 43 | # TODO: Find elegant method to split with regex 44 | if "\\" in filename: filename = filename.split('\\')[-1] 45 | if "/" in filename: filename = filename.split('/')[-1] 46 | print "Saving to esp:", filename 47 | 48 | # Prepare to upload. 49 | prelines = [('file.open("%s", "w+")' % filename) + chr(10), 'w = file.writeline' + chr(10)] 50 | postlines = ['file.close()' + chr(10)] 51 | lines = upload_file.readlines() 52 | lines = [r"w([[" + line.strip() + r"]])" + chr(10) for line in lines] 53 | 54 | # Upload + write to flash 55 | write_lines(ser, prelines) 56 | write_lines(ser, lines) 57 | write_lines(ser, postlines) 58 | 59 | upload_file.close() 60 | 61 | print "Verify written file by read." 62 | lines = ['l = file.list()', 63 | 'for k,v in pairs(l) do if k == "%s" then print("name:", k, ", size:", v) end end' % filename, 64 | ] 65 | res = write_lines(ser, lines).split('\n') 66 | 67 | # Report results 68 | print "-"*50 69 | res = [i for i in res if "name" in i] 70 | if res: 71 | print "\nCompleted successfully:", res[1] 72 | else: 73 | print "The file %s is not written." % filename 74 | 75 | # Compile file if it is lua but not init.lua 76 | if filename.endswith(".lua") and filename is not "init.lua": 77 | print "Compiling " + filename 78 | ] 79 | write_lines(ser, lines).split('\n') 80 | print "Done." 81 | else: 82 | print "No compilation required." --------------------------------------------------------------------------------