This commit is contained in:
Lukian 2024-10-23 20:08:41 +02:00
parent 068d3a6f70
commit e92123ab22
9 changed files with 328 additions and 174 deletions

View file

@ -1,7 +1,6 @@
-- charge le fichier principal
dofile('out.lua')
dofile("main.lua")
dofile("neopixel.lua")
dofile("encoder.lua")
-- affiche la température du CPU
printTemp()

27
buzz.lua Normal file
View 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

View file

@ -1,4 +1,4 @@
-- écrit par Lukian Leizour le 22/10/2024
-- écrit par Lukian Leizour le 22/10/2024x
function print_temp()
s = sensor.attach("DHT22", pio.GPIO18)

135
leds.lua Normal file
View 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

View file

@ -1,10 +1,28 @@
-- charge les fonctions du fichier out.lua
dofile("out.lua")
dofile("neopixel.lua")
dofile("encoder.lua")
dofile("dht22.lua")
-- programme principal qui charge les fonctions des autres programmes
-- 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
function printTemp()
print("Température du CPU :", cpu.temperature())
end
-- charge tout nos fichiers lua
dofile("leds.lua")
dofile("buzz.lua")
dofile("neopixel.lua")
dofile("encoder.lua")
dofile("dht22.lua")
dofile("screen.lua")

View file

@ -25,19 +25,6 @@ function feux()
end
end
function wheelRGB(pos)
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
function arc()
neo = neopixel.attach(neopixel.WS2812B, pio.GPIO18, 8)
for i=0,7 do

116
out.lua
View file

@ -14,7 +14,7 @@ function pinoff (pin) -- pin : la patte sur laquelle la led est branchée
end
-- 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
pinon(pin) -- appel de la fonction ledon
tmr.delayms(delay) -- le programme attend en fonction du délai donné
@ -22,117 +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é
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()
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'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

35
pwm.lua
View file

@ -1,35 +0,0 @@
-- écrit le 12/10/2024 par Lukian Leizour
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

137
screen.lua Normal file
View file

@ -0,0 +1,137 @@
-- introduction IOT / UBS
-- (c) Gildas Menier
-- gildas.menier@univ-ubs.fr
-- contient les définitions de
-- cls()
-- console()
-- changer les valeurs qui suivent en fonction de
-- vos branchements
-- GPIO pour I2C
local sda = 18
local scl = 19
-- adresse ecran I2C
i2cadd = 0x3C
-- configuration
local reset16 = false -- reset ecran
i2c.setpins(0,sda,scl) -- config i2C
-- ecran
if reset16 then -- reset pour l'ecran si necessaire
pio.pin.setdir(pio.OUTPUT, pio.GPIO16);
pio.pin.setlow(pio.GPIO16)
tmr.delayms(50);
pio.pin.sethigh(pio.GPIO16)
tmr.delayms(50);
end
pcall( function() -- pas d'erreur
gdisplay.attach(gdisplay.SSD1306_128_64, gdisplay.LANDSCAPE, false, i2cadd)
gdisplay.clear()
gdisplay.setfont(gdisplay.FONT_LCD)
gdisplay.setwrap(false)
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
function fonts()
cls()
gdisplay.setfont(gdisplay.FONT_DEFAULT)
console("DEFAULT")
tmr.delay(5); cls()
gdisplay.setfont(gdisplay.FONT_DEJAVU18)
console("DEJAVU18")
tmr.delay(5); cls()
gdisplay.setfont(gdisplay.FONT_DEJAVU24)
console("DEJAVU24")
tmr.delay(5); cls()
gdisplay.setfont(gdisplay.FONT_UBUNTU16)
console("UBUNTU16")
tmr.delay(5); cls()
gdisplay.setfont(gdisplay.FONT_COMIC24)
console("COMIC24")
tmr.delay(5); cls()
gdisplay.setfont(gdisplay.FONT_TOONEY32)
console("TOONEY32")
tmr.delay(5); cls()
gdisplay.setfont(gdisplay.FONT_MINYA24)
console("MINYA24")
tmr.delay(5); cls()
gdisplay.setfont(gdisplay.FONT_7SEG)
console("7SEG")
tmr.delay(5); cls()
gdisplay.setfont(gdisplay.FONT_LCD)
console("LCD")
end
pcall( function()
cls()
console(">")
end)