- totalement remanié la structure de mon dépôt, cela commençait à être trop le foutoire ;-(
This commit is contained in:
@@ -1,6 +1,10 @@
|
||||
-- blink the blue led builting
|
||||
-- zf180709.2200
|
||||
|
||||
-- ATTENTION, c'est exactement ce qu'il ne faut pas faire en NodeMCU Lua, car cela bloque le NodeMCU pendant plus de 300mS !
|
||||
-- Il FAUT travailler en mode événement avec un timer !
|
||||
|
||||
|
||||
zpin=0 --led blue builting
|
||||
gpio.mode(zpin, gpio.OUTPUT)
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
# NodeMCU_Lua
|
||||
Petit dossier avec des programmes pour apprendre à coder sur un NodeMCU en lua.
|
||||
|
||||
### Faire clignoter une ou plusieurs leds
|
||||
1.led_blink_1.lua<br>
|
||||
2.led_blink_2.lua
|
||||
|
||||
### Modifier l'intensité d'une ou plusieurs leds
|
||||
1.led_intensite.lua<br>
|
||||
2.led_intensite_variable.lua
|
||||
|
||||
### Allumer une led, en pressant un bouton
|
||||
1.led_press_button.lua
|
||||
|
||||
### Connecter le NodeMCU à un réseau WIFI et créer un serveur web pour contrôler une led
|
||||
1.web_liste_deroulante_led_change.lua<br>
|
||||
2.web_press_button_led.lua
|
||||
|
||||
### Robot
|
||||
1.robot_avance_arrete.lua<br>
|
||||
2.robot_mesure_turn_right.lua<br>
|
||||
3.robot_random_mesure.lua
|
||||
|
||||
### Utilitaires
|
||||
1.u_dir.lua<br>
|
||||
2.u_get_ip.lua<br>
|
||||
3.u_start_job.lua<br>
|
||||
4.u_telnet_srv.lua<br>
|
||||
5.u_web_stop.lua
|
||||
|
||||
### Tests
|
||||
1.test_init_1.lua<br>
|
||||
2.test_blink_1.lua<br>
|
||||
3.test_blink_2.lua<br>
|
||||
4.test_get_ip_1.lua<br>
|
||||
5.test_press_button_1.lua<br>
|
||||
6.test_web_1.lua
|
||||
@@ -1,13 +0,0 @@
|
||||
--Programme qui démarre le robot en appuyant sur le bouton flash et le redémarre si le bouton flash est appuyer pendant 3 secondes
|
||||
print("\ninit.lua hv180717.1101\n")
|
||||
|
||||
zswitch=3 --switch flash
|
||||
gpio.mode(zswitch, gpio.INT, gpio.PULLUP)
|
||||
|
||||
function bouton()
|
||||
print("Start start_job.lua...")
|
||||
dofile("start_job.lua")
|
||||
end
|
||||
|
||||
gpio.trig(zswitch, "both", bouton)
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
-- programme pour faire clignoter un LED
|
||||
--hv20180711.1007
|
||||
|
||||
zpin=1
|
||||
valeur=gpio.HIGH
|
||||
duration = 300 --> en ms
|
||||
|
||||
|
||||
function clignoter ()
|
||||
if valeur==gpio.LOW then
|
||||
valeur=gpio.HIGH
|
||||
else
|
||||
valeur=gpio.LOW
|
||||
end
|
||||
gpio.write(zpin, valeur)
|
||||
end
|
||||
|
||||
|
||||
gpio.mode(zpin, gpio.OUTPUT)
|
||||
gpio.write(zpin, valeur)
|
||||
|
||||
tmr.alarm(0,duration, tmr.ALARM_AUTO, clignoter)
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
-- programme pour faire clignoter deux LED
|
||||
--hv20180711.1008
|
||||
|
||||
zpin1=1
|
||||
zpin2=2
|
||||
|
||||
valeur1=gpio.HIGH
|
||||
valeur2=gpio.HIGH
|
||||
|
||||
duration1 = 300 --> en ms
|
||||
duration2 = 1000 --> en ms
|
||||
|
||||
|
||||
function LED1 ()
|
||||
if valeur1==gpio.LOW then
|
||||
valeur1=gpio.HIGH
|
||||
else
|
||||
valeur1=gpio.LOW
|
||||
end
|
||||
gpio.write(zpin1, valeur1)
|
||||
end
|
||||
|
||||
function LED2 ()
|
||||
if valeur2==gpio.LOW then
|
||||
valeur2=gpio.HIGH
|
||||
else
|
||||
valeur2=gpio.LOW
|
||||
end
|
||||
gpio.write(zpin2, valeur2)
|
||||
end
|
||||
|
||||
|
||||
gpio.mode(zpin1, gpio.OUTPUT)
|
||||
gpio.write(zpin1, valeur1)
|
||||
gpio.mode(zpin2, gpio.OUTPUT)
|
||||
gpio.write(zpin2, valeur2)
|
||||
|
||||
tmr.alarm(1, duration1, tmr.ALARM_AUTO, LED1)
|
||||
tmr.alarm(2, duration2, tmr.ALARM_AUTO, LED2)
|
||||
358
Hugo/luatool.py
358
Hugo/luatool.py
@@ -1,358 +0,0 @@
|
||||
#!/usr/bin/env python2
|
||||
#
|
||||
# ESP8266 luatool
|
||||
# Author e-mail: 4ref0nt@gmail.com
|
||||
# Site: http://esp8266.ru
|
||||
# Contributions from: https://github.com/sej7278
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it under
|
||||
# the terms of the GNU General Public License as published by the Free Software
|
||||
# Foundation; either version 2 of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along with
|
||||
# this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
|
||||
# Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
import sys
|
||||
import serial
|
||||
from time import sleep
|
||||
import socket
|
||||
import argparse
|
||||
from os.path import basename
|
||||
|
||||
|
||||
tqdm_installed = True
|
||||
try:
|
||||
from tqdm import tqdm
|
||||
except ImportError, e:
|
||||
if e.message == 'No module named tqdm':
|
||||
tqdm_installed = False
|
||||
else:
|
||||
raise
|
||||
|
||||
version = "0.6.4"
|
||||
|
||||
|
||||
class TransportError(Exception):
|
||||
"""Custom exception to represent errors with a transport
|
||||
"""
|
||||
def __init__(self, message):
|
||||
self.message = message
|
||||
|
||||
def __str__(self):
|
||||
return self.message
|
||||
|
||||
class AbstractTransport:
|
||||
def __init__(self):
|
||||
raise NotImplementedError('abstract transports cannot be instantiated.')
|
||||
|
||||
def close(self):
|
||||
raise NotImplementedError('Function not implemented')
|
||||
|
||||
def read(self, length):
|
||||
raise NotImplementedError('Function not implemented')
|
||||
|
||||
def writeln(self, data, check=1):
|
||||
raise NotImplementedError('Function not implemented')
|
||||
|
||||
def writer(self, data):
|
||||
self.writeln("file.writeline([==[" + data + "]==])\r")
|
||||
|
||||
def performcheck(self, expected):
|
||||
line = ''
|
||||
char = ''
|
||||
i = -1
|
||||
while char != chr(62): # '>'
|
||||
char = self.read(1)
|
||||
if char == '':
|
||||
raise Exception('No proper answer from MCU')
|
||||
if char == chr(13) or char == chr(10): # LF or CR
|
||||
if line != '':
|
||||
line = line.strip()
|
||||
if line+'\r' == expected and not args.bar:
|
||||
sys.stdout.write(" -> ok")
|
||||
elif line+'\r' != expected:
|
||||
if line[:4] == "lua:":
|
||||
sys.stdout.write("\r\n\r\nLua ERROR: %s" % line)
|
||||
raise Exception('ERROR from Lua interpreter\r\n\r\n')
|
||||
else:
|
||||
expected = expected.split("\r")[0]
|
||||
sys.stdout.write("\r\n\r\nERROR")
|
||||
sys.stdout.write("\r\n send string : '%s'" % expected)
|
||||
sys.stdout.write("\r\n expected echo : '%s'" % expected)
|
||||
sys.stdout.write("\r\n but got answer : '%s'" % line)
|
||||
sys.stdout.write("\r\n\r\n")
|
||||
raise Exception('Error sending data to MCU\r\n\r\n')
|
||||
line = ''
|
||||
else:
|
||||
line += char
|
||||
if char == chr(62) and expected[i] == char:
|
||||
char = ''
|
||||
i += 1
|
||||
|
||||
|
||||
class SerialTransport(AbstractTransport):
|
||||
def __init__(self, port, baud, delay):
|
||||
self.port = port
|
||||
self.baud = baud
|
||||
self.serial = None
|
||||
self.delay = delay
|
||||
|
||||
try:
|
||||
self.serial = serial.Serial(port, baud)
|
||||
except serial.SerialException as e:
|
||||
raise TransportError(e.strerror)
|
||||
|
||||
self.serial.timeout = 3
|
||||
self.serial.interCharTimeout = 3
|
||||
|
||||
def writeln(self, data, check=1):
|
||||
if self.serial.inWaiting() > 0:
|
||||
self.serial.flushInput()
|
||||
if len(data) > 0 and not args.bar:
|
||||
sys.stdout.write("\r\n->")
|
||||
sys.stdout.write(data.split("\r")[0])
|
||||
self.serial.write(data)
|
||||
sleep(self.delay)
|
||||
if check > 0:
|
||||
self.performcheck(data)
|
||||
elif not args.bar:
|
||||
sys.stdout.write(" -> send without check")
|
||||
|
||||
def read(self, length):
|
||||
return self.serial.read(length)
|
||||
|
||||
def close(self):
|
||||
self.serial.flush()
|
||||
self.serial.close()
|
||||
|
||||
|
||||
class TcpSocketTransport(AbstractTransport):
|
||||
def __init__(self, host, port):
|
||||
self.host = host
|
||||
self.port = port
|
||||
self.socket = None
|
||||
|
||||
try:
|
||||
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
except socket.error as e:
|
||||
raise TransportError(e.strerror)
|
||||
|
||||
try:
|
||||
self.socket.connect((host, port))
|
||||
except socket.error as e:
|
||||
raise TransportError(e.strerror)
|
||||
# read intro from telnet server (see telnet_srv.lua)
|
||||
self.socket.recv(50)
|
||||
|
||||
def writeln(self, data, check=1):
|
||||
if len(data) > 0 and not args.bar:
|
||||
sys.stdout.write("\r\n->")
|
||||
sys.stdout.write(data.split("\r")[0])
|
||||
self.socket.sendall(data)
|
||||
if check > 0:
|
||||
self.performcheck(data)
|
||||
elif not args.bar:
|
||||
sys.stdout.write(" -> send without check")
|
||||
|
||||
def read(self, length):
|
||||
return self.socket.recv(length)
|
||||
|
||||
def close(self):
|
||||
self.socket.close()
|
||||
|
||||
|
||||
def decidetransport(cliargs):
|
||||
if cliargs.ip:
|
||||
data = cliargs.ip.split(':')
|
||||
host = data[0]
|
||||
if len(data) == 2:
|
||||
port = int(data[1])
|
||||
else:
|
||||
port = 23
|
||||
return TcpSocketTransport(host, port)
|
||||
else:
|
||||
return SerialTransport(cliargs.port, cliargs.baud, cliargs.delay)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# parse arguments or use defaults
|
||||
parser = argparse.ArgumentParser(description='ESP8266 Lua script uploader.')
|
||||
parser.add_argument('-p', '--port', default='/dev/ttyUSB0', help='Device name, default /dev/ttyUSB0')
|
||||
parser.add_argument('-b', '--baud', default=9600, help='Baudrate, default 9600')
|
||||
parser.add_argument('-f', '--src', default='main.lua', help='Source file on computer, default main.lua')
|
||||
parser.add_argument('-t', '--dest', default=None, help='Destination file on MCU, default to source file name')
|
||||
parser.add_argument('-c', '--compile', action='store_true', help='Compile lua to lc after upload')
|
||||
parser.add_argument('-r', '--restart', action='store_true', help='Restart MCU after upload')
|
||||
parser.add_argument('-d', '--dofile', action='store_true', help='Run the Lua script after upload')
|
||||
parser.add_argument('-v', '--verbose', action='store_true', help="Show progress messages.")
|
||||
parser.add_argument('-a', '--append', action='store_true', help='Append source file to destination file.')
|
||||
parser.add_argument('-l', '--list', action='store_true', help='List files on device')
|
||||
parser.add_argument('-w', '--wipe', action='store_true', help='Delete all lua/lc files on device.')
|
||||
parser.add_argument('-i', '--id', action='store_true', help='Query the modules chip id.')
|
||||
parser.add_argument('-e', '--echo', action='store_true', help='Echo output of MCU until script is terminated.')
|
||||
parser.add_argument('--bar', action='store_true', help='Show a progress bar for uploads instead of printing each line')
|
||||
parser.add_argument('--delay', default=0.3, help='Delay in seconds between each write.', type=float)
|
||||
parser.add_argument('--delete', default=None, help='Delete a lua/lc file from device.')
|
||||
parser.add_argument('--ip', default=None, help='Connect to a telnet server on the device (--ip IP[:port])')
|
||||
args = parser.parse_args()
|
||||
|
||||
transport = decidetransport(args)
|
||||
|
||||
if args.bar and not tqdm_installed:
|
||||
sys.stdout.write("You must install the tqdm library to use the bar feature\n")
|
||||
sys.stdout.write("To install, at the prompt type: \"pip install tqdm\"\n")
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
if args.list:
|
||||
transport.writeln("local l = file.list();for k,v in pairs(l) do print('name:'..k..', size:'..v)end\r", 0)
|
||||
while True:
|
||||
char = transport.read(1)
|
||||
if char == '' or char == chr(62):
|
||||
break
|
||||
sys.stdout.write(char)
|
||||
sys.exit(0)
|
||||
|
||||
if args.id:
|
||||
transport.writeln("=node.chipid()\r", 0)
|
||||
id=""
|
||||
while True:
|
||||
char = transport.read(1)
|
||||
if char == '' or char == chr(62):
|
||||
break
|
||||
if char.isdigit():
|
||||
id += char
|
||||
print("\n"+id)
|
||||
sys.exit(0)
|
||||
|
||||
if args.wipe:
|
||||
transport.writeln("local l = file.list();for k,v in pairs(l) do print(k)end\r", 0)
|
||||
file_list = []
|
||||
fn = ""
|
||||
while True:
|
||||
char = transport.read(1)
|
||||
if char == '' or char == chr(62):
|
||||
break
|
||||
if char not in ['\r', '\n']:
|
||||
fn += char
|
||||
else:
|
||||
if fn:
|
||||
file_list.append(fn.strip())
|
||||
fn = ''
|
||||
for fn in file_list[1:]: # first line is the list command sent to device
|
||||
if args.verbose:
|
||||
sys.stderr.write("Delete file {} from device.\r\n".format(fn))
|
||||
transport.writeln("file.remove(\"" + fn + "\")\r")
|
||||
sys.exit(0)
|
||||
|
||||
if args.delete:
|
||||
transport.writeln("file.remove(\"" + args.delete + "\")\r")
|
||||
sys.exit(0)
|
||||
|
||||
if args.dest is None:
|
||||
args.dest = basename(args.src)
|
||||
|
||||
# open source file for reading
|
||||
try:
|
||||
try:
|
||||
f = open(args.src, "rt")
|
||||
except:
|
||||
import os
|
||||
base_dir = os.path.dirname(os.path.realpath(__file__))
|
||||
f = open(os.path.join(base_dir, args.src), "rt")
|
||||
os.chdir(base_dir)
|
||||
except:
|
||||
sys.stderr.write("Could not open input file \"%s\"\n" % args.src)
|
||||
sys.exit(1)
|
||||
|
||||
# Verify the selected file will not exceed the size of the serial buffer.
|
||||
# The size of the buffer is 256. This script does not accept files with
|
||||
# lines longer than 230 characters to have some room for command overhead.
|
||||
num_lines = 0
|
||||
for ln in f:
|
||||
if len(ln) > 230:
|
||||
sys.stderr.write("File \"%s\" contains a line with more than 240 "
|
||||
"characters. This exceeds the size of the serial buffer.\n"
|
||||
% args.src)
|
||||
f.close()
|
||||
sys.exit(1)
|
||||
num_lines += 1
|
||||
|
||||
# Go back to the beginning of the file after verifying it has the correct
|
||||
# line length
|
||||
f.seek(0)
|
||||
|
||||
# set serial timeout
|
||||
if args.verbose:
|
||||
sys.stderr.write("Upload starting\r\n")
|
||||
|
||||
# remove existing file on device
|
||||
if args.append==False:
|
||||
if args.verbose:
|
||||
sys.stderr.write("Stage 1. Deleting old file from flash memory")
|
||||
transport.writeln("file.open(\"" + args.dest + "\", \"w\")\r")
|
||||
transport.writeln("file.close()\r")
|
||||
transport.writeln("file.remove(\"" + args.dest + "\")\r")
|
||||
else:
|
||||
if args.verbose:
|
||||
sys.stderr.write("[SKIPPED] Stage 1. Deleting old file from flash memory [SKIPPED]")
|
||||
|
||||
|
||||
# read source file line by line and write to device
|
||||
if args.verbose:
|
||||
sys.stderr.write("\r\nStage 2. Creating file in flash memory and write first line")
|
||||
if args.append:
|
||||
transport.writeln("file.open(\"" + args.dest + "\", \"a+\")\r")
|
||||
else:
|
||||
transport.writeln("file.open(\"" + args.dest + "\", \"w+\")\r")
|
||||
line = f.readline()
|
||||
if args.verbose:
|
||||
sys.stderr.write("\r\nStage 3. Start writing data to flash memory...")
|
||||
if args.bar:
|
||||
for i in tqdm(range(0, num_lines)):
|
||||
transport.writer(line.strip())
|
||||
line = f.readline()
|
||||
else:
|
||||
while line != '':
|
||||
transport.writer(line.strip())
|
||||
line = f.readline()
|
||||
|
||||
# close both files
|
||||
f.close()
|
||||
if args.verbose:
|
||||
sys.stderr.write("\r\nStage 4. Flush data and closing file")
|
||||
transport.writeln("file.flush()\r")
|
||||
transport.writeln("file.close()\r")
|
||||
|
||||
# compile?
|
||||
if args.compile:
|
||||
if args.verbose:
|
||||
sys.stderr.write("\r\nStage 5. Compiling")
|
||||
transport.writeln("node.compile(\"" + args.dest + "\")\r")
|
||||
transport.writeln("file.remove(\"" + args.dest + "\")\r")
|
||||
|
||||
# restart or dofile
|
||||
if args.restart:
|
||||
transport.writeln("node.restart()\r")
|
||||
if args.dofile: # never exec if restart=1
|
||||
transport.writeln("dofile(\"" + args.dest + "\")\r", 0)
|
||||
|
||||
if args.echo:
|
||||
if args.verbose:
|
||||
sys.stderr.write("\r\nEchoing MCU output, press Ctrl-C to exit")
|
||||
while True:
|
||||
sys.stdout.write(transport.read(1))
|
||||
|
||||
# close serial port
|
||||
transport.close()
|
||||
|
||||
# flush screen
|
||||
sys.stdout.flush()
|
||||
sys.stderr.flush()
|
||||
if not args.bar:
|
||||
sys.stderr.write("\r\n--->>> All done <<<---\r\n")
|
||||
@@ -1,31 +0,0 @@
|
||||
--mesure la distance avec un module à ultra son hc-sr04
|
||||
--Attention le module doit être alimenter en 5V et il faut mettre une resistance de 100 ohm sur la pin echo
|
||||
--hv180713.1138
|
||||
|
||||
ztrig=5
|
||||
zecho=6
|
||||
ztstart=0
|
||||
ztstop=0
|
||||
gpio.mode(ztrig, gpio.OUTPUT)
|
||||
gpio.write(ztrig, gpio.LOW)
|
||||
gpio.mode(zecho, gpio.INT, gpio.PULLUP)
|
||||
|
||||
|
||||
function zmesure_pulse()
|
||||
gpio.write(ztrig, gpio.HIGH)
|
||||
tmr.delay(10)
|
||||
gpio.write(ztrig, gpio.LOW)
|
||||
end
|
||||
|
||||
function zmesure()
|
||||
if gpio.read(zecho)==1 then
|
||||
ztstart=tmr.now()
|
||||
else
|
||||
ztstop=tmr.now()
|
||||
zlength=360*(ztstop-ztstart)/2/10000
|
||||
print("distance [cm]: "..math.floor(zlength))
|
||||
end
|
||||
end
|
||||
|
||||
gpio.trig(zecho, "both", zmesure)
|
||||
tmr.alarm(1, 1000, tmr.ALARM_AUTO, zmesure_pulse)
|
||||
@@ -1,71 +0,0 @@
|
||||
--Affiche simplement un Hello Wolrd sur le display OLED
|
||||
print("\nDémarrage hv20180720.1616 \n")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- Utilisation :
|
||||
-- pin_sda = 5
|
||||
-- pin_scl = 6
|
||||
-- disp_sla = 0x3c
|
||||
-- _dofile("i2c_display")
|
||||
-- disp_add_data(texte)
|
||||
-- avec texte un json du type
|
||||
-- texte = '{ "id": "id_du_texte",
|
||||
-- "column": [0-20], (si omis : 0)
|
||||
-- "row": [0-5], (si omis : 0)
|
||||
-- "text": "abcdef", (si omis : "")
|
||||
-- "angle": [0,90,180,270] }' (si omis 0°)
|
||||
--
|
||||
-- disp_add_data('{"id":"id_du_texte"}') efface le texte
|
||||
-------------------------------------------------
|
||||
-- Modules nécessaires dans le firmware :
|
||||
-- i2c, u8g(avec font ssd1306_128x64_i2c), cjson
|
||||
-------------------------------------------------
|
||||
|
||||
pin_sda = 12
|
||||
pin_scl = 11
|
||||
disp_sla = 0x3c
|
||||
|
||||
|
||||
function init_OLED(sda, scl) --Set up the u8glib lib
|
||||
|
||||
i2c.setup(0, sda, scl, i2c.SLOW)
|
||||
disp = u8g.ssd1306_128x64_i2c(disp_sla)
|
||||
-- https://github.com/olikraus/u8glib/wiki/fontsize
|
||||
disp:setFont(u8g.font_6x10)
|
||||
disp:setFontRefHeightExtendedText()
|
||||
disp:setDefaultForegroundColor()
|
||||
disp:setFontPosTop()
|
||||
end
|
||||
|
||||
function draw()
|
||||
disp:drawStr(0,0,"Hello Hugo !")
|
||||
disp:drawStr(0,11,"et zuzu !")
|
||||
end
|
||||
|
||||
init_OLED(pin_sda, pin_scl) --Run setting up
|
||||
|
||||
disp:firstPage()
|
||||
repeat
|
||||
draw()
|
||||
until disp:nextPage() == false
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
--print( string.gsub("hello+zuzu+%26+une+belle+%E9cole%5Cun+b%E2teau","+"," ")
|
||||
|
||||
--[[ source OLED:
|
||||
https://www.google.ch/search?q=nodemcu+lua+oled+display&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjG8ba8ra3cAhVDCpoKHedlDS4Q_AUICigB&biw=1536&bih=828
|
||||
https://www.hackster.io/kayakpete/esp8266-oled-display-52ae50
|
||||
http://blog.rl.cx/2017/01/08/bien-d%C3%A9buter-avec-nodemcu/
|
||||
https://github.com/FredThx/nodemcu_iot/blob/master/i2c_display.lua
|
||||
https://www.instructables.com/id/NODEMCU-LUA-ESP8266-With-I2C-LCD-128-X-64-OLED-Dis/
|
||||
]]
|
||||
@@ -1,62 +0,0 @@
|
||||
--Programme pour faire tourner aleatoirement le robot à droite ou à gauche tant qu'il soit à moins de 20cm de l'obstacle
|
||||
--hv20180717.1613
|
||||
|
||||
--parametres pour le module ultra son
|
||||
ztrig=5
|
||||
zecho=6
|
||||
ztstart=0
|
||||
ztstop=0
|
||||
gpio.mode(ztrig, gpio.OUTPUT)
|
||||
gpio.write(ztrig, gpio.LOW)
|
||||
gpio.mode(zecho, gpio.INT, gpio.PULLUP)
|
||||
|
||||
--parametres pour les moteurs
|
||||
pin_a_speed = 1
|
||||
pin_a_dir = 3
|
||||
pin_b_speed = 2
|
||||
pin_b_dir = 4
|
||||
FWD = gpio.LOW
|
||||
REV = gpio.HIGH
|
||||
duty = 1023
|
||||
|
||||
--initialise moteur A
|
||||
gpio.mode(pin_a_speed,gpio.OUTPUT)
|
||||
gpio.write(pin_a_speed,gpio.LOW)
|
||||
pwm.setup(pin_a_speed,1000,duty) --PWM 1KHz, Duty 1023
|
||||
pwm.start(pin_a_speed)
|
||||
pwm.setduty(pin_a_speed,0)
|
||||
gpio.mode(pin_a_dir,gpio.OUTPUT)
|
||||
|
||||
--initialise moteur B
|
||||
gpio.mode(pin_b_speed,gpio.OUTPUT)
|
||||
gpio.write(pin_b_speed,gpio.LOW)
|
||||
pwm.setup(pin_b_speed,1000,duty) --PWM 1KHz, Duty 1023
|
||||
pwm.start(pin_b_speed)
|
||||
pwm.setduty(pin_b_speed,0)
|
||||
gpio.mode(pin_b_dir,gpio.OUTPUT)
|
||||
|
||||
-- speed is 0 - 100
|
||||
function motor(pin_speed, pin_dir, dir, speed)
|
||||
gpio.write(pin_dir,dir)
|
||||
pwm.setduty(pin_speed, (speed * duty) / 100)
|
||||
end
|
||||
|
||||
function motor_a(dir, speed)
|
||||
motor(pin_a_speed, pin_a_dir, dir, speed)
|
||||
end
|
||||
|
||||
function motor_b(dir, speed)
|
||||
motor(pin_b_speed, pin_b_dir, dir, speed)
|
||||
end
|
||||
|
||||
function avance_robot()
|
||||
motor_a(FWD, 60)
|
||||
motor_b(FWD, 60)
|
||||
|
||||
end
|
||||
|
||||
function stop_robot()
|
||||
motor_a(FWD, 0)
|
||||
motor_b(FWD, 0)
|
||||
|
||||
end
|
||||
@@ -1,106 +0,0 @@
|
||||
--Programme pour faire tourner aleatoirement le robot à droite ou à gauche tant qu'il soit à moins de 20cm de l'obstacle
|
||||
--hv20180717.1613
|
||||
|
||||
--parametres pour le module ultra son
|
||||
ztrig=5
|
||||
zecho=6
|
||||
ztstart=0
|
||||
ztstop=0
|
||||
gpio.mode(ztrig, gpio.OUTPUT)
|
||||
gpio.write(ztrig, gpio.LOW)
|
||||
gpio.mode(zecho, gpio.INT, gpio.PULLUP)
|
||||
|
||||
--parametres pour les moteurs
|
||||
pin_a_speed = 1
|
||||
pin_a_dir = 3
|
||||
pin_b_speed = 2
|
||||
pin_b_dir = 4
|
||||
FWD = gpio.LOW
|
||||
REV = gpio.HIGH
|
||||
duty = 1023
|
||||
|
||||
--initialise moteur A
|
||||
gpio.mode(pin_a_speed,gpio.OUTPUT)
|
||||
gpio.write(pin_a_speed,gpio.LOW)
|
||||
pwm.setup(pin_a_speed,1000,duty) --PWM 1KHz, Duty 1023
|
||||
pwm.start(pin_a_speed)
|
||||
pwm.setduty(pin_a_speed,0)
|
||||
gpio.mode(pin_a_dir,gpio.OUTPUT)
|
||||
|
||||
--initialise moteur B
|
||||
gpio.mode(pin_b_speed,gpio.OUTPUT)
|
||||
gpio.write(pin_b_speed,gpio.LOW)
|
||||
pwm.setup(pin_b_speed,1000,duty) --PWM 1KHz, Duty 1023
|
||||
pwm.start(pin_b_speed)
|
||||
pwm.setduty(pin_b_speed,0)
|
||||
gpio.mode(pin_b_dir,gpio.OUTPUT)
|
||||
|
||||
-- timer personnelle
|
||||
hvtimer1=tmr.create()
|
||||
hvtimer2=tmr.create()
|
||||
|
||||
-- speed is 0 - 100
|
||||
function motor(pin_speed, pin_dir, dir, speed)
|
||||
gpio.write(pin_dir,dir)
|
||||
pwm.setduty(pin_speed, (speed * duty) / 100)
|
||||
end
|
||||
|
||||
function motor_a(dir, speed)
|
||||
motor(pin_a_speed, pin_a_dir, dir, speed)
|
||||
end
|
||||
|
||||
function motor_b(dir, speed)
|
||||
motor(pin_b_speed, pin_b_dir, dir, speed)
|
||||
end
|
||||
|
||||
--Robot avance, s'arrete, tourne à droite, tourne à gauche
|
||||
function avance_robot()
|
||||
t=math.random(1,2)
|
||||
--print(t)
|
||||
motor_a(FWD, 60)
|
||||
motor_b(FWD, 60)
|
||||
end
|
||||
function stop_robot()
|
||||
motor_a(FWD, 0)
|
||||
motor_b(FWD, 0)
|
||||
end
|
||||
|
||||
function turn_right_robot()
|
||||
motor_a(FWD, 60)
|
||||
motor_b(REV, 60)
|
||||
end
|
||||
function turn_left_robot()
|
||||
motor_a(REV, 60)
|
||||
motor_b(FWD, 60)
|
||||
end
|
||||
|
||||
--start pulse10 us
|
||||
function zmesure_pulse()
|
||||
gpio.write(ztrig, gpio.HIGH)
|
||||
tmr.delay(10)
|
||||
gpio.write(ztrig, gpio.LOW)
|
||||
end
|
||||
|
||||
-- mesure la distance et il s'arrete si < 20cm
|
||||
function zmesure()
|
||||
if gpio.read(zecho)==1 then
|
||||
ztstart=tmr.now()
|
||||
else
|
||||
ztstop=tmr.now()
|
||||
zlength=360*(ztstop-ztstart)/2/10000
|
||||
|
||||
if zlength>200 then zlength=0 end
|
||||
if zlength<20 then
|
||||
turn_right_robot()
|
||||
tmr.alarm(hvtimer1, 1000, tmr.ALARM_SINGLE, avance_robot)
|
||||
end
|
||||
|
||||
print("distance [cm]: "..math.floor(zlength))
|
||||
end
|
||||
end
|
||||
|
||||
gpio.trig(zecho, "both", zmesure)
|
||||
tmr.alarm(hvtimer2, 1000, tmr.ALARM_AUTO, zmesure_pulse)
|
||||
|
||||
|
||||
avance_robot()
|
||||
@@ -1,108 +0,0 @@
|
||||
--Programme pour faire tourner aleatoirement le robot à droite ou à gauche tant qu'il soit à moins de 20cm de l'obstacle
|
||||
--hv20180717.1613
|
||||
|
||||
--parametres pour le module ultra son
|
||||
ztrig=5
|
||||
zecho=6
|
||||
ztstart=0
|
||||
ztstop=0
|
||||
gpio.mode(ztrig, gpio.OUTPUT)
|
||||
gpio.write(ztrig, gpio.LOW)
|
||||
gpio.mode(zecho, gpio.INT, gpio.PULLUP)
|
||||
|
||||
--parametres pour les moteurs
|
||||
pin_a_speed = 1
|
||||
pin_a_dir = 3
|
||||
pin_b_speed = 2
|
||||
pin_b_dir = 4
|
||||
FWD = gpio.LOW
|
||||
REV = gpio.HIGH
|
||||
duty = 1023
|
||||
|
||||
--initialise moteur A
|
||||
gpio.mode(pin_a_speed,gpio.OUTPUT)
|
||||
gpio.write(pin_a_speed,gpio.LOW)
|
||||
pwm.setup(pin_a_speed,1000,duty) --PWM 1KHz, Duty 1023
|
||||
pwm.start(pin_a_speed)
|
||||
pwm.setduty(pin_a_speed,0)
|
||||
gpio.mode(pin_a_dir,gpio.OUTPUT)
|
||||
|
||||
--initialise moteur B
|
||||
gpio.mode(pin_b_speed,gpio.OUTPUT)
|
||||
gpio.write(pin_b_speed,gpio.LOW)
|
||||
pwm.setup(pin_b_speed,1000,duty) --PWM 1KHz, Duty 1023
|
||||
pwm.start(pin_b_speed)
|
||||
pwm.setduty(pin_b_speed,0)
|
||||
gpio.mode(pin_b_dir,gpio.OUTPUT)
|
||||
|
||||
-- timer personnelle
|
||||
hvtimer1=tmr.create()
|
||||
hvtimer2=tmr.create()
|
||||
|
||||
-- speed is 0 - 100
|
||||
function motor(pin_speed, pin_dir, dir, speed)
|
||||
gpio.write(pin_dir,dir)
|
||||
pwm.setduty(pin_speed, (speed * duty) / 100)
|
||||
end
|
||||
|
||||
function motor_a(dir, speed)
|
||||
motor(pin_a_speed, pin_a_dir, dir, speed)
|
||||
end
|
||||
|
||||
function motor_b(dir, speed)
|
||||
motor(pin_b_speed, pin_b_dir, dir, speed)
|
||||
end
|
||||
|
||||
--Robot avance, s'arrete, tourne à droite, tourne à gauche
|
||||
function avance_robot()
|
||||
t=math.random(1,2)
|
||||
--print(t)
|
||||
motor_a(FWD, 60)
|
||||
motor_b(FWD, 60)
|
||||
end
|
||||
function stop_robot()
|
||||
motor_a(FWD, 0)
|
||||
motor_b(FWD, 0)
|
||||
end
|
||||
|
||||
function turn_right_robot()
|
||||
motor_a(FWD, 60)
|
||||
motor_b(REV, 60)
|
||||
end
|
||||
function turn_left_robot()
|
||||
motor_a(REV, 60)
|
||||
motor_b(FWD, 60)
|
||||
end
|
||||
|
||||
--start pulse10 us
|
||||
function zmesure_pulse()
|
||||
gpio.write(ztrig, gpio.HIGH)
|
||||
tmr.delay(10)
|
||||
gpio.write(ztrig, gpio.LOW)
|
||||
end
|
||||
|
||||
-- mesure la distance et il s'arrete si < 20cm
|
||||
function zmesure()
|
||||
if gpio.read(zecho)==1 then
|
||||
ztstart=tmr.now()
|
||||
else
|
||||
ztstop=tmr.now()
|
||||
zlength=360*(ztstop-ztstart)/2/10000
|
||||
if zlength>200 then zlength=0 end
|
||||
--print("distance [cm]: "..math.floor(zlength))
|
||||
if zlength<20 then
|
||||
if t==1 then
|
||||
turn_left_robot()
|
||||
else
|
||||
turn_right_robot()
|
||||
end
|
||||
tmr.alarm(hvtimer1, 1000, tmr.ALARM_SINGLE, avance_robot)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
gpio.trig(zecho, "both", zmesure)
|
||||
tmr.alarm(hvtimer2, 1000, tmr.ALARM_AUTO, zmesure_pulse)
|
||||
|
||||
|
||||
avance_robot()
|
||||
@@ -1,6 +0,0 @@
|
||||
# !/bin/bash
|
||||
# Script pour lancer ESPlorer
|
||||
# hv 1807010.1538
|
||||
|
||||
#sudo chmod 666 /dev/ttyUSB0
|
||||
java -jar "ESPlorer/ESPlorer.jar"
|
||||
@@ -1,6 +0,0 @@
|
||||
# !/bin/bash
|
||||
# Script pour lancer l'émulateur de terminale
|
||||
# hv 1807010.1555
|
||||
|
||||
sudo chmod 666 /dev/ttyUSB0
|
||||
screen /dev/ttyUSB0 115200
|
||||
@@ -1,13 +0,0 @@
|
||||
-- Clignoter la led bleue. Vieille méthode, pas le faire
|
||||
-- zf180709.2200
|
||||
|
||||
zpin=0 --led blue builting
|
||||
gpio.mode(zpin, gpio.OUTPUT)
|
||||
|
||||
for i=1,20 do
|
||||
print("Hello World "..i)
|
||||
gpio.write(zpin, gpio.LOW)
|
||||
tmr.delay(100000)
|
||||
gpio.write(zpin, gpio.HIGH)
|
||||
tmr.delay(100000)
|
||||
end
|
||||
@@ -1,19 +0,0 @@
|
||||
-- Clignoter les leds. Vieille méthode. Pas le faire
|
||||
-- zf180709.2200
|
||||
|
||||
zpin1=1--led rouge
|
||||
zpin2=2--led verte
|
||||
gpio.mode(zpin1, gpio.OUTPUT)
|
||||
gpio.mode(zpin2,gpio.OUTPUT)
|
||||
|
||||
|
||||
for i=1,10 do
|
||||
print("Hello World "..i)
|
||||
gpio.write(zpin1, gpio.LOW)
|
||||
gpio.write(zpin2, gpio.HIGH)
|
||||
tmr.delay(300000)
|
||||
gpio.write(zpin1, gpio.HIGH)
|
||||
gpio.write(zpin2, gpio.LOW)
|
||||
tmr.delay(300000)
|
||||
end
|
||||
gpio.write(zpin2, gpio.HIGH)
|
||||
@@ -1,18 +0,0 @@
|
||||
-- Enclenche le mode configuration WIFI
|
||||
print("\nzf180718.1107\n")
|
||||
|
||||
function get_ip()
|
||||
if wifi.sta.getip() == nil then
|
||||
print("Connecting to AP...")
|
||||
else
|
||||
tmr.stop(0)
|
||||
print("Connected! IP: ",wifi.sta.getip())
|
||||
tmr.alarm(0,3000,tmr.ALARM_SINGLE, function() node.restart() end)
|
||||
end
|
||||
end
|
||||
|
||||
wifi.sta.disconnect()
|
||||
wifi.sta.clearconfig()
|
||||
print("\nwifi config http://192.168.4.1\n")
|
||||
tmr.alarm(0, 1000, tmr.ALARM_AUTO , get_ip)
|
||||
enduser_setup.start()
|
||||
@@ -1,26 +0,0 @@
|
||||
--Programme qui démarre le robot en appuyant sur le bouton flash et le redémarre si le bouton flash est appuyer pendant 3 secondes
|
||||
--hv20180716.1349
|
||||
|
||||
zBTNflash = 3 -- GPIO0 button
|
||||
function btn_clic()
|
||||
t1=tmr.now()
|
||||
tmr.alarm(0,100,tmr.ALARM_AUTO, btn_test)
|
||||
end
|
||||
function btn_test()
|
||||
t2=tmr.now()
|
||||
t3=(t2-t1)/1000000
|
||||
print("t3: "..t3)
|
||||
if gpio.read(zBTNflash)==1 then
|
||||
tmr.stop(0)
|
||||
gpio.trig(zBTNflash)
|
||||
dofile("robot_1.lua")
|
||||
end
|
||||
if t3>2 then
|
||||
tmr.stop(0)
|
||||
gpio.trig(zBTNflash)
|
||||
node.restart()
|
||||
end
|
||||
end
|
||||
gpio.mode(zBTNflash,gpio.INT)
|
||||
gpio.trig(zBTNflash, "down", btn_clic)
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
--Connexion en mode client WIFI
|
||||
--hv20180711.1501
|
||||
|
||||
print("Démarrage")
|
||||
wifi.sta.disconnect()
|
||||
wifi.setmode(wifi.STATION)
|
||||
print("set mode=STATION (mode="..wifi.getmode()..")")
|
||||
wifi.sta.config{ssid="Hugo", pwd="tototutu"}
|
||||
|
||||
tmr.alarm(0, 1000, tmr.ALARM_AUTO , function()
|
||||
if wifi.sta.getip() == nil then
|
||||
print("Connecting to AP...")
|
||||
else
|
||||
print("Connected! IP: ",wifi.sta.getip())
|
||||
tmr.stop(0)
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
-- fonction dir() pour afficher les fichiers dans la flash
|
||||
-- zf180717.1542
|
||||
|
||||
function dir()
|
||||
print("\n-------------------------------")
|
||||
l=file.list() i=0
|
||||
for k,v in pairs(l) do
|
||||
i=i+v
|
||||
print(k..string.rep(" ",19-string.len(k)).." : "..v.." bytes")
|
||||
end
|
||||
print("-------------------------------")
|
||||
print('\nUsed: '..i..' bytes\nusage: dofile("file.lua")\n')
|
||||
end
|
||||
|
||||
dir()
|
||||
@@ -1,14 +0,0 @@
|
||||
-- get_ip.lua
|
||||
-- affiche l'adresse IP
|
||||
-- zf180718.1103
|
||||
|
||||
wifi.sta.connect()
|
||||
|
||||
tmr.alarm(0, 1000, tmr.ALARM_AUTO , function()
|
||||
if wifi.sta.getip() == nil then
|
||||
print("Connecting to AP...")
|
||||
else
|
||||
print("Connected! IP: ",wifi.sta.getip())
|
||||
tmr.stop(0)
|
||||
end
|
||||
end)
|
||||
@@ -1,7 +0,0 @@
|
||||
--start job. Démarre le robot et le serveur web
|
||||
print("\nstart job hv180718.1155\n")
|
||||
|
||||
dofile("wifi_robot_on_off.lua")
|
||||
dofile("robot3.lua")
|
||||
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
-- a simple telnet server
|
||||
print("\nzf180718.1105\n")
|
||||
|
||||
-- restart server if needed
|
||||
if telnet_srv ~= nil then
|
||||
telnet_srv:close()
|
||||
end
|
||||
telnet_srv = net.createServer(net.TCP, 180)
|
||||
|
||||
telnet_srv:listen(23, function(socket)
|
||||
local fifo = {}
|
||||
local fifo_drained = true
|
||||
|
||||
local function sender(c)
|
||||
if #fifo > 0 then
|
||||
c:send(table.remove(fifo, 1))
|
||||
else
|
||||
fifo_drained = true
|
||||
end
|
||||
end
|
||||
|
||||
local function s_output(str)
|
||||
table.insert(fifo, str)
|
||||
if socket ~= nil and fifo_drained then
|
||||
fifo_drained = false
|
||||
sender(socket)
|
||||
end
|
||||
end
|
||||
|
||||
node.output(s_output, 0) -- re-direct output to function s_ouput.
|
||||
|
||||
socket:on("receive", function(c, l)
|
||||
node.input(l) -- works like pcall(loadstring(l)) but support multiple separate line
|
||||
end)
|
||||
socket:on("disconnection", function(c)
|
||||
node.output(nil) -- un-regist the redirect output function, output goes to serial
|
||||
end)
|
||||
socket:on("sent", sender)
|
||||
|
||||
print("Welcome to NodeMCU world.")
|
||||
end)
|
||||
|
||||
print("Telnet server running...")
|
||||
@@ -1,49 +0,0 @@
|
||||
--Petit serveur WEB pour allumer/éteindre une LED en mode client WIFI
|
||||
--hv20180711.1606
|
||||
|
||||
print("Démarrage")
|
||||
wifi.sta.disconnect()
|
||||
wifi.setmode(wifi.STATION)
|
||||
print("set mode=STATION (mode="..wifi.getmode()..")")
|
||||
wifi.sta.config{ssid="Hugo", pwd="tototutu"}
|
||||
|
||||
tmr.alarm(0, 1000, tmr.ALARM_AUTO , function()
|
||||
if wifi.sta.getip() == nil then
|
||||
print("Connecting to AP...")
|
||||
else
|
||||
print("Connected! IP: ",wifi.sta.getip())
|
||||
tmr.stop(0)
|
||||
end
|
||||
end)
|
||||
|
||||
zLED=0
|
||||
gpio.mode(zLED, gpio.OUTPUT)
|
||||
gpio.write(zLED, gpio.HIGH)
|
||||
srv = net.createServer(net.TCP)
|
||||
srv:listen(80, function(conn)
|
||||
conn:on("receive", function(client, request)
|
||||
local buf = ""
|
||||
local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP")
|
||||
if (method == nil) then
|
||||
_, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP")
|
||||
end
|
||||
local _GET = {}
|
||||
if (vars ~= nil) then
|
||||
for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do
|
||||
_GET[k] = v
|
||||
end
|
||||
end
|
||||
buf = buf .. "<!DOCTYPE html><html><body><h1>Hello, this is NodeMCU.</h1><form src=\"/\">Turn PIN <select name=\"pin\" onchange=\"form.submit()\">"
|
||||
local _on, _off = "", ""
|
||||
if (_GET.pin == "ON") then
|
||||
_on = " selected=true"
|
||||
gpio.write(zLED, gpio.LOW)
|
||||
elseif (_GET.pin == "OFF") then
|
||||
_off = " selected=\"true\""
|
||||
gpio.write(zLED, gpio.HIGH)
|
||||
end
|
||||
buf = buf .. "<option" .. _on .. ">ON</option><option" .. _off .. ">OFF</option></select></form></body></html>"
|
||||
client:send(buf)
|
||||
end)
|
||||
conn:on("sent", function(c) c:close() end)
|
||||
end)
|
||||
@@ -1,53 +0,0 @@
|
||||
--Petit serveur WEB pour allumer/éteindre une LED en mode client WIFI
|
||||
print("\nDémarrage hv20180711.1606\n")
|
||||
|
||||
--wifi.sta.disconnect()
|
||||
--wifi.setmode(wifi.STATION)
|
||||
--print("set mode=STATION (mode="..wifi.getmode()..")")
|
||||
--wifi.sta.config{ssid="Hugo", pwd="tototutu"}
|
||||
|
||||
wifi.sta.connect()
|
||||
tmr.alarm(0, 1000, tmr.ALARM_AUTO , function()
|
||||
if wifi.sta.getip() == nil then
|
||||
print("Connecting to AP...")
|
||||
else
|
||||
print("Connected! IP: ",wifi.sta.getip())
|
||||
tmr.stop(0)
|
||||
end
|
||||
end)
|
||||
|
||||
zLED=0
|
||||
gpio.mode(zLED, gpio.OUTPUT)
|
||||
gpio.write(zLED, gpio.HIGH)
|
||||
srv = net.createServer(net.TCP)
|
||||
|
||||
|
||||
srv:listen(80, function(conn)
|
||||
conn:on("receive", function(client, request)
|
||||
local buf = ""
|
||||
local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP")
|
||||
if (method == nil) then
|
||||
_, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP")
|
||||
end
|
||||
local _GET = {}
|
||||
if (vars ~= nil) then
|
||||
for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do
|
||||
_GET[k] = v
|
||||
print(k..": "..v)
|
||||
end
|
||||
end
|
||||
buf = buf .. "<!DOCTYPE html><html><body><h1>Hello, this is NodeMCU.</h1>Turn PIN : </br></br>"
|
||||
local _on, _off = "", ""
|
||||
if (_GET.pin == "ON") then
|
||||
_on = " selected=true"
|
||||
gpio.write(zLED, gpio.LOW)
|
||||
elseif (_GET.pin == "OFF") then
|
||||
_off = " selected=\"true\""
|
||||
gpio.write(zLED, gpio.HIGH)
|
||||
end
|
||||
buf = buf .. "<a href=\"?pin=ON\"><button>ON</button></a> <a href=\"?pin=OFF\"><button>OFF</button></a>"
|
||||
client:send(buf)
|
||||
end)
|
||||
conn:on("sent", function(c) c:close() end)
|
||||
end)
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
--Petit serveur WEB pour allumer/éteindre une LED en mode client WIFI
|
||||
print("\nDémarrage hv20180711.1606\n")
|
||||
|
||||
hvtime=tmr.create()
|
||||
wifi.sta.connect()
|
||||
tmr.alarm(hvtime, 1000, tmr.ALARM_AUTO , function()
|
||||
if wifi.sta.getip() == nil then
|
||||
print("Connecting to AP...")
|
||||
else
|
||||
print("Connected! IP: ",wifi.sta.getip())
|
||||
tmr.stop(hvtime)
|
||||
end
|
||||
end)
|
||||
|
||||
zLED=0
|
||||
gpio.mode(zLED, gpio.OUTPUT)
|
||||
gpio.write(zLED, gpio.HIGH)
|
||||
srv = net.createServer(net.TCP)
|
||||
|
||||
srv:listen(80, function(conn)
|
||||
conn:on("receive", function(client, request)
|
||||
local buf = ""
|
||||
local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP")
|
||||
if (method == nil) then
|
||||
_, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP")
|
||||
end
|
||||
local _GET = {}
|
||||
if (vars ~= nil) then
|
||||
for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do
|
||||
_GET[k] = v
|
||||
end
|
||||
end
|
||||
buf = buf .. "<!DOCTYPE html><html><body><h1>Faire avancer ou arreter le robot</h1></br></br>"
|
||||
local _on, _off = "", ""
|
||||
if (_GET.pin == "Forward") then
|
||||
_on = " selected=true"
|
||||
avance_robot()
|
||||
gpio.write(zLED, gpio.LOW)
|
||||
elseif (_GET.pin == "Backward") then
|
||||
_off = " selected=\"true\""
|
||||
stop_robot()
|
||||
gpio.write(zLED, gpio.HIGH)
|
||||
end
|
||||
buf = buf .. "<a href=\"?pin=Forward\"><button>Forward</button></a> <a href=\"?pin=Backward\"><button>Backward</button></a>"
|
||||
client:send(buf)
|
||||
end)
|
||||
conn:on("sent", function(c) c:close() end)
|
||||
end)
|
||||
|
||||
28
README.md
28
README.md
@@ -1,4 +1,28 @@
|
||||
# NodeMCU_Lua
|
||||
Ma petite caisse à outils pour le NodeMCU en Lua ;-)
|
||||
## Ma petite caisse à outils pour le NodeMCU en Lua ;-)
|
||||
|
||||
J'y mets, pour l'instant tous mes petits projets en NodeMCU Lua afin de me faire une panoplie d'outils pour pouvoir utiliser très facilement les modules ESP8266.
|
||||
|
||||
J'essaie de les trier de manière logique, mais des fois ce n'est pas possible, donc il est bien de se laisser balader de temps en temps dans la structure de dossiers afin d'y trouver quelques perles ;-)
|
||||
|
||||
Et bien entendu, cette structure est vivante, donc elle peut changer au cours du temps !
|
||||
|
||||
|
||||
|
||||
## Ma petite documentation perso
|
||||
Ma petite documentation pense bête où je mets pour l'instant pleins de choses que j'ai trouvées sur le NodeMCU ou ESP8266 en Lua
|
||||
|
||||
### NodeMCU ESP8286, mais c'est si simple ;-)
|
||||
[https://docs.google.com/document/d/1q64uK3IMOgEDdKaIAttbYuFt4GuLQ06k3FLeyfCsWLg/edit?usp=sharing](https://docs.google.com/document/d/1q64uK3IMOgEDdKaIAttbYuFt4GuLQ06k3FLeyfCsWLg/edit?usp=sharing)
|
||||
|
||||
|
||||
## La communauté Leman-IoT
|
||||
Une communauté regroupant les utilisateurs de NodeMCU Lua et bien d'autres IoT s'est crée à Lausanne (Switzerland) !<br>
|
||||
N'hésitez pas a y faire un petit tour et aussi a y participer car on est toujours plus fort à plusieurs ;-)<br>
|
||||
|
||||
[https://zuzu59.github.io/leman-iot/](https://zuzu59.github.io/leman-iot/)
|
||||
|
||||
|
||||
|
||||
zf181118.1016
|
||||
|
||||
Encore en bordel pour l'instant, mais j'y travail :-)
|
||||
|
||||
5
Robot_Lua/README.md
Executable file
5
Robot_Lua/README.md
Executable file
@@ -0,0 +1,5 @@
|
||||
# ATTENTION le code du Robot en Lua se trouve ici:
|
||||
https://github.com/strikerpt/NodeMCU_Lua_robot
|
||||
|
||||
zf181118.1027
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
-- programme pour faire clignoter une LED avec un rapport on/off
|
||||
|
||||
print("\n blink_led1.lua zf181105.1114 \n")
|
||||
print("\n blink_led1.lua zf181116.0014 \n")
|
||||
|
||||
zLED=0
|
||||
zTm_On_LED = 200 --> en ms
|
||||
zTm_Off_LED = 200 --> en ms
|
||||
zTm_On_LED = 50 --> en ms
|
||||
zTm_Off_LED = 500 --> en ms
|
||||
zFlag_LED = 0
|
||||
|
||||
function blink_LED ()
|
||||
|
||||
14
get_ip.lua
14
get_ip.lua
@@ -1,14 +0,0 @@
|
||||
-- get_ip.lua
|
||||
-- branche le wifi et affiche l'adresse IP
|
||||
-- zf180719.1039
|
||||
|
||||
wifi.sta.connect()
|
||||
|
||||
tmr.alarm(0, 1000, tmr.ALARM_AUTO , function()
|
||||
if wifi.sta.getip() == nil then
|
||||
print("Connecting to AP...")
|
||||
else
|
||||
print("Connected! IP: ",wifi.sta.getip())
|
||||
tmr.stop(0)
|
||||
end
|
||||
end)
|
||||
23
zflash.sh
23
zflash.sh
@@ -1,11 +1,24 @@
|
||||
#!/bin/bash
|
||||
#Petit script pour flasher facilement les NodeMCU
|
||||
#zf181015.1147
|
||||
#Petit script pour flasher facilement les NodeMCU avec un firmware
|
||||
|
||||
#ATTENTION: c'est pour ma structure, il faudra donc l'adapter
|
||||
|
||||
#zf181118.1022
|
||||
|
||||
|
||||
#test si l'argument est vide
|
||||
if [ -z "$1" ]
|
||||
then
|
||||
echo -e "\nSyntax: ./zflash.sh ../../Firmware/nodemcu-master-13-modules-2018-10-11-16-35-53-float.bin \n\n"
|
||||
exit
|
||||
fi
|
||||
|
||||
echo ---------- start zflash.sh
|
||||
|
||||
cd ./Tools/esptool-master
|
||||
|
||||
python esptool.py erase_flash
|
||||
sleep
|
||||
python esptool.py write_flash -fm dio 0x00000 ../../Firmware/nodemcu-master-13-modules-2018-10-11-16-35-53-float.bin
|
||||
sleep 1
|
||||
sleep 2
|
||||
python esptool.py write_flash -fm dio 0x00000 $1
|
||||
sleep 2
|
||||
screen /dev/cu.wchusbserial1410 115200
|
||||
|
||||
Reference in New Issue
Block a user