diff --git a/autorun.lua b/autorun.lua index 7eb3cfe..1fa2846 100644 --- a/autorun.lua +++ b/autorun.lua @@ -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() diff --git a/buzz.lua b/buzz.lua new file mode 100644 index 0000000..6891c62 --- /dev/null +++ b/buzz.lua @@ -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 diff --git a/dht22.lua b/dht22.lua index 060a8d9..8811c12 100644 --- a/dht22.lua +++ b/dht22.lua @@ -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) diff --git a/leds.lua b/leds.lua new file mode 100644 index 0000000..6606228 --- /dev/null +++ b/leds.lua @@ -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 diff --git a/main.lua b/main.lua index b68ca51..d4d4eb8 100755 --- a/main.lua +++ b/main.lua @@ -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 \ No newline at end of file +end + +-- charge tout nos fichiers lua +dofile("leds.lua") +dofile("buzz.lua") +dofile("neopixel.lua") +dofile("encoder.lua") +dofile("dht22.lua") +dofile("screen.lua") diff --git a/neopixel.lua b/neopixel.lua index 7c4480d..a4021bf 100644 --- a/neopixel.lua +++ b/neopixel.lua @@ -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 diff --git a/out.lua b/out.lua index 0f0ed78..b786172 100644 --- a/out.lua +++ b/out.lua @@ -2,19 +2,19 @@ -- ce programme doit tourner sur un ESP32 sous LUARTOS -- 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.sethigh(pin) -- permet de mettre la tension au max end -- 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.setlow(pin) -- permet de mettre la tension au minimum 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 diff --git a/pwm.lua b/pwm.lua deleted file mode 100644 index 935c9dd..0000000 --- a/pwm.lua +++ /dev/null @@ -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 \ No newline at end of file diff --git a/screen.lua b/screen.lua new file mode 100644 index 0000000..dba744e --- /dev/null +++ b/screen.lua @@ -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)