client: finish
This commit is contained in:
parent
769d801687
commit
322d64735b
2 changed files with 65 additions and 36 deletions
|
@ -1 +1,2 @@
|
||||||
dofile('client.lua')
|
dofile('client.lua')
|
||||||
|
|
||||||
|
|
96
client.lua
96
client.lua
|
@ -1,40 +1,58 @@
|
||||||
-- Description: Client MQTT pour jouer une mélodie sur un ESP8266
|
-- Description: Client MQTT pour jouer une mélodie sur un ESP32 lors d'une alerte
|
||||||
client = mqtt.client("AlarmeStarWars","localhost",1883,false)
|
|
||||||
|
-- Conexion au wifi
|
||||||
|
net.wf.setup(net.wf.mode.STA,"Jeremyatine","chocolatine")
|
||||||
|
net.wf.start()
|
||||||
|
print("Connexion au wifi...")
|
||||||
|
|
||||||
|
-- MQTT client
|
||||||
|
client = mqtt.client("student","mqtt.leizour.fr",8883,true)
|
||||||
|
print("Connexion au broker MQTT...")
|
||||||
|
|
||||||
client:connect("student","ensibs")
|
client:connect("student","ensibs")
|
||||||
|
print("Connecté au broker MQTT !")
|
||||||
|
|
||||||
-- Initialiser la broche GPIO2 pour la sortie
|
-- Initialiser la broche pio.GPIO4 pour la sortie
|
||||||
pio.pin.setdir(pio.OUTPUT, pio.GPIO2)
|
pio.pin.setdir(pio.OUTPUT, pio.GPIO4)
|
||||||
|
|
||||||
-- Définir la mélodie simplifiée Star Wars
|
|
||||||
local melody = {
|
|
||||||
{"A4", 500}, {"A4", 500}, {"F4", 350}, {"C5", 150},
|
|
||||||
{"A4", 500}, {"F4", 350}, {"C5", 150}, {"A4", 1000},
|
|
||||||
{"E5", 500}, {"E5", 500}, {"E5", 500},
|
|
||||||
{"F5", 350}, {"C5", 150}, {"G4", 500},
|
|
||||||
{"F4", 350}, {"C5", 150}, {"A4", 1000}
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Fréquences associées aux notes (en Hz)
|
-- Dictionnaire de fréquences pour les notes
|
||||||
local notes = {
|
local notes = {
|
||||||
["A4"] = 440, ["F4"] = 349, ["C5"] = 523,
|
["A4"] = 440, ["A4S"] = 466, ["B4"] = 494, ["C5"] = 523,
|
||||||
["E5"] = 659, ["F5"] = 698, ["G4"] = 392
|
["C5S"] = 554, ["D5"] = 587, ["D5S"] = 622, ["E5"] = 659,
|
||||||
|
["F5"] = 698, ["F5S"] = 740, ["G5"] = 784, ["G5S"] = 831,
|
||||||
|
["A5"] = 880
|
||||||
}
|
}
|
||||||
|
|
||||||
-- Allumer la broche GPIO2
|
-- Mélodie simplifiée du thème Star Wars
|
||||||
|
local melody = {
|
||||||
|
{"A4", 500}, {"A4", 500}, {"F5", 350}, {"C5", 150},
|
||||||
|
{"A4", 500}, {"F5", 350}, {"C5", 150}, {"A4", 1000},
|
||||||
|
|
||||||
|
{"E5", 500}, {"E5", 500}, {"E5", 500},
|
||||||
|
{"F5", 350}, {"C5", 150}, {"G5", 500},
|
||||||
|
{"F5", 350}, {"C5", 150}, {"A4", 1000},
|
||||||
|
|
||||||
|
{"A5", 500}, {"A4", 350}, {"A4", 150}, {"A5", 500},
|
||||||
|
{"G5", 250}, {"F5", 250}, {"E5", 500},
|
||||||
|
{"D5", 250}, {"C5", 250}, {"B4", 500},
|
||||||
|
{"C5", 250}, {"A4", 250}
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Allumer la broche (buzzer ON)
|
||||||
function ledon()
|
function ledon()
|
||||||
pio.pin.sethigh(pio.GPIO2)
|
pio.pin.sethigh(pio.GPIO4)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Éteindre la broche GPIO2
|
-- Éteindre la broche (buzzer OFF)
|
||||||
function ledoff()
|
function ledoff()
|
||||||
pio.pin.setlow(pio.GPIO2)
|
pio.pin.setlow(pio.GPIO4)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Jouer une note
|
-- Jouer une note : faire vibrer le buzzer à la bonne "fréquence"
|
||||||
function playTone(freq, duration)
|
function playTone(freq, duration)
|
||||||
local period = 1000000 / freq -- période en microsecondes
|
local period = 1000000 / freq -- Période d'oscillation en µs
|
||||||
local cycles = (duration * 1000) / period
|
local cycles = (duration * 1000) / period -- Nombre de cycles nécessaires
|
||||||
|
|
||||||
for i = 1, cycles do
|
for i = 1, cycles do
|
||||||
ledon()
|
ledon()
|
||||||
|
@ -44,20 +62,28 @@ function playTone(freq, duration)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Fonction pour jouer la mélodie
|
-- Fonction pour jouer toute la mélodie
|
||||||
function playMelody()
|
function playMelody()
|
||||||
|
local speed_factor = 0.5 -- 50% de la durée originale => musique plus rapide
|
||||||
|
|
||||||
for i, note in ipairs(melody) do
|
for i, note in ipairs(melody) do
|
||||||
local n, d = note[1], note[2]
|
local n, d = note[1], note[2] -- n = nom de la note, d = durée
|
||||||
local freq = notes[n] or 0
|
local freq = notes[n] or 0 -- chercher fréquence, ou 0 si silence
|
||||||
|
|
||||||
|
local adjusted_duration = d * speed_factor -- durée plus courte
|
||||||
|
|
||||||
if freq == 0 then
|
if freq == 0 then
|
||||||
-- Pause : silence
|
-- Silence
|
||||||
ledoff()
|
ledoff()
|
||||||
tmr.delay(d * 1000)
|
tmr.delay(adjusted_duration * 1000)
|
||||||
else
|
else
|
||||||
playTone(freq, d)
|
-- Jouer la note
|
||||||
|
playTone(freq, adjusted_duration)
|
||||||
end
|
end
|
||||||
-- Petite pause entre les notes
|
|
||||||
tmr.delay(50 * 1000)
|
-- Petite pause entre les notes, aussi plus courte
|
||||||
|
ledoff()
|
||||||
|
tmr.delay(50 * 1000 * speed_factor)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -67,15 +93,17 @@ end
|
||||||
-- Cette fonction sera appelée chaque fois qu'un message est reçu sur le canal souscrit
|
-- Cette fonction sera appelée chaque fois qu'un message est reçu sur le canal souscrit
|
||||||
function recp(mess)
|
function recp(mess)
|
||||||
if mess then
|
if mess then
|
||||||
playMelody() -- Jouer la mélodie à chaque message reçu
|
print("Message reçu : " .. mess) -- Afficher le message reçu
|
||||||
|
playMelody()
|
||||||
|
else
|
||||||
|
print("Message vide reçu.")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Connexion au broker MQTT et abonnement au canal
|
-- Connexion au broker MQTT et abonnement au canal
|
||||||
client:subscribe("NOM_CHANNEL", mqtt.QOS0, recp)
|
client:subscribe("alert", mqtt.QOS0, recp)
|
||||||
|
|
||||||
-- Boucle principale pour maintenir le script actif
|
-- Boucle principale pour maintenir le script actif
|
||||||
while true do
|
while true do
|
||||||
client:loop() -- Boucle pour traiter les messages MQTT
|
tmr.delay(1000) -- Attendre 1 seconde avant de vérifier à nouveau
|
||||||
tmr.delay(1000) -- Attendre 1 seconde entre les itérations
|
|
||||||
end
|
end
|
Loading…
Add table
Add a link
Reference in a new issue