Compare commits
10 commits
89886ac0ea
...
8ac9dac055
Author | SHA1 | Date | |
---|---|---|---|
8ac9dac055 | |||
183ab102f2 | |||
71d93de012 | |||
ff6be1c95b | |||
9a82196fd1 | |||
e92123ab22 | |||
068d3a6f70 | |||
84036b5d43 | |||
07bcae8f43 | |||
52c5047699 |
16 changed files with 704 additions and 106 deletions
|
@ -1,7 +1,12 @@
|
||||||
-- charge le fichier principal
|
-- charge le fichier principal
|
||||||
|
dofile('out.lua')
|
||||||
dofile("main.lua")
|
dofile("main.lua")
|
||||||
|
|
||||||
-- affiche la température du CPU
|
-- affiche la température du CPU
|
||||||
printTemp()
|
printTemp()
|
||||||
|
|
||||||
|
-- affiche le résultat du dé sur le neopixel
|
||||||
|
-- dice()
|
||||||
|
|
||||||
|
-- lance l'hotspot wifi et le serveur web
|
||||||
|
dofile("web.lua")
|
||||||
|
|
27
buzz.lua
Normal file
27
buzz.lua
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
-- écrit le 23/10/2024 par Lukian Leizour
|
||||||
|
-- ce programme doit tourner sur un ESP32 sous LUARTOS
|
||||||
|
|
||||||
|
-- fonction permettant d'allumer un buzzer pendant un temps donné
|
||||||
|
function buzz(pin, delay) -- pin : la patte sur laquelle le buzzer est connecté; delay : le temps pendant lequel le buzzer reste allumé
|
||||||
|
pinon(pin) -- on allume le buzzer
|
||||||
|
tmr.delayms(delay) -- on attend pendand le temps désiré
|
||||||
|
pinoff(pin) -- on étteint le buzzer une fois la durée atteinte
|
||||||
|
end
|
||||||
|
|
||||||
|
-- fonction permettant de faire "clignoter" un buzzer sur un pin donné pour une durée donnée et un nombre d'itérations donné
|
||||||
|
function blink_buzz(pin, n, delay) -- pin : la patte du buzzer; n : le nombre d'itérations; delay : le délai en ms
|
||||||
|
for i=1,n do
|
||||||
|
buzz(pin, delay) -- on allume le buzzer pendant la durée désirée
|
||||||
|
tmr.delayms(delay) -- on attend avant de passer à la suite
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- fonction qui envoie un signal SOS sonore sur un buzzer branché sur la patte D18 de l'ESP32
|
||||||
|
function sos_buzz(n) -- n : nombre de fois qu'on fait le signal SOS
|
||||||
|
for i=1,n do
|
||||||
|
pinblink_buzz(pio.GPIO18, 3, 400) -- on clignotte 3 fois longuement
|
||||||
|
pinblink_buzz(pio.GPIO18, 3, 200) -- on clignotte 3 fois courtement
|
||||||
|
pinblink_buzz(pio.GPIO18, 3, 400) -- on clignotte 3 fois longuement
|
||||||
|
tmr.delayms(400) -- on fait une longue pause de 400ms
|
||||||
|
end
|
||||||
|
end
|
53
dht22.lua
Normal file
53
dht22.lua
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
-- écrit par Lukian Leizour le 22/10/2024x
|
||||||
|
|
||||||
|
function print_temp()
|
||||||
|
s = sensor.attach("DHT22", pio.GPIO18)
|
||||||
|
tmr.delayms(500)
|
||||||
|
while true do
|
||||||
|
print("Temperature : "..s:read("temperature").." Humitité : "..s:read("humidity"))
|
||||||
|
tmr.delayms(500)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function humi_neo(min, max)
|
||||||
|
s = sensor.attach("DHT22", pio.GPIO18)
|
||||||
|
neo = neopixel.attach(neopixel.WS2812B, pio.GPIO19, 8)
|
||||||
|
tmr.delayms(500)
|
||||||
|
pos = 0
|
||||||
|
while true do
|
||||||
|
neo:setPixel(pos, 0, 0, 0)
|
||||||
|
pos = math.floor((s:read("humidity") - min)/(max - min) * 8)
|
||||||
|
neo:setPixel(pos, 240, 150, 140)
|
||||||
|
neo:update()
|
||||||
|
tmr.delayms(500)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function temp_humi_avg()
|
||||||
|
temps = {}
|
||||||
|
humis = {}
|
||||||
|
s = sensor.attach("DHT22", pio.GPIO18)
|
||||||
|
device = pwm.attach(pio.GPIO2, 3, 0.5)
|
||||||
|
blinking = false
|
||||||
|
tmr.delayms(500)
|
||||||
|
while true do
|
||||||
|
temp = s:read("temperature")
|
||||||
|
humi = s:read("humidity")
|
||||||
|
if #temps == 10 then
|
||||||
|
for i=1,9 do
|
||||||
|
temps[i] = temps[i + 1]
|
||||||
|
humis[i] = humis[i + 1]
|
||||||
|
end
|
||||||
|
temps[10] = temp
|
||||||
|
humis[10] = humi
|
||||||
|
else
|
||||||
|
temps[#temps + 1] = temp
|
||||||
|
humis[#humis + 1] = humi
|
||||||
|
end
|
||||||
|
print("temp: "..temp..", min temp: "..min(temps)..", max temp: "..max(temps)..", avg temp: "..avg(temps))
|
||||||
|
print("humi: "..humi..", min humi: "..min(humis)..", max humi: "..max(humis)..", avg humi: "..avg(humis).."\n")
|
||||||
|
if humi > avg(humis) and not blinking then device:start(); blinking = true
|
||||||
|
elseif humi <= avg(humis) and blinking then device:stop(); blinking = false end
|
||||||
|
tmr.delayms(10000)
|
||||||
|
end
|
||||||
|
end
|
41
encoder.lua
Normal file
41
encoder.lua
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
-- écrit par Lukian Leizour le 12/10/2024
|
||||||
|
|
||||||
|
function print_pos()
|
||||||
|
enc = encoder.attach(pio.GPIO18, pio.GPIO19, pio.GPIO21, function(dir, counter, button)
|
||||||
|
print(dir, counter, button)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
function scroll()
|
||||||
|
neo = neopixel.attach(neopixel.WS2812B, pio.GPIO22, 8)
|
||||||
|
pos = 0
|
||||||
|
|
||||||
|
enc = encoder.attach(pio.GPIO18, pio.GPIO19, pio.GPIO21, function(dir, counter, button)
|
||||||
|
neo:setPixel(pos, 0, 0, 0)
|
||||||
|
if (dir == 1) then pos = (pos + 1) % 8
|
||||||
|
elseif (dir == -1) then pos = (pos - 1) % 8 end
|
||||||
|
r, g, b = wheelRGB(math.random(0, 255))
|
||||||
|
neo:setPixel(pos, r//10, g//10, b//10)
|
||||||
|
neo:update()
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
function led_on_off()
|
||||||
|
on = false
|
||||||
|
enc = encoder.attach(pio.GPIO18, pio.GPIO19, pio.GPIO21, function(dir, counter, button)
|
||||||
|
if button == 1 then on = not on end
|
||||||
|
if on then pinon(pio.GPIO2) else pinoff(pio.GPIO2) end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
function led_speed()
|
||||||
|
device = pwm.attach(pio.GPIO2, 1, 0.5)
|
||||||
|
device:start()
|
||||||
|
pos = 1
|
||||||
|
|
||||||
|
enc = encoder.attach(pio.GPIO18, pio.GPIO19, pio.GPIO21, function(dir, counter, button)
|
||||||
|
if (dir == 1) then pos = pos + 1
|
||||||
|
elseif (dir == -1 and pos > 1) then pos = (pos - 1) end
|
||||||
|
device:setfreq(pos)
|
||||||
|
end)
|
||||||
|
end
|
135
leds.lua
Normal file
135
leds.lua
Normal file
|
@ -0,0 +1,135 @@
|
||||||
|
-- écrit le 23/10/2024 par Lukian Leizour
|
||||||
|
-- ce programme doit tourner sur un ESP32 sous LUARTOS
|
||||||
|
|
||||||
|
-- fonction permettant d'allumer la led bleue du du circuit de l'ESP32
|
||||||
|
function ledon()
|
||||||
|
pinon(pio.GPIO2)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- fonction permettant d'étteindre la led bleue du du circuit de l'ESP32
|
||||||
|
function ledoff()
|
||||||
|
pinoff(pio.GPIO2)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- fonction permettant de faire clignoter la led bleue du circuit de l'ESP32
|
||||||
|
function blink(n) -- pin : la patte de sortie; n : int, nombre d'itérations
|
||||||
|
pinblink(pio.GPIO2, n, 200) -- appel de la fonciton blink en lui donnant la bonne patte en paramètre ainsi que le temps d'éclairage
|
||||||
|
end
|
||||||
|
|
||||||
|
-- fonction permettant de faire clignoter la led sur la pin 18 4 fois brièvement
|
||||||
|
function blink_pwm1()
|
||||||
|
device = pwm.attach(pio.GPIO18, 1, 0.2) -- 1Hz et 20% de signal "haut"
|
||||||
|
device:start() -- départ
|
||||||
|
tmr.delayms(4000) -- on attend que la led ait finit de clignoter
|
||||||
|
device:stop() -- on arrête le signal
|
||||||
|
device:detach() -- on se détache de la pin
|
||||||
|
end
|
||||||
|
|
||||||
|
-- fonction permettant de faire clignoter la led sur la pin 18 4 fois longuement
|
||||||
|
function blink_pwm2()
|
||||||
|
device = pwm.attach(pio.GPIO18, 1, 0.8) -- 1Hz et 80% de signal "haut"
|
||||||
|
device:start() -- départ
|
||||||
|
tmr.delayms(4000) -- on attend que la led ait finit de clignoter
|
||||||
|
device:stop() -- on arrête le signal
|
||||||
|
device:detach() -- on se détache de la pin
|
||||||
|
end
|
||||||
|
|
||||||
|
-- fonction permettant d'allumer et étteindre progressivement une led sur la pin 18
|
||||||
|
function smooth()
|
||||||
|
device = pwm.attach(pio.GPIO18, 200, 0)
|
||||||
|
device:start()
|
||||||
|
i = 0
|
||||||
|
while i <= 1 do
|
||||||
|
device:setduty(i)
|
||||||
|
tmr.delayms(200)
|
||||||
|
i = i + 0.05
|
||||||
|
end
|
||||||
|
i = 1.
|
||||||
|
while i >= 0 do
|
||||||
|
device:setduty(i)
|
||||||
|
tmr.delayms(200)
|
||||||
|
i = i - 0.05
|
||||||
|
end
|
||||||
|
device:stop()
|
||||||
|
end
|
||||||
|
|
||||||
|
function rgb(r, g, b)
|
||||||
|
red = pwm.attach(pio.GPIO21, 2000, r / 256); red:start()
|
||||||
|
green = pwm.attach(pio.GPIO19, 2000, g / 256); green:start()
|
||||||
|
blue = pwm.attach(pio.GPIO18, 2000, b / 256); blue:start()
|
||||||
|
|
||||||
|
tmr.delayms(5000)
|
||||||
|
|
||||||
|
red:stop(); red:detach()
|
||||||
|
green:stop(); green:detach()
|
||||||
|
blue:stop(); blue:detach()
|
||||||
|
end
|
||||||
|
|
||||||
|
function allrgb()
|
||||||
|
red = pwm.attach(pio.GPIO21, 2000, 1.); red:start()
|
||||||
|
green = pwm.attach(pio.GPIO19, 2000, 0); green:start()
|
||||||
|
blue = pwm.attach(pio.GPIO18, 2000, 0); blue:start()
|
||||||
|
|
||||||
|
for i=0,255,5 do green:setduty(i / 256); tmr.delayms(50) end
|
||||||
|
for i=255,0,-5 do red:setduty(i / 256); tmr.delayms(50) end
|
||||||
|
for i=0,255,5 do blue:setduty(i / 256); tmr.delayms(50) end
|
||||||
|
for i=255,0,-5 do green:setduty(i / 256); tmr.delayms(50) end
|
||||||
|
for i=0,255,5 do red:setduty(i / 256); tmr.delayms(50) end
|
||||||
|
|
||||||
|
red:stop(); red:detach()
|
||||||
|
green:stop(); green:detach()
|
||||||
|
blue:stop(); blue:detach()
|
||||||
|
end
|
||||||
|
|
||||||
|
-- fonction permettant d'afficher successivement les clouleurs Rouge, Vert et Bleu en connectant la led RGB sur les pins D18, D19 et D21
|
||||||
|
function triColors(n) -- n : nombre de fois qu'on réalise le paterne
|
||||||
|
for i=1,n do
|
||||||
|
pinblink(pio.GPIO21, 1, 200) -- appel de la fonciton blink pour faire clignoter une fois la led en rouge pendant 200ms
|
||||||
|
pinblink(pio.GPIO19, 1, 200) -- appel de la fonciton blink pour faire clignoter une fois la led en vert pendant 200ms
|
||||||
|
pinblink(pio.GPIO18, 1, 200) -- appel de la fonciton blink pour faire clignoter une fois la led en bleu pendant 200ms
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- fonction qui envoie un signal SOS lumineux sur la led bleu du circuit de l'ESP32
|
||||||
|
function sos_led(n) -- n : nombre de fois qu'on affiche le signal SOS
|
||||||
|
for i=1,n do
|
||||||
|
pinblink(pio.GPIO2, 3, 400) -- on clignotte 3 fois longuement
|
||||||
|
pinblink(pio.GPIO2, 3, 200) -- on clignotte 3 fois courtement
|
||||||
|
pinblink(pio.GPIO2, 3, 400) -- on clignotte 3 fois longuement
|
||||||
|
tmr.delayms(400) -- on fait une longue pause de 400ms
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function rgb(r, g, b)
|
||||||
|
-- on attache et démarre les pins
|
||||||
|
red = pwm.attach(pio.GPIO21, 2000, r / 256); red:start()
|
||||||
|
green = pwm.attach(pio.GPIO19, 2000, g / 256); green:start()
|
||||||
|
blue = pwm.attach(pio.GPIO18, 2000, b / 256); blue:start()
|
||||||
|
|
||||||
|
-- on attend 5 secondes
|
||||||
|
tmr.delayms(5000)
|
||||||
|
|
||||||
|
-- on stoppe et détache les pins
|
||||||
|
red:stop(); red:detach()
|
||||||
|
green:stop(); green:detach()
|
||||||
|
blue:stop(); blue:detach()
|
||||||
|
end
|
||||||
|
|
||||||
|
function allrgb()
|
||||||
|
-- on attache et démarre les pins
|
||||||
|
red = pwm.attach(pio.GPIO21, 2000, 1.); red:start()
|
||||||
|
green = pwm.attach(pio.GPIO19, 2000, 0); green:start()
|
||||||
|
blue = pwm.attach(pio.GPIO18, 2000, 0); blue:start()
|
||||||
|
|
||||||
|
-- on boucle pour afficher toutes les couleurs RGB
|
||||||
|
for i=0,255,5 do green:setduty(i / 256); tmr.delayms(50) end
|
||||||
|
for i=255,0,-5 do red:setduty(i / 256); tmr.delayms(50) end
|
||||||
|
for i=0,255,5 do blue:setduty(i / 256); tmr.delayms(50) end
|
||||||
|
for i=255,0,-5 do green:setduty(i / 256); tmr.delayms(50) end
|
||||||
|
for i=0,255,5 do red:setduty(i / 256); tmr.delayms(50) end
|
||||||
|
|
||||||
|
-- on stoppe et détache les pins
|
||||||
|
red:stop(); red:detach()
|
||||||
|
green:stop(); green:detach()
|
||||||
|
blue:stop(); blue:detach()
|
||||||
|
end
|
79
main.lua
79
main.lua
|
@ -1,7 +1,80 @@
|
||||||
-- charge les fonctions du fichier out.lua
|
-- programme principal qui charge les fonctions des autres programmes
|
||||||
dofile("out.lua")
|
|
||||||
|
-- fonction de roue RGB
|
||||||
|
function wheelRGB(pos) -- pos 0 -> 255 couleur
|
||||||
|
pos = 255 - pos
|
||||||
|
if (pos < 85) then
|
||||||
|
return 255 - pos * 3, 0, pos * 3
|
||||||
|
elseif (pos < 170) then
|
||||||
|
pos = pos - 85
|
||||||
|
return 0, pos * 3, 255 - pos * 3
|
||||||
|
else
|
||||||
|
pos = pos - 170
|
||||||
|
return pos * 3, 255 - pos * 3, 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- fonction permettant d'afficher la température du CPU
|
-- fonction permettant d'afficher la température du CPU
|
||||||
function printTemp()
|
function printTemp()
|
||||||
print("Température du CPU :", cpu.temperature())
|
print("Température du CPU :", cpu.temperature())
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- fonction permettant de trouver l'addresse I2C d'un écran OLED
|
||||||
|
function findaddr()
|
||||||
|
i2c.setpins(1, 18, 19)
|
||||||
|
ic = i2c.attach(i2c.I2C1, i2c.MASTER)
|
||||||
|
|
||||||
|
for i = 0, 127 do
|
||||||
|
try(
|
||||||
|
function ()
|
||||||
|
ic:start()
|
||||||
|
ic:address(i, false)
|
||||||
|
ic:stop()
|
||||||
|
print(string.format("found # %x", i))
|
||||||
|
end,
|
||||||
|
|
||||||
|
function()
|
||||||
|
print("failed")
|
||||||
|
end,
|
||||||
|
|
||||||
|
function() end
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function min(tab)
|
||||||
|
local min = tab[1]
|
||||||
|
for i=1,#tab do
|
||||||
|
if tab[i] < min then min = tab[i] end
|
||||||
|
end
|
||||||
|
return min
|
||||||
|
end
|
||||||
|
|
||||||
|
function max(tab)
|
||||||
|
local max = tab[1]
|
||||||
|
for i=1,#tab do
|
||||||
|
if tab[i] > max then max = tab[i] end
|
||||||
|
end
|
||||||
|
return max
|
||||||
|
end
|
||||||
|
|
||||||
|
function avg(tab)
|
||||||
|
local sum = 0
|
||||||
|
for i=1,#tab do
|
||||||
|
sum = sum + tab[i]
|
||||||
|
end
|
||||||
|
return sum / #tab
|
||||||
|
end
|
||||||
|
|
||||||
|
-- charge tout nos fichiers lua
|
||||||
|
dofile("leds.lua")
|
||||||
|
dofile("buzz.lua")
|
||||||
|
dofile("neopixel.lua")
|
||||||
|
dofile("encoder.lua")
|
||||||
|
dofile("dht22.lua")
|
||||||
|
dofile("screen.lua")
|
||||||
|
dofile("wifi.lua")
|
||||||
|
|
||||||
|
-- attache l'écran
|
||||||
|
attachscreen(18, 19, 0x3C)
|
||||||
|
console("Hello, world!")
|
||||||
|
|
80
neopixel.lua
Normal file
80
neopixel.lua
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
-- écrit le 12/10/2024 par Lukian Leizour
|
||||||
|
|
||||||
|
function feux()
|
||||||
|
neo = neopixel.attach(neopixel.WS2812B, pio.GPIO18, 8)
|
||||||
|
|
||||||
|
while true do
|
||||||
|
neo:setPixel(7, 255, 0, 0)
|
||||||
|
neo:update()
|
||||||
|
|
||||||
|
tmr.delayms(3000)
|
||||||
|
|
||||||
|
neo:setPixel(7, 0, 0, 0)
|
||||||
|
neo:setPixel(5, 0, 255, 0)
|
||||||
|
neo:update()
|
||||||
|
|
||||||
|
tmr.delayms(3000)
|
||||||
|
|
||||||
|
neo:setPixel(5, 0, 0, 0)
|
||||||
|
neo:setPixel(6, 255, 255, 0)
|
||||||
|
neo:update()
|
||||||
|
|
||||||
|
tmr.delayms(1000)
|
||||||
|
|
||||||
|
neo:setPixel(6, 0, 0, 0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function arc()
|
||||||
|
neo = neopixel.attach(neopixel.WS2812B, pio.GPIO18, 8)
|
||||||
|
for i=0,7 do
|
||||||
|
r, g, b = wheelRGB((255*i) // 8)
|
||||||
|
neo:setPixel(i, r//10, g//10, b//10)
|
||||||
|
end
|
||||||
|
neo:update()
|
||||||
|
end
|
||||||
|
|
||||||
|
function arc_move()
|
||||||
|
neo = neopixel.attach(neopixel.WS2812B, pio.GPIO18, 8)
|
||||||
|
pixel = 0
|
||||||
|
direction = 0
|
||||||
|
|
||||||
|
while true do
|
||||||
|
r, g, b = wheelRGB((255*pixel) // 8)
|
||||||
|
neo:setPixel(pixel, r, g, b)
|
||||||
|
neo:update()
|
||||||
|
tmr.delayms(100)
|
||||||
|
neo:setPixel(pixel, r//10, g//10, b//10)
|
||||||
|
if (direction == 0) then
|
||||||
|
if (pixel == 7) then
|
||||||
|
direction = 1; pixel = 6
|
||||||
|
else
|
||||||
|
pixel = pixel + 1
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if (pixel == 0) then
|
||||||
|
direction = 0; pixel = 1
|
||||||
|
else
|
||||||
|
pixel = pixel - 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function fete()
|
||||||
|
neo = neopixel.attach(neopixel.WS2812B, pio.GPIO18, 8)
|
||||||
|
while true do
|
||||||
|
r, g, b = wheelRGB(math.random(0, 255))
|
||||||
|
neo:setPixel(math.random(0, 7), r, g, b)
|
||||||
|
neo:update()
|
||||||
|
tmr.delayms(50)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function dice() -- on note que le dé renvoie toujours la même valeur étant donné qu'il est appelé au démarage et que math.random() a comme seed l'uptime de l'ESP32
|
||||||
|
for i=0,math.random(0, 7) do
|
||||||
|
r, g, b = wheelRGB((255*i) // 8)
|
||||||
|
neo:setPixel(i, r, g, b)
|
||||||
|
neo:update()
|
||||||
|
end
|
||||||
|
end
|
106
out.lua
106
out.lua
|
@ -2,19 +2,19 @@
|
||||||
-- ce programme doit tourner sur un ESP32 sous LUARTOS
|
-- ce programme doit tourner sur un ESP32 sous LUARTOS
|
||||||
|
|
||||||
-- fonction permettant d'allumer une led sur l'ESP32 sur une patte donnée
|
-- fonction permettant d'allumer une led sur l'ESP32 sur une patte donnée
|
||||||
function pinon (pin) -- pin : la patte sur laquelle la led est branchée
|
function pinon(pin) -- pin : la patte sur laquelle la led est branchée
|
||||||
pio.pin.setdir(pio.OUTPUT, pin) -- permet d'indiquer que la patte sert de sortie
|
pio.pin.setdir(pio.OUTPUT, pin) -- permet d'indiquer que la patte sert de sortie
|
||||||
pio.pin.sethigh(pin) -- permet de mettre la tension au max
|
pio.pin.sethigh(pin) -- permet de mettre la tension au max
|
||||||
end
|
end
|
||||||
|
|
||||||
-- fonction permettant d'eteindre une led sur l'ESP32 sur une patte donnée
|
-- fonction permettant d'eteindre une led sur l'ESP32 sur une patte donnée
|
||||||
function pinoff (pin) -- pin : la patte sur laquelle la led est branchée
|
function pinoff(pin) -- pin : la patte sur laquelle la led est branchée
|
||||||
pio.pin.setdir(pio.OUTPUT, pin) -- permet d'indiquer que la patte GPIO2 sert de sortie
|
pio.pin.setdir(pio.OUTPUT, pin) -- permet d'indiquer que la patte GPIO2 sert de sortie
|
||||||
pio.pin.setlow(pin) -- permet de mettre la tension au minimum
|
pio.pin.setlow(pin) -- permet de mettre la tension au minimum
|
||||||
end
|
end
|
||||||
|
|
||||||
-- fonction permettant de faire clignoter la led de l'ESP32
|
-- fonction permettant de faire clignoter la led de l'ESP32
|
||||||
function blink (pin, n, delay) -- pin : la patte de sortie; n : int, nombre d'itérations; delay : le temps en ms que la led reste allumé et étteinte
|
function pinblink (pin, n, delay) -- pin : la patte de sortie; n : int, nombre d'itérations; delay : le temps en ms que la led reste allumé et étteinte
|
||||||
for i=1,n do
|
for i=1,n do
|
||||||
pinon(pin) -- appel de la fonction ledon
|
pinon(pin) -- appel de la fonction ledon
|
||||||
tmr.delayms(delay) -- le programme attend en fonction du délai donné
|
tmr.delayms(delay) -- le programme attend en fonction du délai donné
|
||||||
|
@ -22,103 +22,3 @@ function blink (pin, n, delay) -- pin : la patte de sortie; n : int, nombre d'it
|
||||||
tmr.delayms(delay) -- le programme attend en fonction du délai donné
|
tmr.delayms(delay) -- le programme attend en fonction du délai donné
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- fonction permettant de faire clignoter la led sur la pin 18 4 fois brièvement
|
|
||||||
function blink_pwm1()
|
|
||||||
device = pwm.attach(pio.GPIO18, 1, 0.2) -- 1Hz et 20% de signal "haut"
|
|
||||||
device:start() -- départ
|
|
||||||
tmr.delayms(4000) -- on attend que la led ait finit de clignoter
|
|
||||||
device:stop() -- on arrête le signal
|
|
||||||
device:detach() -- on se détache de la pin
|
|
||||||
end
|
|
||||||
|
|
||||||
-- fonction permettant de faire clignoter la led sur la pin 18 4 fois longuement
|
|
||||||
function blink_pwm2()
|
|
||||||
device = pwm.attach(pio.GPIO18, 1, 0.8) -- 1Hz et 80% de signal "haut"
|
|
||||||
device:start() -- départ
|
|
||||||
tmr.delayms(4000) -- on attend que la led ait finit de clignoter
|
|
||||||
device:stop() -- on arrête le signal
|
|
||||||
device:detach() -- on se détache de la pin
|
|
||||||
end
|
|
||||||
|
|
||||||
-- fonction permettant d'allumer et étteindre progressivement une led sur la pin 18
|
|
||||||
function smooth()
|
|
||||||
device = pwm.attach(pio.GPIO18, 200, 0)
|
|
||||||
device:start()
|
|
||||||
i = 0
|
|
||||||
while i <= 1 do
|
|
||||||
device:setduty(i)
|
|
||||||
tmr.delayms(200)
|
|
||||||
i = i + 0.05
|
|
||||||
end
|
|
||||||
i = 1.
|
|
||||||
while i >= 0 do
|
|
||||||
device:setduty(i)
|
|
||||||
tmr.delayms(200)
|
|
||||||
i = i - 0.05
|
|
||||||
end
|
|
||||||
device:stop()²
|
|
||||||
|
|
||||||
red:start()
|
|
||||||
green:start()
|
|
||||||
blue:start()
|
|
||||||
|
|
||||||
tmr.delayms(5000)
|
|
||||||
|
|
||||||
red:stop()
|
|
||||||
green:stop()
|
|
||||||
blue:stop()
|
|
||||||
|
|
||||||
red:detach()
|
|
||||||
green:detach()
|
|
||||||
blue:detach()
|
|
||||||
end
|
|
||||||
|
|
||||||
-- fonction permettant d'allumer un buzzer pendant un temps donné
|
|
||||||
function buzz(pin, delay) -- pin : la patte sur laquelle le buzzer est connecté; delay : le temps pendant lequel le buzzer reste allumé
|
|
||||||
pinon(pin) -- on allume le buzzer
|
|
||||||
tmr.delayms(delay) -- on attend pendand le temps désiré
|
|
||||||
pinoff(pin) -- on étteint le buzzer une fois la durée atteinte
|
|
||||||
end
|
|
||||||
|
|
||||||
-- fonction permettant de faire "clignoter" un buzzer sur un pin donné pour une durée donnée et un nombre d'itérations donné
|
|
||||||
function blink_buzz(pin, n, delay) -- pin : la patte du buzzer; n : le nombre d'itérations; delay : le délai en ms
|
|
||||||
for i=1,n do
|
|
||||||
buzz(pin, delay) -- on allume le buzzer pendant la durée désirée
|
|
||||||
tmr.delayms(delay) -- on attend avant de passer à la suite
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- fonction permettant de faire clignoter la led bleu du circuit de l'ESP32
|
|
||||||
function blink_2(n) -- pin : la patte de sortie; n : int, nombre d'itérations
|
|
||||||
blink(pio.GPIO2, n, 200) -- appel de la fonciton blink en lui donnant la bonne patte en paramètre ainsi que le temps d'éclairage
|
|
||||||
end
|
|
||||||
|
|
||||||
-- fonction permettant d'afficher successivement les clouleurs Rouge, Vert et Bleu en connectant la led RGB sur les pins D18, D19 et D21
|
|
||||||
function triColors(n) -- n : nombre de fois qu'on réalise le paterne
|
|
||||||
for i=1,n do
|
|
||||||
blink(pio.GPIO21, 1, 200) -- appel de la fonciton blink pour faire clignoter une fois la led en rouge pendant 200ms
|
|
||||||
blink(pio.GPIO19, 1, 200) -- appel de la fonciton blink pour faire clignoter une fois la led en vert pendant 200ms
|
|
||||||
blink(pio.GPIO18, 1, 200) -- appel de la fonciton blink pour faire clignoter une fois la led en bleu pendant 200ms
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- fonction qui envoie un signal SOS lumineux sur la led bleu du circuit de l'ESP32
|
|
||||||
function sos_led(n) -- n : nombre de fois qu'on affiche le signal SOS
|
|
||||||
for i=1,n do
|
|
||||||
blink(pio.GPIO2, 3, 400) -- on clignotte 3 fois longuement
|
|
||||||
blink(pio.GPIO2, 3, 200) -- on clignotte 3 fois courtement
|
|
||||||
blink(pio.GPIO2, 3, 400) -- on clignotte 3 fois longuement
|
|
||||||
tmr.delayms(400) -- on fait une longue pause de 400ms
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- fonction qui envoie un signal SOS sonore sur un buzzer branché sur la patte D18 de l'ESP32
|
|
||||||
function sos_buzz(n) -- n : nombre de fois qu'on fait le signal SOS
|
|
||||||
for i=1,n do
|
|
||||||
blink_buzz(pio.GPIO18, 3, 400) -- on clignotte 3 fois longuement
|
|
||||||
blink_buzz(pio.GPIO18, 3, 200) -- on clignotte 3 fois courtement
|
|
||||||
blink_buzz(pio.GPIO18, 3, 400) -- on clignotte 3 fois longuement
|
|
||||||
tmr.delayms(400) -- on fait une longue pause de 400ms
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
133
screen.lua
Normal file
133
screen.lua
Normal file
|
@ -0,0 +1,133 @@
|
||||||
|
-- introduction IOT / UBS
|
||||||
|
-- (c) Gildas Menier
|
||||||
|
-- gildas.menier@univ-ubs.fr
|
||||||
|
|
||||||
|
-- contient les définitions de
|
||||||
|
-- cls()
|
||||||
|
-- console()
|
||||||
|
|
||||||
|
-- fonction permettant se s'attacher à l'écran
|
||||||
|
function attachscreen(sda, scl, i2cadd)
|
||||||
|
try (
|
||||||
|
function ()
|
||||||
|
i2c.setpins(0,sda,scl)
|
||||||
|
gdisplay.attach(gdisplay.SSD1306_128_64, gdisplay.LANDSCAPE, false, i2cadd)
|
||||||
|
gdisplay.clear()
|
||||||
|
gdisplay.setfont(gdisplay.FONT_LCD)
|
||||||
|
gdisplay.setwrap(false)
|
||||||
|
end,
|
||||||
|
|
||||||
|
function (where, line, error, message)
|
||||||
|
print("Couldn't attach the screen.\nError in "..where.." at "..line.." "..error..": "..message)
|
||||||
|
end,
|
||||||
|
|
||||||
|
function () end
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
local consolepos = 0
|
||||||
|
local consoletab = {}
|
||||||
|
local consolemax = 6
|
||||||
|
local oledflip = 1
|
||||||
|
|
||||||
|
function flip()
|
||||||
|
oledflip = oledflip+1; if oledflip > 3 then oledflip = 0 end
|
||||||
|
if oledflip==0 then
|
||||||
|
consolemax = 6
|
||||||
|
gdisplay.attach(gdisplay.SSD1306_128_64, gdisplay.LANDSCAPE_FLIP, false, i2cadd)
|
||||||
|
elseif oledflip==1 then
|
||||||
|
consolemax = 6
|
||||||
|
gdisplay.attach(gdisplay.SSD1306_128_64, gdisplay.LANDSCAPE, false, i2cadd)
|
||||||
|
elseif oledflip==2 then
|
||||||
|
consolemax = 13
|
||||||
|
gdisplay.attach(gdisplay.SSD1306_128_64, gdisplay.PORTRAIT, false, i2cadd)
|
||||||
|
else
|
||||||
|
consolemax = 13
|
||||||
|
gdisplay.attach(gdisplay.SSD1306_128_64, gdisplay.PORTRAIT_FLIP, false, i2cadd)
|
||||||
|
end
|
||||||
|
cls()
|
||||||
|
end
|
||||||
|
|
||||||
|
function cls()
|
||||||
|
if (consolemax==6) then gdisplay.clear()
|
||||||
|
else
|
||||||
|
gdisplay.rect( {0,0}, 128, 9*consolemax, {0,0,0}, {0,0,0} )
|
||||||
|
end
|
||||||
|
if oledflip ~= 1 then gdisplay.clear() end
|
||||||
|
consolepos = 0
|
||||||
|
consoletab={}
|
||||||
|
for i=0, consolemax do
|
||||||
|
consoletab[i] = ""
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function console(msg)
|
||||||
|
if (consolepos <= consolemax) then
|
||||||
|
consoletab[consolepos] = msg
|
||||||
|
gdisplay.write({0, consolepos*9},msg)
|
||||||
|
consolepos = consolepos+1
|
||||||
|
else
|
||||||
|
for i = 1, consolemax do
|
||||||
|
consoletab[i-1] = consoletab[i]
|
||||||
|
end
|
||||||
|
consoletab[consolemax] = msg
|
||||||
|
if (consolemax==6) then gdisplay.clear()
|
||||||
|
else
|
||||||
|
gdisplay.rect( {0,0}, 128, 9*consolemax+9, {0,0,0}, {0,0,0} )
|
||||||
|
end
|
||||||
|
for i=0, consolemax do
|
||||||
|
gdisplay.write({0, i*9},consoletab[i])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function top()
|
||||||
|
local l = thread.list(true)
|
||||||
|
cls()
|
||||||
|
for k,v in pairs(l) do
|
||||||
|
console(l[k]["thid"].." "..l[k]["name"].." "..l[k]["used_stack"])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- fonction permettant de dessiner une courbe selon l'humidité captée par le capteur DHT22
|
||||||
|
function displayhumi()
|
||||||
|
s = sensor.attach("DHT22", pio.GPIO21)
|
||||||
|
tmr.delayms(500)
|
||||||
|
width, height = gdisplay.getscreensize()
|
||||||
|
|
||||||
|
values = {}
|
||||||
|
min_val = s:read("humidity")
|
||||||
|
max_val = s:read("humidity")
|
||||||
|
|
||||||
|
while true do
|
||||||
|
humi = s:read("humidity")
|
||||||
|
-- changement des valeurs min et max
|
||||||
|
if humi < min_val then min_val = humi
|
||||||
|
elseif humi > max_val then max_val = humi end
|
||||||
|
-- si le tableau est plein alors on affiche la courbe
|
||||||
|
if #values == 10 then
|
||||||
|
for i=1,9 do
|
||||||
|
values[i] = values[i + 1]
|
||||||
|
end
|
||||||
|
values[10] = humi
|
||||||
|
cls()
|
||||||
|
-- on dessine chaque partie de la courbe
|
||||||
|
for i=1,9 do
|
||||||
|
-- on dessine la partie de courbe
|
||||||
|
gdisplay.line(
|
||||||
|
{
|
||||||
|
math.floor(i/10 * width), -- coordonnée x du premier point
|
||||||
|
math.floor((values[i] - min_val)/(max_val - min_val) * (height - 10) + 5) -- valeur comprise entre la val min et la val max avec des espaces de 5px et haut et en bas
|
||||||
|
},
|
||||||
|
{
|
||||||
|
math.floor((i + 1)/10 * width), -- coordonnée x du deuxième point
|
||||||
|
math.floor((values[i + 1] - min_val)/(max_val - min_val) * (height - 10) + 5) -- valeur comprise entre la val min et la val max avec des espaces de 5px et haut et en bas
|
||||||
|
}
|
||||||
|
)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
values[#values + 1] = humi
|
||||||
|
end
|
||||||
|
tmr.delayms(500)
|
||||||
|
end
|
||||||
|
end
|
8
web.lua
Normal file
8
web.lua
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
dofile("buzz.lua")
|
||||||
|
-- s = sensor.attach("DHT22", pio.GPIO21)
|
||||||
|
-- tmr.delayms(500)
|
||||||
|
nets = net.wf.scan(true)
|
||||||
|
nb = 0
|
||||||
|
net.wf.setup(net.wf.mode.AP, "ESP32 Pierre", "sandwich134")
|
||||||
|
net.wf.start()
|
||||||
|
net.service.http.start()
|
80
wifi.lua
Normal file
80
wifi.lua
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
dofile("screen.lua")
|
||||||
|
|
||||||
|
function displaynets()
|
||||||
|
nets = net.wf.scan(true)
|
||||||
|
cls()
|
||||||
|
for i=0,#nets-1 do
|
||||||
|
console(nets[i].ssid.." "..nets[i].rssi)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function displayopennets()
|
||||||
|
nets = net.wf.scan(true)
|
||||||
|
cls()
|
||||||
|
for i=0,#nets-1 do
|
||||||
|
if nets[i].auth == net.wf.auth.OPEN then
|
||||||
|
console(nets[i].ssid.." "..nets[i].rssi)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function scanwifi()
|
||||||
|
while true do
|
||||||
|
nets = net.wf.scan(true)
|
||||||
|
cls()
|
||||||
|
for i=0,#nets-1 do
|
||||||
|
console(nets[i].ssid.." "..nets[i].rssi)
|
||||||
|
end
|
||||||
|
tmr.delayms(1000)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function neorssi()
|
||||||
|
neo = neopixel.attach(neopixel.WS2812B, pio.GPIO21, 8)
|
||||||
|
while true do
|
||||||
|
nets = net.wf.scan(true)
|
||||||
|
nb = (-nets[0].rssi) * 8 // 100
|
||||||
|
for i=0,nb-1 do
|
||||||
|
r, g, b = wheelRGB(i * 255 // 8)
|
||||||
|
neo:setPixel(i, r//10, g//10, b//10)
|
||||||
|
end
|
||||||
|
neo:update()
|
||||||
|
tmr.delayms(1000)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function curverssi()
|
||||||
|
width, height = gdisplay.getscreensize()
|
||||||
|
|
||||||
|
values = {}
|
||||||
|
|
||||||
|
while true do
|
||||||
|
-- car le réseau avec le meilleur rssi est toujours premier dans la liste
|
||||||
|
rssi = net.wf.scan(true)[0].rssi
|
||||||
|
-- si le tableau est plein alors on affiche la courbe
|
||||||
|
if #values == 10 then
|
||||||
|
for i=1,9 do
|
||||||
|
values[i] = values[i + 1]
|
||||||
|
end
|
||||||
|
values[10] = rssi
|
||||||
|
cls()
|
||||||
|
-- on dessine chaque partie de la courbe
|
||||||
|
for i=1,9 do
|
||||||
|
-- on dessine la partie de courbe
|
||||||
|
gdisplay.line(
|
||||||
|
{
|
||||||
|
i * width // 10,
|
||||||
|
(-values[i]) * (height - 10) // 100 + 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
(i + 1) * width // 10,
|
||||||
|
(-values[i + 1]) * (height - 10) // 100 + 5
|
||||||
|
}
|
||||||
|
)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
values[#values + 1] = rssi
|
||||||
|
end
|
||||||
|
tmr.delayms(500)
|
||||||
|
end
|
||||||
|
end
|
8
www/buzz.lua
Normal file
8
www/buzz.lua
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<?lua
|
||||||
|
buzz(pio.GPIO21, 1000)
|
||||||
|
?>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
38
www/index.lua
Normal file
38
www/index.lua
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>ESP 32 web page</title>
|
||||||
|
<link href="style.css" rel="stylesheet"/>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Hello, world!</h1>
|
||||||
|
<?lua
|
||||||
|
nb = nb + 1
|
||||||
|
console(nb.." Chargements")
|
||||||
|
print(nb.." Chargements")
|
||||||
|
?>
|
||||||
|
<h1>DHT22</h1>
|
||||||
|
<?lua
|
||||||
|
-- print("Temp: "..s:read("temperature").." Humi: "..s:read("humidity"))
|
||||||
|
?>
|
||||||
|
<h1>Led</h1>
|
||||||
|
<iframe name="fd" style="display:none"></iframe>
|
||||||
|
<form action="ledon.lua" target="fd">
|
||||||
|
<button type="submit">On</button>
|
||||||
|
</form>
|
||||||
|
<form action="ledoff.lua" target="fd">
|
||||||
|
<button type="submit">Off</button>
|
||||||
|
</form>
|
||||||
|
<h1>Buzzer</h1>
|
||||||
|
<form action="buzz.lua" target="fd">
|
||||||
|
<button type="submit">Buzz</button>
|
||||||
|
</form>
|
||||||
|
<h1>Networks</h1>
|
||||||
|
<ul>
|
||||||
|
<?lua
|
||||||
|
for i=0,#nets do
|
||||||
|
print("<li>"..nets[i].ssid.."</li>")
|
||||||
|
end
|
||||||
|
?>
|
||||||
|
</ul>
|
||||||
|
</body>
|
||||||
|
</html>
|
8
www/ledoff.lua
Normal file
8
www/ledoff.lua
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<?lua
|
||||||
|
ledoff()
|
||||||
|
?>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
9
www/ledon.lua
Normal file
9
www/ledon.lua
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<?lua
|
||||||
|
ledon()
|
||||||
|
?>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
|
0
www/style.css
Normal file
0
www/style.css
Normal file
Loading…
Add table
Add a link
Reference in a new issue