- essayé de refactorisé la mesure de distance avec le module à ultra-son.

Mais je n'arrive toujours pas à descendre en dessous des 9cm, pourtant j'ai bien essayé de 'cacher' en RAM les points rapides :-(
This commit is contained in:
Christian Zufferey
2018-10-26 13:55:59 +02:00
parent 1adc3051de
commit f2afbc9cc3
21 changed files with 381 additions and 0 deletions

View File

@@ -0,0 +1,39 @@
-- Affiche plusieurs lignes sur le mini display OLED du MiniD1
-- Source: https://wiki.wemos.cc/products:d1_mini_shields:oled_shield
-- font_10x20,font_6x10,font_7x13,font_8x13,font_9x15,font_chikita
print("\n disp_oled.lua zf180826.1807 \n")
-- config pour le mini display OLED du Wemos Mini_D1
pin_scl = 1
pin_sda = 2
disp_sla = 0x3c
function init_OLED(sda, scl)
i2c.setup(0, sda, scl, i2c.SLOW)
disp = u8g.ssd1306_64x48_i2c(disp_sla)
disp:setFontRefHeightExtendedText()
disp:setDefaultForegroundColor()
end
-- font_10x20,font_6x10,font_7x13,font_8x13,font_9x15,font_chikita
--..string.char(233)..":") -- pour afficher un é !
function draw()
disp:setFont(u8g.font_10x20)
disp:setFontPosTop()
disp:drawStr(0,00,oled_line1)
disp:setFont(u8g.font_chikita)
disp:setFontPosTop()
disp:drawStr(0,17,oled_line2)
disp:drawStr(0,24,oled_line3)
disp:drawStr(0,31,oled_line4)
disp:drawStr(0,38,oled_line5)
end
function disp_oled()
disp:firstPage()
repeat
draw()
until disp:nextPage() == false
end
init_OLED(pin_sda, pin_scl)

View File

@@ -0,0 +1,19 @@
-- super mini bootstrap
print("\n init_minizf1.lua zf181024.1922 \n")
tmr.alarm(0, 7000, tmr.ALARM_SINGLE, function()
dofile("disp_oled.lua")
oled_line1="RESET"
oled_line2=""
oled_line3=""
oled_line4=""
oled_line5=""
disp_oled()
--dofile("wifi_ap_start.lua")
--dofile("telnet_srv.lua")
dofile("start_demo.lua")
--dofile("ir_send.lua")
end)

View File

@@ -0,0 +1,17 @@
-- fonction cat() pour afficher le contenu d'un fichier dans la flash
print("\n cat.lua zf180826.1109 \n")
function cat(zfile)
print("\n"..zfile.."\n-------------------------------")
zfilei = file.open(zfile, "r")
i=1
zline=file.readline()
repeat
print(i..": "..string.sub(zline,1,string.len(zline)-1))
i=i+1 zline=file.readline()
until zline== nil
file.close(zfilei)
print("-------------------------------")
end

View File

@@ -0,0 +1,15 @@
-- fonction dir() pour afficher les fichiers dans la flash
print("\n dir.lua zf180826.1019 \n")
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()

View File

@@ -0,0 +1,44 @@
-- Serveur telnet pour connexion en remote WIFI
print("\n telnet_srv.lua zf180826.1020 \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...\nUsage: telnet -r ip\n")

View File

@@ -0,0 +1,12 @@
-- Petit script pour envoyer quelque chose sur un serveur WEB
print("\n web_cli.lua zf180828.1849 \n")
function disp_send()
http.get("http://192.168.4.1/?line1="..zlength.."m", nil, function(code, data)
if (code < 0) then
-- print("HTTP request failed")
else
-- print(code, data)
end
end)
end

View File

@@ -0,0 +1,13 @@
-- Démarre le WIFI en mode AP
print("\n wifi_ap_start.lua zf180824.2000 \n")
local zmodewifi=wifi.getmode()
if zmodewifi == wifi.NULLMODE then
print("WIFI mode AP only")
wifi.setmode(wifi.SOFTAP)
elseif zmodewifi == wifi.STATION then
print("WIFI mode AP+CLI")
wifi.setmode(wifi.STATIONAP)
end
wifi.ap.config({ ssid = "NodeMCU "..wifi.ap.getmac(), pwd = "12345678" })
dofile("wifi_info.lua")

View File

@@ -0,0 +1,10 @@
-- Démarre le WIFI en mode AP
print("\n wifi_ap_stop.lua zf180824.2000 \n")
local zmodewifi=wifi.getmode()
if zmodewifi == wifi.SOFTAP then
wifi.setmode(wifi.NULLMODE)
elseif zmodewifi == wifi.STATIONAP then
wifi.setmode(wifi.STATION)
end
print("WIFI AP arrêté")

View File

@@ -0,0 +1,4 @@
-- Petit script pour configurer le client WIFI du NodeMCU
print("\n wifi_cli_conf.lua zf180824.2000 \n")
wifi.sta.config{ssid="Hugo", pwd="tototutu", save=true}

View File

@@ -0,0 +1,14 @@
-- Petit script pour connecter le NodeMCU sur un AP Wifi avec l'accompte sauvé en EEPROM
print("\n wifi_cli_start.lua zf180824.2000 \n")
local zmodewifi=wifi.getmode()
if zmodewifi == wifi.NULLMODE then
print("WIFI mode CLI only")
wifi.setmode(wifi.STATION)
elseif zmodewifi == wifi.SOFTAP then
print("WIFI mode AP+CLI")
wifi.setmode(wifi.STATIONAP)
end
wifi.sta.autoconnect(1)
wifi.sta.connect()
dofile("wifi_get_ip.lua")

View File

@@ -0,0 +1,10 @@
-- Démarre le WIFI en mode AP
print("\n wifi_cli_stop.lua zf180824.2000 \n")
local zmodewifi=wifi.getmode()
if zmodewifi == wifi.STATION then
wifi.setmode(wifi.NULLMODE)
elseif zmodewifi == wifi.STATIONAP then
wifi.setmode(wifi.SOFTAP)
end
print("WIFI CLI arrêté")

View File

@@ -0,0 +1,6 @@
-- Petit script pour démarrer le mode configuration WIFI du NodeMCU
print("\n wifi_cnf_start.lua zf180824.2000 \n")
print("\nwifi config http://192.168.4.1\n")
dofile("wifi_get_ip.lua")
enduser_setup.start()

View File

@@ -0,0 +1,6 @@
-- Petit script pour arrêter le mode configuration WIFI du NodeMCU
print("\n wifi_cnf_stop.lua zf180824.2000 \n")
enduser_setup.stop()
wifi.sta.autoconnect(1)
wifi.sta.connect()

View File

@@ -0,0 +1,12 @@
-- Petit script pour obtenir l'adresse IP du NodeMCU connecté sur un AP Wifi
print("\n wifi_get_ip.lua zf180824.2000 \n")
wifitimer1=tmr.create()
tmr.alarm(wifitimer1, 1000, tmr.ALARM_AUTO , function()
if wifi.sta.getip() == nil then
print("Connecting to AP...")
else
tmr.stop(wifitimer1)
dofile("wifi_info.lua")
end
end)

View File

@@ -0,0 +1,30 @@
-- Petit script pour afficher les infos actuel du WIFI
print("\n wifi_info.lua zf180824.2000 \n")
local zmodewifi=wifi.getmode()
--wifi.NULLMODE, wifi.STATION, wifi.SOFTAP, wifi.STATIONAP
if zmodewifi == wifi.NULLMODE then
print("WIFI OFF")
elseif zmodewifi == wifi.STATION then
print("WIFI mode CLI")
print("Connected IP:\n",wifi.sta.getip())
do
local sta_config=wifi.sta.getconfig(true)
print(string.format("Current client config:\n\tssid:\"%s\"\tpassword:\"%s\"\n\tbssid:\"%s\"\tbssid_set:%s", sta_config.ssid, sta_config.pwd, sta_config.bssid, (sta_config.bssid_set and "true" or "false")))
end
elseif zmodewifi == wifi.SOFTAP then
print("WIFI mode AP")
print("AP MAC:\n\t"..wifi.ap.getmac())
print("AP IP:\n\t"..wifi.ap.getip())
elseif zmodewifi == wifi.STATIONAP then
print("WIFI mode CLI+AP")
print("Connected IP:\n",wifi.sta.getip())
do
local sta_config=wifi.sta.getconfig(true)
print(string.format("Current client config:\n\tssid:\"%s\"\tpassword:\"%s\"\n\tbssid:\"%s\"\tbssid_set:%s", sta_config.ssid, sta_config.pwd, sta_config.bssid, (sta_config.bssid_set and "true" or "false")))
end
print("AP MAC: "..wifi.ap.getmac())
print("AP IP: "..wifi.ap.getip())
end

View File

@@ -0,0 +1,9 @@
-- Déconnecte le WIFI
print("\n wifi_off.lua zf180822.0959 \n")
wifi.setmode(wifi.NULLMODE)
--[[
print(wifi.NULLMODE, wifi.STATION, wifi.SOFTAP, wifi.STATIONAP)
print(wifi.getmode())
]]

View File

@@ -0,0 +1,5 @@
-- Exemple de petit script pour démarrer le WIFI
print("\n wifi_start.lua zf180824.2000 \n")
dofile("wifi_cli_start.lua")
dofile("wifi_ap_start.lua")

View File

@@ -0,0 +1,12 @@
-- pour effacer TOUS les fichiers qui se trouve dans la flash du NodeMCU
print("\n rm_files.lua zf180907.1511 \n")
l=file.list() i=0
for k,v in pairs(l) do
i=i+v
file.remove(k)
end
print("-------------------------------")
print("\nC'est tout effaced :-) \n")

View File

@@ -0,0 +1,28 @@
-- Permet de démarrer une petite démo simplement via telnet
print("\n start_demo1.lua zf181024.1922 \n")
dofile("disp_oled.lua")
oled_line1="DEMO"
oled_line2=""
oled_line3=""
oled_line4=""
oled_line5=""
disp_oled()
function disp_mesure ()
print(zlength)
oled_line1=zlength.." m"
oled_line2=""
oled_line3=""
oled_line4=""
oled_line5="181024.1922"
disp_oled()
-- disp_send()
end
--dofile("web_cli.lua")
dofile("ultra_son.lua")
tmr.alarm(detectortimer1, 1000, tmr.ALARM_AUTO, zmesure_pulse)

View File

@@ -0,0 +1,26 @@
print("\n test_speed.lua zf181026.1233 \n")
local pin_ir_send = 8
gpio.mode(pin_ir_send,gpio.OUTPUT)
local write = gpio.write
write(pin_ir_send, 0)
function pulse_ir()
local i,a
for i = 1,10 do
t1=tmr.now()
write(pin_ir_send, 1)
-- a=1 a=1 a=1 a=1
write(pin_ir_send, 0)
a=1 a=1 a=1
t2=tmr.now()
print("durée: "..t2-t1-294)
end
end
sendir_tmr1=tmr.create()
tmr.alarm(sendir_tmr1, 3000, tmr.ALARM_AUTO, pulse_ir)

View File

@@ -0,0 +1,50 @@
-- Mesure la distance avec le module ultra-son
print("\n ultra_son.lua zf181026.1355 \n")
--Parametres pour le module ultra son
local ztrig=5
gpio.mode(ztrig, gpio.OUTPUT)
local fast_write = gpio.write
fast_write(ztrig, 0)
local zecho=6
gpio.mode(zecho, gpio.INT, gpio.PULLUP)
detectortimer1=tmr.create()
detectortimer2=tmr.create()
local fast_read = gpio.read
local ultra_son_start=0
local ultra_son_stop=0
--Function pour envoyer la pulse
function zmesure_pulse()
--t1=tmr.now()
fast_write(ztrig, 1)
fast_write(ztrig, 0)
--t2=tmr.now()
--print("durée: "..t2-t1-314)
end
--Fonction pour mesurer la pulse
function zmesure()
--print("pin: "..gpio.read(zecho))
if fast_read(zecho)==1 then
ultra_son_start=tmr.now()
else
ultra_son_stop=tmr.now()
print("Delta: "..ultra_son_stop-ultra_son_start)
-- zlength=math.floor(480*(ultra_son_stop-ultra_son_start)/2/10000)/100
zlength=480*(ultra_son_stop-ultra_son_start)/2/10000
-- if zlength>6 then zlength=0 end
disp_mesure()
end
end
gpio.trig(zecho,"both",zmesure)
-- à commenter après les tests de perf
function disp_mesure() print(zlength) end
tmr.alarm(detectortimer1, 1000, tmr.ALARM_AUTO, zmesure_pulse)