Merge branch 'master' of github.com:pimoroni/enviroplus-python
authorPhil Howard <phil@gadgetoid.com>
Tue, 20 Aug 2019 15:36:17 +0000 (16:36 +0100)
committerPhil Howard <phil@gadgetoid.com>
Tue, 20 Aug 2019 15:36:17 +0000 (16:36 +0100)
examples/adc.py
examples/all-in-one-no-pm.py
examples/all-in-one.py
examples/compensated-temperature.py
examples/gas.py
examples/lcd.py
examples/light.py
examples/luftdaten.py
examples/particulates.py
examples/weather.py

index c4cf45cf8f0d598e2fd88ea93f10812b874de737..82bda4150b38a0c5be3c557b9a13bce21a24bf8f 100755 (executable)
@@ -2,8 +2,14 @@
 
 import time
 from enviroplus import gas
+import logging
 
-print("""adc.py - Print readings from the MICS6814 Gas sensor.
+logging.basicConfig(
+    format='%(asctime)s.%(msecs)03d %(levelname)-8s %(message)s',
+    level=logging.INFO,
+    datefmt='%Y-%m-%d %H:%M:%S')
+
+logging.info("""adc.py - Print readings from the MICS6814 Gas sensor.
 
 Press Ctrl+C to exit!
 
@@ -15,7 +21,7 @@ gas.set_adc_gain(4.096)
 try:
     while True:
         readings = gas.read_all()
-        print(readings)
+        logging.info(readings)
         time.sleep(1.0)
 except KeyboardInterrupt:
     pass
index 367ebeb0854926c4ad5bf6d145444c85b3a18172..54860126bdc3ee37aa02d367f6f9f83e3755372d 100755 (executable)
@@ -13,8 +13,14 @@ from subprocess import PIPE, Popen
 from PIL import Image
 from PIL import ImageDraw
 from PIL import ImageFont
+import logging
 
-print("""all-in-one.py - Displays readings from all of Enviro plus' sensors
+logging.basicConfig(
+    format='%(asctime)s.%(msecs)03d %(levelname)-8s %(message)s',
+    level=logging.INFO,
+    datefmt='%Y-%m-%d %H:%M:%S')
+
+logging.info("""all-in-one.py - Displays readings from all of Enviro plus' sensors
 Press Ctrl+C to exit!
 """)
 
@@ -58,7 +64,7 @@ def display_text(variable, data, unit):
                - min(values[variable]) + 1) for v in values[variable]]
     # Format the variable name and value
     message = "{}: {:.1f} {}".format(variable[:4], data, unit)
-    print(message)
+    logging.info(message)
     draw.rectangle((0, 0, WIDTH, HEIGHT), (255, 255, 255))
     for i in range(len(colours)):
         # Convert the values to colours from red to blue
@@ -78,7 +84,7 @@ def display_text(variable, data, unit):
 
 # Get the temperature of the CPU for compensation
 def get_cpu_temperature():
-    process = Popen(['vcgencmd', 'measure_temp'], stdout=PIPE)
+    process = Popen(['vcgencmd', 'measure_temp'], stdout=PIPE, universal_newlines=True)
     output, _error = process.communicate()
     return float(output[output.index('=') + 1:output.rindex("'")])
 
@@ -87,7 +93,7 @@ def get_cpu_temperature():
 # temperature down, and increase to adjust up
 factor = 0.8
 
-cpu_temps = [0] * 5
+cpu_temps = [get_cpu_temperature()] * 5
 
 delay = 0.5  # Debounce the proximity tap
 mode = 0  # The starting mode
@@ -121,7 +127,7 @@ try:
 
         # One mode for each variable
         if mode == 0:
-            variable = "temperature"
+            variable = "temperature"
             unit = "C"
             cpu_temp = get_cpu_temperature()
             # Smooth out with some averaging to decrease jitter
@@ -129,49 +135,49 @@ try:
             avg_cpu_temp = sum(cpu_temps) / float(len(cpu_temps))
             raw_temp = bme280.get_temperature()
             data = raw_temp - ((avg_cpu_temp - raw_temp) / factor)
-            display_text(variable, data, unit)
+            display_text(variables[mode], data, unit)
 
         if mode == 1:
-            variable = "pressure"
+            variable = "pressure"
             unit = "hPa"
             data = bme280.get_pressure()
-            display_text(variable, data, unit)
+            display_text(variables[mode], data, unit)
 
         if mode == 2:
-            variable = "humidity"
+            variable = "humidity"
             unit = "%"
             data = bme280.get_humidity()
-            display_text(variable, data, unit)
+            display_text(variables[mode], data, unit)
 
         if mode == 3:
-            variable = "light"
+            variable = "light"
             unit = "Lux"
             if proximity < 10:
                 data = ltr559.get_lux()
             else:
                 data = 1
-            display_text(variable, data, unit)
+            display_text(variables[mode], data, unit)
 
         if mode == 4:
-            variable = "oxidised"
+            variable = "oxidised"
             unit = "kO"
             data = gas.read_all()
             data = data.oxidising / 1000
-            display_text(variable, data, unit)
+            display_text(variables[mode], data, unit)
 
         if mode == 5:
-            variable = "reduced"
+            variable = "reduced"
             unit = "kO"
             data = gas.read_all()
             data = data.reducing / 1000
-            display_text(variable, data, unit)
+            display_text(variables[mode], data, unit)
 
         if mode == 6:
-            variable = "nh3"
+            variable = "nh3"
             unit = "kO"
             data = gas.read_all()
             data = data.nh3 / 1000
-            display_text(variable, data, unit)
+            display_text(variables[mode], data, unit)
 
 # Exit cleanly
 except KeyboardInterrupt:
index 8ba76815b25347a48d70f8d3d26dfdcdf90b319e..eef99c36b7eea36846073685af9f371823e5642b 100755 (executable)
@@ -8,14 +8,20 @@ import ST7735
 import ltr559
 
 from bme280 import BME280
-from pms5003 import PMS5003
+from pms5003 import PMS5003, ReadTimeoutError as pmsReadTimeoutError
 from enviroplus import gas
 from subprocess import PIPE, Popen
 from PIL import Image
 from PIL import ImageDraw
 from PIL import ImageFont
+import logging
 
-print("""all-in-one.py - Displays readings from all of Enviro plus' sensors
+logging.basicConfig(
+    format='%(asctime)s.%(msecs)03d %(levelname)-8s %(message)s',
+    level=logging.INFO,
+    datefmt='%Y-%m-%d %H:%M:%S')
+
+logging.info("""all-in-one.py - Displays readings from all of Enviro plus' sensors
 
 Press Ctrl+C to exit!
 
@@ -64,7 +70,7 @@ def display_text(variable, data, unit):
                - min(values[variable]) + 1) for v in values[variable]]
     # Format the variable name and value
     message = "{}: {:.1f} {}".format(variable[:4], data, unit)
-    print(message)
+    logging.info(message)
     draw.rectangle((0, 0, WIDTH, HEIGHT), (255, 255, 255))
     for i in range(len(colours)):
         # Convert the values to colours from red to blue
@@ -84,7 +90,7 @@ def display_text(variable, data, unit):
 
 # Get the temperature of the CPU for compensation
 def get_cpu_temperature():
-    process = Popen(['vcgencmd', 'measure_temp'], stdout=PIPE)
+    process = Popen(['vcgencmd', 'measure_temp'], stdout=PIPE, universal_newlines=True)
     output, _error = process.communicate()
     return float(output[output.index('=') + 1:output.rindex("'")])
 
@@ -93,10 +99,10 @@ def get_cpu_temperature():
 # temperature down, and increase to adjust up
 factor = 0.8
 
-cpu_temps = [0] * 5
+cpu_temps = [get_cpu_temperature()] * 5
 
 delay = 0.5  # Debounce the proximity tap
-mode = 0  # The starting mode
+mode = 0     # The starting mode
 last_page = 0
 light = 1
 
@@ -130,7 +136,7 @@ try:
 
         # One mode for each variable
         if mode == 0:
-            variable = "temperature"
+            variable = "temperature"
             unit = "C"
             cpu_temp = get_cpu_temperature()
             # Smooth out with some averaging to decrease jitter
@@ -138,70 +144,82 @@ try:
             avg_cpu_temp = sum(cpu_temps) / float(len(cpu_temps))
             raw_temp = bme280.get_temperature()
             data = raw_temp - ((avg_cpu_temp - raw_temp) / factor)
-            display_text(variable, data, unit)
+            display_text(variables[mode], data, unit)
 
         if mode == 1:
-            variable = "pressure"
+            variable = "pressure"
             unit = "hPa"
             data = bme280.get_pressure()
-            display_text(variable, data, unit)
+            display_text(variables[mode], data, unit)
 
         if mode == 2:
-            variable = "humidity"
+            variable = "humidity"
             unit = "%"
             data = bme280.get_humidity()
-            display_text(variable, data, unit)
+            display_text(variables[mode], data, unit)
 
         if mode == 3:
-            variable = "light"
+            variable = "light"
             unit = "Lux"
             if proximity < 10:
                 data = ltr559.get_lux()
             else:
                 data = 1
-            display_text(variable, data, unit)
+            display_text(variables[mode], data, unit)
 
         if mode == 4:
-            variable = "oxidised"
+            variable = "oxidised"
             unit = "kO"
             data = gas.read_all()
             data = data.oxidising / 1000
-            display_text(variable, data, unit)
+            display_text(variables[mode], data, unit)
 
         if mode == 5:
-            variable = "reduced"
+            variable = "reduced"
             unit = "kO"
             data = gas.read_all()
             data = data.reducing / 1000
-            display_text(variable, data, unit)
+            display_text(variables[mode], data, unit)
 
         if mode == 6:
-            variable = "nh3"
+            variable = "nh3"
             unit = "kO"
             data = gas.read_all()
             data = data.nh3 / 1000
-            display_text(variable, data, unit)
+            display_text(variables[mode], data, unit)
 
         if mode == 7:
-            variable = "pm1"
+            variable = "pm1"
             unit = "ug/m3"
-            data = pms5003.read()
-            data = data.pm_ug_per_m3(1.0)
-            display_text(variable, data, unit)
+            try:
+                data = pms5003.read()
+            except pmsReadTimeoutError:
+                logging.warn("Failed to read PMS5003")
+            else:
+                data = data.pm_ug_per_m3(1.0)
+                display_text(variables[mode], data, unit)
 
         if mode == 8:
-            variable = "pm25"
+            variable = "pm25"
             unit = "ug/m3"
-            data = pms5003.read()
-            data = data.pm_ug_per_m3(2.5)
-            display_text(variable, data, unit)
+            try:
+                data = pms5003.read()
+            except pmsReadTimeoutError:
+                logging.warn("Failed to read PMS5003")
+            else:
+                data = data.pm_ug_per_m3(2.5)
+                display_text(variables[mode], data, unit)
 
         if mode == 9:
-            variable = "pm10"
+            variable = "pm10"
             unit = "ug/m3"
-            data = pms5003.read()
-            data = data.pm_ug_per_m3(10)
-            display_text(variable, data, unit)
+            try:
+                data = pms5003.read()
+            except pmsReadTimeoutError:
+                logging.warn("Failed to read PMS5003")
+            else:
+                data = data.pm_ug_per_m3(10)
+                display_text(variables[mode], data, unit)
 
 # Exit cleanly
 except KeyboardInterrupt:
index 7d0d0f1bd565821c26cd8af7ee12813b001b3c0f..74b6babf103cf63c3b98da31c733a83f62a54e90 100755 (executable)
@@ -8,7 +8,14 @@ try:
 except ImportError:
     from smbus import SMBus
 
-print("""compensated-temperature.py - Use the CPU temperature
+import logging
+
+logging.basicConfig(
+    format='%(asctime)s.%(msecs)03d %(levelname)-8s %(message)s',
+    level=logging.INFO,
+    datefmt='%Y-%m-%d %H:%M:%S')
+
+logging.info("""compensated-temperature.py - Use the CPU temperature
 to compensate temperature readings from the BME280 sensor.
 Method adapted from Initial State's Enviro pHAT review:
 https://medium.com/@InitialState/tutorial-review-enviro-phat-for-raspberry-pi-4cd6d8c63441
@@ -33,7 +40,7 @@ def get_cpu_temperature():
 # temperature down, and increase to adjust up
 factor = 0.8
 
-cpu_temps = [0] * 5
+cpu_temps = [get_cpu_temperature()] * 5
 
 while True:
     cpu_temp = get_cpu_temperature()
@@ -42,5 +49,5 @@ while True:
     avg_cpu_temp = sum(cpu_temps) / float(len(cpu_temps))
     raw_temp = bme280.get_temperature()
     comp_temp = raw_temp - ((avg_cpu_temp - raw_temp) / factor)
-    print("Compensated temperature: {:05.2f} *C".format(comp_temp))
+    logging.info("Compensated temperature: {:05.2f} *C".format(comp_temp))
     time.sleep(1.0)
index faf6eac84611944ec9b908cefeb7b47e1e31518d..2f849442b8bf61a253a1083dd2ef561f73ba70c7 100755 (executable)
@@ -2,8 +2,14 @@
 
 import time
 from enviroplus import gas
+import logging
 
-print("""gas.py - Print readings from the MICS6814 Gas sensor.
+logging.basicConfig(
+    format='%(asctime)s.%(msecs)03d %(levelname)-8s %(message)s',
+    level=logging.INFO,
+    datefmt='%Y-%m-%d %H:%M:%S')
+
+logging.info("""gas.py - Print readings from the MICS6814 Gas sensor.
 
 Press Ctrl+C to exit!
 
@@ -12,7 +18,7 @@ Press Ctrl+C to exit!
 try:
     while True:
         readings = gas.read_all()
-        print(readings)
+        logging.info(readings)
         time.sleep(1.0)
 except KeyboardInterrupt:
     pass
index aa0e193604388cdd3ec8ac2de8b286b2bef639fc..7e50c94eb68c5a2f6788c5c0d9810100860a683e 100755 (executable)
@@ -2,8 +2,14 @@
 
 import ST7735
 from PIL import Image, ImageDraw, ImageFont
+import logging
 
-print("""lcd.py - Hello, World! example on the 0.96" LCD.
+logging.basicConfig(
+    format='%(asctime)s.%(msecs)03d %(levelname)-8s %(message)s',
+    level=logging.INFO,
+    datefmt='%Y-%m-%d %H:%M:%S')
+
+logging.info("""lcd.py - Hello, World! example on the 0.96" LCD.
 
 Press Ctrl+C to exit!
 
index 216477a766db19768e9d92683f7984bc664f3fac..3442fb489d0ac677636255458a2029a9c5511ad7 100755 (executable)
@@ -2,8 +2,14 @@
 
 import time
 import ltr559
+import logging
 
-print("""light.py - Print readings from the LTR559 Light & Proximity sensor.
+logging.basicConfig(
+    format='%(asctime)s.%(msecs)03d %(levelname)-8s %(message)s',
+    level=logging.INFO,
+    datefmt='%Y-%m-%d %H:%M:%S')
+
+logging.info("""light.py - Print readings from the LTR559 Light & Proximity sensor.
 
 Press Ctrl+C to exit!
 
@@ -13,7 +19,7 @@ try:
     while True:
         lux = ltr559.get_lux()
         prox = ltr559.get_proximity()
-        print("""Light: {:05.02f} Lux
+        logging.info("""Light: {:05.02f} Lux
 Proximity: {:05.02f}
 """.format(lux, prox))
         time.sleep(1.0)
index 27478c590c06088cea81334723a92417de559359..9995914e23d71144c9f1e99ff11c58f7baaf4e69 100755 (executable)
@@ -72,8 +72,9 @@ def read_values():
 
 # Get CPU temperature to use for compensation
 def get_cpu_temperature():
-    process = Popen(['vcgencmd', 'measure_temp'], stdout=PIPE)
+    process = Popen(['vcgencmd', 'measure_temp'], stdout=PIPE, universal_newlines=True)
     output, _error = process.communicate()
+    output = output.decode()
     return float(output[output.index('=') + 1:output.rindex("'")])
 
 
index e71ca5d96f78782f5237134e1dffd3df51dfcf7e..9aa9c37814a0bc3f6d34bf03f1df52d58fa3408f 100755 (executable)
@@ -2,8 +2,14 @@
 
 import time
 from pms5003 import PMS5003, ReadTimeoutError
+import logging
 
-print("""particulates.py - Print readings from the PMS5003 particulate sensor.
+logging.basicConfig(
+    format='%(asctime)s.%(msecs)03d %(levelname)-8s %(message)s',
+    level=logging.INFO,
+    datefmt='%Y-%m-%d %H:%M:%S')
+
+logging.info("""particulates.py - Print readings from the PMS5003 particulate sensor.
 
 Press Ctrl+C to exit!
 
@@ -16,7 +22,7 @@ try:
     while True:
         try:
             readings = pms5003.read()
-            print(readings)
+            logging.info(readings)
             time.sleep(1.0)
         except ReadTimeoutError:
             pms5003 = PMS5003()
index 17aba2041ac13d819ff23f3f431cf6b8f395702f..503602104ced2a691e2b70eff06d51b54c7f7a37 100755 (executable)
@@ -8,7 +8,14 @@ try:
 except ImportError:
     from smbus import SMBus
 
-print("""weather.py - Print readings from the BME280 weather sensor.
+import logging
+
+logging.basicConfig(
+    format='%(asctime)s.%(msecs)03d %(levelname)-8s %(message)s',
+    level=logging.INFO,
+    datefmt='%Y-%m-%d %H:%M:%S')
+
+logging.info("""weather.py - Print readings from the BME280 weather sensor.
 
 Press Ctrl+C to exit!
 
@@ -21,7 +28,7 @@ while True:
     temperature = bme280.get_temperature()
     pressure = bme280.get_pressure()
     humidity = bme280.get_humidity()
-    print("""Temperature: {:05.2f} *C
+    logging.info("""Temperature: {:05.2f} *C
 Pressure: {:05.2f} hPa
 Relative humidity: {:05.2f} %
 """.format(temperature, pressure, humidity))