Citrouille détecteur de WiFi
Ce soir, c’est Halloween. Déguisements, bonbons, sorts et … citrouilles.
Pour illuminer la récolte, nous avons eu l’idée de rajouter des yeux lumineux à un panier en plastique en forme de citrouille.

Mais pour rajouter un peu de vie à cette citrouille, les yeux vont clignoter au rythme des signaux WiFi environnants.
La maquette
Le montage lui même est rudimentaire :
- un ESP8266,
- une résistance de 220 Ohm,
- deux leds,
- et une batterie d’appoint pour l’autonomie.

Pour plus d’évolutivité, les LEDs sont controlables indépendamment.


Pour le code, on fait simple : un script Lua pour NodeMCU :
-- Settings
-- wifi.PHYMODE_B 802.11b, More range, Low Transfer rate, More current draw
-- wifi.PHYMODE_G 802.11g, Medium range, Medium transfer rate, Medium current draw
-- wifi.PHYMODE_N 802.11n, Least range, Fast transfer rate, Least current draw
wifi_signal_mode = wifi.PHYMODE_N
left_pin = 2
right_pin = 3
maxspeed = 50
minspeed = 800
maxrssi = -40
minrssi = -100
function compute_speed(rssi)
speed=maxspeed
-- Normalize
theval=rssi
if rssi < minrssi then
theval=minrssi
end
if rssi > maxrssi then
theval=maxrssi
end
speed=minspeed+(theval-minrssi)*(maxspeed-minspeed)/(maxrssi-minrssi)
return speed
end
-- max strength
current_rssi=0
function findmax(t) -- (SSID : Authmode, RSSI, BSSID, Channel)
max=-200
for ssid,v in pairs(t) do
local authmode, rssi, bssid, channel = string.match(v, "([^,]+),([^,]+),([^,]+),([^,]+)")
rssi = tonumber(rssi)
if rssi > max then
max = rssi
end
end
print("MAX=",max)
current_rssi = max
speed=compute_speed(max)
print("SPEED=",speed)
end
-- Init
-- Connect to the wifi network
wifi.setmode(wifi.STATION)
wifi.setphymode(wifi_signal_mode)
rssi_alarm=1
tmr.alarm(rssi_alarm,5000,1,function()
wifi.sta.getap(findmax)
end)
-- GPIO
gpio.mode(left_pin, gpio.OUTPUT)
gpio.mode(right_pin, gpio.OUTPUT)
-- Run
blink_alarm=0
tmr.stop(blink_alarm)
tmr.unregister(blink_alarm)
lighton=0
blinkspeed=minspeed
function blinking()
if lighton==0 then
lighton=1
gpio.write(left_pin, gpio.HIGH)
gpio.write(right_pin, gpio.HIGH)
else
lighton=0
gpio.write(left_pin, gpio.LOW)
gpio.write(right_pin, gpio.LOW)
end
tmr.stop(blink_alarm)
tmr.unregister(blink_alarm)
blinkspeed=compute_speed(current_rssi)
tmr.alarm(blink_alarm,blinkspeed,1,blinking)
end
tmr.alarm(blink_alarm,blinkspeed,1,blinking)