Skip to content

set_iaq_humidity #14

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jan 9, 2019
Merged

set_iaq_humidity #14

merged 2 commits into from
Jan 9, 2019

Conversation

Dmole
Copy link
Contributor

@Dmole Dmole commented Jan 8, 2019

set_iaq_humidity

@ladyada
Copy link
Member

ladyada commented Jan 8, 2019

hiya, thanks for the PR! please fix the travis complaint (its a small pylint fix) and if you could, also include an example script that shows how people could use this capability - that would be amazing :)

@caternuson
Copy link

caternuson commented Jan 8, 2019

Is this also readable? If so, add a getter and then also provide @property style access for both. You can have those simply call your getter/setter funcs. This will allow the syntax below.

To set:

sgp30.iaq_humidity = 23.0

To query:

print(sgp30.iaq_humidity)

@Dmole
Copy link
Contributor Author

Dmole commented Jan 8, 2019

@Dmole
Copy link
Contributor Author

Dmole commented Jan 8, 2019

...example script that shows how people could use this capability...

Sampling every second is required to prevent endless clime of SGP30 values but time.sleep(1) is sub optimal because it does not account for operation time and non-real-time-operating-systems, but python is bloated so I may port the code before correcting the timing.

To use the humidity one must convert it from relative-humidity to grams (otherwise SGP30 values go crazy);

def rh2gpm3(temp, relativeHumidity, pres):
	kuniv = 8.314472471220217
	MH2O = 18.01534
	airdens = pres * 100.0 / kuniv / (temp + 273.15)
	psat = h2opsat(temp)
	ph2o = psat * relativeHumidity / 100
	vmr = ph2o / pres
	a = vmr * MH2O * airdens
	return a 

def h2opsat(t):
	pwat = 6.107799961 + t * (4.436518521e-1 + t * (1.428945805e-2 + t * (2.650648471e-4 + t * (3.031240396e-6 + t * (2.034080948e-8 + t * 6.136820929e-11)))))
	pice = 6.109177956 + t * (5.034698970e-1 + t * (1.886013408e-2 + t * (4.176223716e-4 + t * (5.824720280e-6 + t * (4.838803174e-8 + t * 1.838826904e-10)))))
	return min(pwat, pice)

That code was ported from https://www.cactus2000.de/uk/unit/pophum.shtml

While on the path to accuracy it's worth restoring the baseline which can be done by tailing the log;

import subprocess
def stail(f, n=10):
	proc = subprocess.Popen(['tail', '-n', str(n), f], stdout=subprocess.PIPE)
	return proc.stdout.readlines()

but python lacks this functionality (maybe there is some popular lib?) so for windows a longer (untested and copied from stackoverflow) solution;

def tail( f, lines=20 ):
	total_lines_wanted = lines
	BLOCK_SIZE = 1024
	f.seek(0, 2)
	block_end_byte = f.tell()
	lines_to_go = total_lines_wanted
	block_number = -1
	blocks = []
	while lines_to_go > 0 and block_end_byte > 0:
		if (block_end_byte - BLOCK_SIZE > 0):
			# read the last block we haven't yet read
			f.seek(block_number*BLOCK_SIZE, 2)
			blocks.append(f.read(BLOCK_SIZE))
		else:
			f.seek(0,0)
			blocks.append(f.read(block_end_byte))
		lines_found = blocks[-1].count('\n')
		lines_to_go -= lines_found
		block_end_byte -= BLOCK_SIZE
		block_number -= 1
	all_read_text = ''.join(reversed(blocks))
	return '\n'.join(all_read_text.splitlines()[-total_lines_wanted:])

The actual loop I am using at the moment looks like;

import adafruit_sgp30
import adafruit_sht31d
import datetime
import logging
import os.path
import re

f = '/var/log/sgp30.log'

def initLog(f):
	logging.basicConfig(filename=f, format='%(message)s', level=logging.DEBUG)

i2c = BUSIO()
sht31d = adafruit_sht31d.SHT31D(i2c)
sgp30 = adafruit_sgp30.Adafruit_SGP30(i2c)
#print("SGP30  serial #", [hex(i) for i in sgp30.serial])
#print("SHT31D serial #", [hex(i) for i in sht31d.serial])
if os.path.isfile(f):
	L = str(stail(f, n=1)[0])
	L = re.sub(r'\\.*', '', L)
	L = re.sub(r'^([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),', '', L)
	BC = re.sub(r'([^,]+),([^,]+)', r'0x\1', L)
	BV = re.sub(r'([^,]+),([^,]+)', r'0x\2', L)
	BC = int(BC, 16)
	BV = int(BV, 16)
	sgp30.set_iaq_baseline(BC, BV)
	initLog(f)
else:
	initLog(f)
	logging.info("datetime,eCO2-ppm,TVOC-ppb,humidity-%,temperature-C,baseline-eCO2,baseline-TVOC")
elapsed_sec = 0
while True:
	if elapsed_sec >= 60:
		elapsed_sec = 0
		d = datetime.datetime.utcnow().replace(microsecond=0).isoformat()
		pres = 1013.25
		rh = rh2gpm3(sht31d.temperature, sht31d.relative_humidity, pres)
		sgp30.set_iaq_humidity(rh)
		logging.info("%s,%d,%d,%f,%f,%x,%x" % (d, sgp30.eCO2, sgp30.TVOC, sht31d.relative_humidity, sht31d.temperature, sgp30.baseline_eCO2, sgp30.baseline_TVOC))
		sht31d.heater = True
	else:
		if elapsed_sec == 1:
			sht31d.heater = False
		sgp30.eCO2
	time.sleep(1)
	elapsed_sec += 1

Note that atmospheric pressure is hard coded so use the internet or get another sensor to improve that. Logging every minute is enough data for my use case. I'm not sure how often sht31d.heater should be used but I'm assuming 1s after every 60s read is OK (because it's so small and the sensor is stabilize at that time when compared to other sensors). Some classes like i2c/BUSIO may have different names upstream due to the 2 bugs I previously reported which I assume are fixed but because pip3 has no upgrade command I may port away from python first... or not depending on laziness.
Output looks something like;

datetime,eCO2-ppm,TVOC-ppb,humidity-%,temperature-C,baseline-eCO2,baseline-TVOC
2019-01-08T16:24:54,454,145,48.846970,18.858244,84dd,8a7f
2019-01-08T16:26:00,467,162,49.268196,18.858244,84dd,8a7f
2019-01-08T16:27:06,441,151,49.039269,18.831540,84dd,8a7f
2019-01-08T16:28:11,484,164,49.327717,18.874266,84dd,8a7f
2019-01-08T16:29:17,442,151,49.019428,18.874266,84dd,8a7f
2019-01-08T16:30:23,432,157,49.039269,18.844892,84dd,8a7f
2019-01-08T16:31:29,447,154,48.952276,18.831540,84dd,8a7f
2019-01-08T16:32:35,432,146,48.924805,18.815518,84dd,8a7f
2019-01-08T16:33:41,456,154,49.143049,18.815518,84dd,8a7f
2019-01-08T16:34:47,471,156,49.216306,18.914321,84dd,8a7f

There are some tests that would quantify how the measured variables effect each other... I might get around to that.

@caternuson
Copy link

Bummer it's not readable. OK, then at least add a property setter to allow:

sgp30.iaq_humidity = 23.0

One idea - the value could be stored locally. And have that value init'd to the POR default of 11.57 g/m3. Update the value in the setter. Then simply return its current value for the getter:

print(sgp30.iaq_humidity)

Not ideal. If you ran a program that set it, then quit that program and started another one, it would not know the actual value. So might also make sense to push the default value out in __init__ so it's set to something known.

And for now, I'd suggest just having this take in the expected absolute humidity in g/m3. Update the doc string to reflect this. Then the functionality is at least in place. Adding additional functions to allow setting this in terms of relative humidity can be done later or elsewhere.

@Dmole
Copy link
Contributor Author

Dmole commented Jan 9, 2019

...the [humidity] value could be stored [in adafruit_sgp30]...

The "Unix philosophy of small sharp tools" and "KISS principle" compels me to want to leave adafruit_sgp30 as a simple get/set wrapper. Otherwise I'd want the whole read every second loop in adafruit_sgp30 to make it a friendly API, not an in between monster.

... push the default value ...

That would prevent disabling the onchip humidity compensation without disabling the onchip calibration. I would wager the value is reset by the adafruit_sgp30 constructor calling onchip init anyway.

...Adding additional functions to allow setting this in terms of relative humidity can be done later or elsewhere.

Yes I was just answering ladyada's request for an example.

@ladyada
Copy link
Member

ladyada commented Jan 9, 2019

i think it's good as is - cacheing it makes it seem like you're actually able to read the value. i think this is good to go. one day, having an example that goes with a standard humidity sensor would be nice - the DS mentions the SHT series :)

@caternuson
Copy link

Looks good. Thanks for updating the humidity name and units.

Bummer this isn't readable. Would be nice to have some way to check its current setting if your were ever wondering about odd readings. But my suggestions are also pretty hack-ish, so not ideal. Guess I'm fine with it as is. KISS for sure.

@ladyada
Copy link
Member

ladyada commented Jan 9, 2019

thanks everyone!

@ladyada ladyada merged commit 374a660 into adafruit:master Jan 9, 2019
@Dmole
Copy link
Contributor Author

Dmole commented Jan 10, 2019

Thanks for the merge.

... example that goes with a standard humidity sensor would be nice...

Mixing protocols is not ideal so because sht31d and sgp30 both use I2C I think they are well matched.
Regardless I think all humidity sensors available from Adafruit output the same format so it should be minimal effort to make any of them work with the rh2gpm3 example.

...wondering about odd readings...

The raw eCO2 and VOC values are readable, so if a wrapper for that is added it could be used to eliminate wondering what the onchip compensation and calibration are up to.

tannewt pushed a commit to adafruit/Adafruit_CircuitPython_Bundle that referenced this pull request Jan 15, 2019
Updating https://github.com/adafruit/Adafruit_CircuitPython_ADXL34x to 1.10.1 from 1.10:
  > Merge pull request adafruit/Adafruit_CircuitPython_ADXL34x#7 from siddacious/master

Updating https://github.com/adafruit/Adafruit_CircuitPython_AM2320 to 1.1.3 from 1.1.2:
  > Merge pull request adafruit/Adafruit_CircuitPython_AM2320#7 from sommersoft/readme_fix_travis
  > Merge pull request adafruit/Adafruit_CircuitPython_AM2320#6 from adafruit/pylint-version-fix

Updating https://github.com/adafruit/Adafruit_CircuitPython_APDS to 1.2.3 from 1.1.2:
  > Merge pull request adafruit/Adafruit_CircuitPython_APDS#11 from sommersoft/readme_fix_travis
  > Merge pull request adafruit/Adafruit_CircuitPython_APDS#10 from adafruit/pylint-version-fix

Updating https://github.com/adafruit/Adafruit_CircuitPython_BME680 to 3.0.7 from 3.0.6:
  > Merge pull request adafruit/Adafruit_CircuitPython_BME680#15 from sommersoft/readme_fix_travis
  > Merge pull request adafruit/Adafruit_CircuitPython_BME680#14 from robert-hh/master

Updating https://github.com/adafruit/Adafruit_CircuitPython_BNO055 to 3.0.5 from 3.0.4:
  > Merge pull request adafruit/Adafruit_CircuitPython_BNO055#19 from sommersoft/readme_fix_travis
  > Merge pull request adafruit/Adafruit_CircuitPython_BNO055#18 from adafruit/pylint-version-fix

Updating https://github.com/adafruit/Adafruit_CircuitPython_CCS811 to 1.1.4 from 1.1.3:
  > Merge pull request adafruit/Adafruit_CircuitPython_CCS811#27 from sommersoft/readme_fix_travis
  > Merge pull request adafruit/Adafruit_CircuitPython_CCS811#26 from caternuson/iss25

Updating https://github.com/adafruit/Adafruit_CircuitPython_CharLCD to 3.1.0 from 3.0.3:
  > Merge pull request adafruit/Adafruit_CircuitPython_CharLCD#27 from kattni/add-buttons
  > Merge pull request adafruit/Adafruit_CircuitPython_CharLCD#25 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_DS2413 to 1.1.2 from 1.1.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_DS2413#8 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_FocalTouch to 1.1.2 from 1.1.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_FocalTouch#5 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_FXAS21002C to 1.2.2 from 1.2.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_FXAS21002C#7 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_FXOS8700 to 1.2.2 from 1.2.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_FXOS8700#10 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_HCSR04 to 0.3.4 from 0.3.3:
  > Merge pull request adafruit/Adafruit_CircuitPython_HCSR04#8 from sommersoft/readme_fix_travis
  > Merge pull request adafruit/Adafruit_CircuitPython_HCSR04#7 from adafruit/readme-image-fix

Updating https://github.com/adafruit/Adafruit_CircuitPython_HTU21D to 0.8.1 from 0.8.0:
  > Merge pull request adafruit/Adafruit_CircuitPython_HTU21D#3 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_IRRemote to 3.3.1 from 3.3.0:
  > Merge pull request adafruit/Adafruit_CircuitPython_IRRemote#20 from sommersoft/readme_fix_travis
  > Merge pull request adafruit/Adafruit_CircuitPython_IRRemote#18 from fmorton/master

Updating https://github.com/adafruit/Adafruit_CircuitPython_L3GD20 to 2.0.2 from 2.0.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_L3GD20#11 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_LIDARLite to 1.1.1 from 1.1.0:
  > Merge pull request adafruit/Adafruit_CircuitPython_LIDARLite#3 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_LIS3DH to 4.3.4 from 4.3.3:
  > Merge pull request adafruit/Adafruit_CircuitPython_LIS3DH#49 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_LSM303 to 1.2.3 from 1.2.2:
  > Merge pull request adafruit/Adafruit_CircuitPython_LSM303#10 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_LSM9DS1 to 2.0.2 from 2.0.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_LSM9DS1#14 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_MAX31855 to 3.0.5 from 3.0.4:
  > Merge pull request adafruit/Adafruit_CircuitPython_MAX31855#9 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_MAX31865 to 2.1.2 from 2.1.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_MAX31865#8 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_MCP4725 to 1.1.2 from 1.1.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_MCP4725#6 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_MCP9808 to 3.2.2 from 3.2.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_MCP9808#15 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_MLX90614 to 1.1.1 from 1.1.0:
  > Merge pull request adafruit/Adafruit_CircuitPython_MLX90614#10 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_MMA8451 to 1.2.2 from 1.2.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_MMA8451#4 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_MPL3115A2 to 1.1.2 from 1.1.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_MPL3115A2#4 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_MPRLS to 1.0.3 from 1.0.2:
  > Merge pull request adafruit/Adafruit_CircuitPython_MPRLS#5 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_NeoTre to 1.04 from 1.0.3:
  > Merge pull request adafruit/Adafruit_CircuitPython_NeoTre#4 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_PCA9685 to 3.2.4 from 3.2.3:
  > Merge pull request adafruit/Adafruit_CircuitPython_PCA9685#18 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_PCF8523 to 1.2.2 from 1.2.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_PCF8523#8 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_Pixie to 1.1.2 from 1.1.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_Pixie#6 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_Se to 1.2.7 from 1.2.6:
  > Merge pull request adafruit/Adafruit_CircuitPython_Se#22 from sommersoft/readme_fix_travis
  > Merge pull request adafruit/Adafruit_CircuitPython_Se#21 from adafruit/pylint-version-fix

Updating https://github.com/adafruit/Adafruit_CircuitPython_SGP30 to 2.0.1 from 2.0.0:
  > Merge pull request adafruit/Adafruit_CircuitPython_SGP30#14 from Dmole/patch-1
  > Merge pull request adafruit/Adafruit_CircuitPython_SGP30#13 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_SI4713 to 1.1.2 from 1.1.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_SI4713#6 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_SI5351 to 1.1.2 from 1.1.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_SI5351#3 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_SI7021 to 3.1.2 from 3.1.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_SI7021#10 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_STMPE610 to 1.1.2 from 1.1.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_STMPE610#7 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_TCA9548A to 0.1.2 from 0.1.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_TCA9548A#4 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_TLC5947 to 1.2.1 from 1.2.0:
  > Merge pull request adafruit/Adafruit_CircuitPython_TLC5947#12 from ArthurDent62/negative_indices
  > Merge pull request adafruit/Adafruit_CircuitPython_TLC5947#13 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_TLC59711 to 1.1.2 from 1.1.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_TLC59711#4 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_TSL2561 to 3.1.3 from 3.1.2:
  > Merge pull request adafruit/Adafruit_CircuitPython_TSL2561#18 from caternuson/float_doc
  > Merge pull request adafruit/Adafruit_CircuitPython_TSL2561#21 from sommersoft/readme_fix_travis
  > Merge pull request adafruit/Adafruit_CircuitPython_TSL2561#17 from csylvain/patch-1

Updating https://github.com/adafruit/Adafruit_CircuitPython_VCNL4010 to 0.9.2 from 0.9.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_VCNL4010#5 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_VEML6070 to 2.0.1 from 2.0.0:
  > Merge pull request adafruit/Adafruit_CircuitPython_VEML6070#6 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_VEML6075 to 1.0.2 from 1.0.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_VEML6075#3 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_VL53L0X to 3.1.5 from 3.1.4:
  > Merge pull request adafruit/Adafruit_CircuitPython_VL53L0X#8 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_WS2801 to 0.9.2 from 0.9.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_WS2801#3 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_AVRprog to 1.1.2 from 1.1.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_AVRprog#6 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_BoardTest to 1.0.1 from 1.0.0:
  > Merge pull request adafruit/Adafruit_CircuitPython_BoardTest#4 from ShawnHymel/master
  > Merge pull request adafruit/Adafruit_CircuitPython_BoardTest#3 from ShawnHymel/master

Updating https://github.com/adafruit/Adafruit_CircuitPython_Debouncer to 1.0.2 from 1.0.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_Debouncer#6 from dastels/Dans_suggestions

Updating https://github.com/adafruit/Adafruit_CircuitPython_ImageLoad to 0.8.1 from 0.8.0:
  > Merge pull request adafruit/Adafruit_CircuitPython_ImageLoad#4 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_miniQR to 1.1.1 from 1.1.0:
  > Merge pull request adafruit/Adafruit_CircuitPython_miniQR#4 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_Register to 1.3.3 from 1.3.2:
  > Merge pull request adafruit/Adafruit_CircuitPython_Register#18 from sommersoft/readme_fix_travis
  > Merge pull request adafruit/Adafruit_CircuitPython_Register#17 from adafruit/pylint-version-fix

Updating https://github.com/adafruit/Adafruit_CircuitPython_RTTTL to 2.2.2 from 2.2.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_RTTTL#11 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_ServoKit to 1.0.3 from 1.0.2:
  > Merge pull request adafruit/Adafruit_CircuitPython_ServoKit#5 from kattni/multiple-servo-examo

Updating https://github.com/adafruit/Adafruit_CircuitPython_SimpleIO to 1.1.2 from 1.1.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_SimpleIO#37 from sommersoft/readme_fix_travis

Updating https://github.com/adafruit/Adafruit_CircuitPython_Waveform to 1.2.2 from 1.2.1:
  > Merge pull request adafruit/Adafruit_CircuitPython_Waveform#5 from sommersoft/readme_fix_travis
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants