More comments and informations
This commit is contained in:
parent
4cc41e8e9a
commit
b767ff9670
@ -33,14 +33,13 @@ __version__ = 0.2
|
|||||||
##########
|
##########
|
||||||
# config #
|
# config #
|
||||||
##########
|
##########
|
||||||
print_data = True
|
print_data = True # Print data on USB UART / REPL output ?
|
||||||
send_json_data = True
|
send_json_data = True # Send data as JSON on second UART ?
|
||||||
backup_data = True
|
backup_data = True # Write data as CSV files on onboard SPI Flash ?
|
||||||
data_to_neopixel = True
|
data_to_neopixel = True # Display atmospheric data as color on onboard neopixel ?
|
||||||
gps_enable = True
|
gps_enable = True # Use GPS module ?
|
||||||
update_interval = const(10) # in seconds
|
update_interval = const(10) # Interval between data acquisition (in seconds)
|
||||||
send_json_data = True
|
datetime_format = "{:04}/{:02}/{:02}_{:02}:{:02}:{:02}" # Date/time format
|
||||||
datetime_format = "{:04}/{:02}/{:02}_{:02}:{:02}:{:02}"
|
|
||||||
neopixel_max_value =const(70) #max value instead of brightness to spare some mem
|
neopixel_max_value =const(70) #max value instead of brightness to spare some mem
|
||||||
|
|
||||||
#######################
|
#######################
|
||||||
@ -118,7 +117,7 @@ class Data:
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def json(self):
|
def json(self):
|
||||||
"""Serialized data to json-formatted string"""
|
"""Serialized data to compact json-formatted string"""
|
||||||
output = '{'
|
output = '{'
|
||||||
first_source = True
|
first_source = True
|
||||||
for source in self.data.keys():
|
for source in self.data.keys():
|
||||||
@ -150,15 +149,21 @@ class Data:
|
|||||||
* BLUE => humidity : max= 100%, mini=0%
|
* BLUE => humidity : max= 100%, mini=0%
|
||||||
* GREEN => pression : mini=960hPa, maxi = 1030hPa (range 70hPa)
|
* GREEN => pression : mini=960hPa, maxi = 1030hPa (range 70hPa)
|
||||||
"""
|
"""
|
||||||
|
# RED componant calculation from temperature data
|
||||||
|
# 10 is the min temperature, 25 is the range
|
||||||
|
# (10+25=35°C = max temperature)
|
||||||
red = int((self.data['BME']['temp']-10)*neopixel_max_value/25)
|
red = int((self.data['BME']['temp']-10)*neopixel_max_value/25)
|
||||||
if red > neopixel_max_value:
|
if red > neopixel_max_value:
|
||||||
red = neopixel_max_value
|
red = neopixel_max_value
|
||||||
if red < 0:
|
if red < 0:
|
||||||
red = 0
|
red = 0
|
||||||
|
|
||||||
|
# BLUE componant calculation: very simple! By definition relative
|
||||||
|
# humidity cannot be more than 100 or less than 0, physically
|
||||||
blue = int(self.data['BME']['hum']*neopixel_max_value/100)
|
blue = int(self.data['BME']['hum']*neopixel_max_value/100)
|
||||||
|
|
||||||
|
# GREEN component calculation : 960 is the minimum pressure and 70 is
|
||||||
|
# the range (960+70 = 1030hPa = max pressure)
|
||||||
green = int((self.data['BME']['press']-960)*neopixel_max_value/70)
|
green = int((self.data['BME']['press']-960)*neopixel_max_value/70)
|
||||||
if green > neopixel_max_value:
|
if green > neopixel_max_value:
|
||||||
green = neopixel_max_value
|
green = neopixel_max_value
|
||||||
@ -181,6 +186,7 @@ class Data:
|
|||||||
except OSError as e:
|
except OSError as e:
|
||||||
print("Err {}: readonly".format(e))
|
print("Err {}: readonly".format(e))
|
||||||
backup_data = False #to avoid trying again till next reset
|
backup_data = False #to avoid trying again till next reset
|
||||||
|
# Turn onboard led on to indicate read-only error
|
||||||
led13.value = True
|
led13.value = True
|
||||||
|
|
||||||
#############
|
#############
|
||||||
@ -253,15 +259,17 @@ bme280 = Adafruit_BME280_I2C(i2c, address=0x76)
|
|||||||
# Battery voltage
|
# Battery voltage
|
||||||
vbat = AnalogIn(microcontroller.pin.PA07)
|
vbat = AnalogIn(microcontroller.pin.PA07)
|
||||||
|
|
||||||
|
#Set the pin to control the power to GPS module
|
||||||
gps_en_pin = DigitalInOut(microcontroller.pin.PB02)
|
gps_en_pin = DigitalInOut(microcontroller.pin.PB02)
|
||||||
gps_en_pin.direction = Direction.OUTPUT
|
gps_en_pin.direction = Direction.OUTPUT
|
||||||
|
|
||||||
|
#Set the pin N°13 to use the onboard LED as read-only/read-write indicator
|
||||||
led13 = DigitalInOut(microcontroller.pin.PA17)
|
led13 = DigitalInOut(microcontroller.pin.PA17)
|
||||||
led13.direction = Direction.OUTPUT
|
led13.direction = Direction.OUTPUT
|
||||||
led13.value = False
|
led13.value = False
|
||||||
|
|
||||||
# GPS on FeatherWing board
|
# Set GPS module on FeatherWing board
|
||||||
gps_en_pin.value = not gps_enable
|
gps_en_pin.value = not gps_enable #Set enable pin high to disable GPS module
|
||||||
if gps_enable:
|
if gps_enable:
|
||||||
gps_uart = UART(microcontroller.pin.PA10, microcontroller.pin.PA11,
|
gps_uart = UART(microcontroller.pin.PA10, microcontroller.pin.PA11,
|
||||||
baudrate=9600, timeout=3000)
|
baudrate=9600, timeout=3000)
|
||||||
@ -270,12 +278,13 @@ if gps_enable:
|
|||||||
gps.send_command('PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0')
|
gps.send_command('PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0')
|
||||||
gps.send_command('PMTK220,1000') # 1000 ms refresh rate
|
gps.send_command('PMTK220,1000') # 1000 ms refresh rate
|
||||||
|
|
||||||
# second UART to communicate with raspberry pi GPIO
|
# Second UART to communicate with raspberry pi (throught GPIO)
|
||||||
if send_json_data:
|
if send_json_data:
|
||||||
rpi_uart = UART(microcontroller.pin.PB10, microcontroller.pin.PB11,
|
rpi_uart = UART(microcontroller.pin.PB10, microcontroller.pin.PB11,
|
||||||
baudrate=115200, timeout=2000)
|
baudrate=115200, timeout=2000)
|
||||||
|
|
||||||
# Integrated Neopixel
|
# Set onboard Neopixel : used as atmo data output
|
||||||
|
# brightness is fixed to 1 to spare some memory. Use neopixel_max_value instead
|
||||||
if data_to_neopixel:
|
if data_to_neopixel:
|
||||||
pixel = neopixel.NeoPixel(microcontroller.pin.PA06, 1, brightness=1)
|
pixel = neopixel.NeoPixel(microcontroller.pin.PA06, 1, brightness=1)
|
||||||
else:
|
else:
|
||||||
@ -284,15 +293,18 @@ else:
|
|||||||
pixel[0] = (0,0,0)
|
pixel[0] = (0,0,0)
|
||||||
pixel = None
|
pixel = None
|
||||||
|
|
||||||
|
#Finally check if data directories exist
|
||||||
check_data_dir()
|
check_data_dir()
|
||||||
|
|
||||||
#############
|
#############
|
||||||
# Main loop #
|
# Main loop #
|
||||||
#############
|
#############
|
||||||
|
|
||||||
|
#Create the Data object
|
||||||
data = Data()
|
data = Data()
|
||||||
last_update = time.monotonic()
|
|
||||||
|
|
||||||
|
#Init timer
|
||||||
|
last_update = time.monotonic()
|
||||||
while True:
|
while True:
|
||||||
|
|
||||||
if gps_enable:
|
if gps_enable:
|
||||||
|
Loading…
Reference in New Issue
Block a user