Lightning! Lightning detektorn för Raspberry Pi väderstation (uppdaterad) (4 / 6 steg)
Steg 4: Programvaran för Lightning detektorn
Efter ganska sökandet och leker med ett antal paket, hittade vi ett bra paket av Phil Fenstermacher. Med en liten busar runt och ställa in avbrott, fick vi programvaran att fungera.
Programvaran för WeatherPi, som innehåller AS3935 programvara finns på github.com.
Här är installationen mjukvaran:
################
# ad3935 uppsättning upp Lightning detektor
# slå I2CBus 2 på
tca9545.write_control_register(TCA9545_CONFIG_BUS2)
Time.Sleep(0.003)
#tca9545.write_control_register(TCA9545_CONFIG_BUS0)
#time.sleep(0.003)
as3935 = RPi_AS3935 (adress = 0x03, buss = 1)
as3935.set_indoors(false)
as3935.set_noise_floor(0)
#as3935.calibrate(tun_cap=0x0F)
as3935.Calibrate(tun_cap=0x05)
as3935LastInterrupt = 0
as3935LightningCount = 0
as3935LastDistance = 0
as3935LastStatus = ""
as3935Interrupt = False
# slå I2CBus 0 på
tca9545.write_control_register(TCA9545_CONFIG_BUS0)
Time.Sleep(0.003)
Nästa behandling programvaran för avbrotten.
def process_as3935_interrupt():
globala as3935Interrupt
Global as3935, as3935LastInterrupt, as3935LastDistance, as3935LastStatus
as3935Interrupt = False
skriva ut "behandling avbrott från as3935"
# slå I2CBus 0 på
#tca9545.write_control_register(TCA9545_CONFIG_BUS0)
# slå I2CBus 2 på
tca9545.write_control_register(TCA9545_CONFIG_BUS2)
Time.Sleep(0.003)
anledning = as3935.get_interrupt()
as3935LastInterrupt = anledning
om anledning == 0x00:
as3935LastStatus = "Falska avbryta"
Elif anledning == 0x01:
as3935LastStatus = "buller golvet för låg. Justera"
as3935.raise_noise_floor()
Elif anledning == 0x04:
as3935LastStatus = "Orosstiftare upptäckt - maskering"
as3935.set_mask_disturber(true)
Elif anledning == 0x08:
nu = datetime.now () .strftime ('% H: % m %S - % Y/%m/%d')
avståndet = as3935.get_distance()
as3935LastDistance = avstånd
as3935LastStatus = "Lightning upptäckta" + str(distance) + "km bort. (%s) "% nu
pclogging.log (pclogging.INFO, __name__, "Lightning upptäckta" + str(distance) + "km bort. (%s) "% nu)
skriva ut "senast avbryta = 0 x % x: %s" % (as3935LastInterrupt, as3935LastStatus)
tca9545.write_control_register(TCA9545_CONFIG_BUS0)
Time.Sleep(0.003)
Avbrottshanterare. Kort och koncist, som avbryta hanterare ska vara.
def handle_as3935_interrupt(channel):
globala as3935Interrupt
skriva ut "as3935 avbryta"
as3935Interrupt = sant
Ställa in Raspberry Pi GPIOs få avbrott.
#as3935pin = 18
as3935pin = 22
GPIO.setup (as3935pin, GPIO. I)
#GPIO.setup (as3935pin, GPIO. IN, pull_up_down = GPIO. PUD_UP)
GPIO.add_event_detect (as3935pin, GPIO. STIGANDE, återuppringning = handle_as3935_interrupt)
Och rapportering programvara för att läsa avbrotten.
# process avbryter från blixtnedslag
om (as3935Interrupt == True):
försök:
process_as3935_interrupt()
utom:
skriva ut "undantag - as3935 I2C fungerade inte"