More comments and informations

This commit is contained in:
Pierrick C 2018-08-04 12:03:11 +02:00
parent 4cc41e8e9a
commit b767ff9670

View File

@ -33,15 +33,14 @@ __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: