def sample_AQ(): dust_sensor = sds011.SDS011(uartAQ) dust_sensor.set_reporting_mode_query() dust_sensor.sleep() while True: #Datasheet says to wait for at least 30 seconds... print('Start fan for 15 seconds.') dust_sensor.wake() sleep(65) #Returns NOK if no measurement found in reasonable time status = dust_sensor.read() #Returns NOK if checksum failed pkt_status = dust_sensor.packet_status #Stop fan dust_sensor.sleep() if (status == False): print('Measurement failed.') elif (pkt_status == False): print('Received corrupted data.') else: print('PM25: ', dust_sensor.pm25) print('PM10: ', dust_sensor.pm10) sleep(55)
def __init__(self, uart, meas_dur): #Declare an SDS011 object self._sds011 = sds011.SDS011(uart) #Stop fan self._sds011.sleep() #True if fan is (supposed to be) ON, False otherwise self._fan_status = False self._fan_time_running = None #Timing for measure self._meas_dur = meas_dur self._last_meas_time = None #Attributes for PM25 and PM10 self._pm25 = None self._pm10 = None
def __init__(self, device, name, measure_interval, warmup_delay, number_of_measurements): import sds011 super(Collector, self).__init__() self._finish_event = threading.Event() self._sleep = warmup_delay.total_seconds() > 0 self._warmup_delay = warmup_delay self._measure_interval = measure_interval self._number_of_measurements = number_of_measurements _LOGGER.info("measure_interval: %s", self._measure_interval.total_seconds()) _LOGGER.info("warmup_delay: %s", self._warmup_delay.total_seconds()) self._sensor = sds011.SDS011(device, use_query_mode=True) self._sensor.sleep(self._sleep) self._entities = [Sensor(name, "PM2.5"), Sensor(name, "PM10")]
parser = argparse.ArgumentParser(prog="Particle sensor script", description="Commit measurement") parser.add_argument("sensor", help="sensor file path") parser.add_argument("endpoint", help="API endpoint") """ This script measures PM2.5 and PM10 concentration with SDS011 sensor. When executed the script launches SDS011 fan and lets it work for 90 seconds to make shure that the sensor measurement is filled with recent air in maximum volume. It also makes 5 measurements and calculates mean value to minimize some errors. """ if __name__ == "__main__": args = parser.parse_args() try: sensor = sds011.SDS011(args.sensor, use_query_mode=True) sensor.sleep(sleep=False) pm2_5 = np.empty(0) pm10 = np.empty(0) time.sleep(60) for _ in range(5): time.sleep(30) meas = sensor.query() pm2_5 = np.append(pm2_5, meas[0]) pm10 = np.append(pm10, meas[1]) time.sleep(2) pm2_5 = pm2_5[1:].mean() pm10 = pm10[1:].mean() sensor.sleep() sensor.ser.close() r = requests.post(
import sds011 import time import paho.mqtt.client as paho sensor = sds011.SDS011("/dev/ttyUSB0", use_query_mode=True) def on_connect(client, userdata, flags, rc): print("Succesfully connected to MQTT broker" % (rc)) client = paho.Client() client.on_connect = on_connect client.connect("10.10.10.11", 1883) client.loop_start() freq = 900 # refresh rate try: while True: sensor.sleep(sleep=False) time.sleep(15) # Allow time for the sensor to measure properly pm25, pm10 = sensor.query() (rc, mid) = client.publish("satellite/sensor/pm25/state", pm25, qos=1) (rc, mid) = client.publish("satellite/sensor/pm10/state", pm10, qos=1) print("PM2.5:", pm25, "PM10:", pm10) sensor.sleep() time.sleep(freq - 15) except KeyboardInterrupt: print("You pressed ctrl-c, quitting") sys.exit(0)
bmp280_sensor = bmp280.BMP280(i2c) ccs811_sensor = CCS811.CCS811(i2c) uart = UART(1, baudrate=9600, bits=8, parity=None, stop=1, tx=12, rx=14, rts=-1, cts=-1, txbuf=256, rxbuf=256, timeout=5000, timeout_char=2) dust_sensor = sds011.SDS011(uart) time.sleep(2) # from sensor import read_sensors, post_sensors_data def read_sensors(): data = {} #data['unit_id'], #data['registered'], data['bmp280_temperature'] = bmp280_sensor.temperature data['bmp280_pressure'] = bmp280_sensor.pressure data['si7021_temperature'] = si7021_sensor.temperature data['si7021_humidity'] = si7021_sensor.relative_humidity ccs811_sensor.put_envdata(si7021_sensor.relative_humidity,
file.write(str(message)) file.write("\n") file.close() def write_csv(time, pm_25, pm_10, temp, humidity, temp2, pressure, fname): with open(fname,'a') as file: line = ""+str(time)+";"+str(pm_25)+";"+str(pm_10)+";"+str(temp)+";"+str(humidity)+';' line = line +str(temp2)+';'+str(pressure) file.write(line) file.write('\n') file.close() # Try to attach serial port to Particle Sensor vlues try: sensor = sds011.SDS011("/dev/ttyAMA0", use_query_mode="True") #sensor = sds011.SDS011("/dev/ttyUSB0", use_query_mode="True") except Exception as e: write_log(e) rpr=sensor.query() print(rpr) pm_25, pm_10 = sensor.query() #print "PM 2.5:",pm_25,"μg/m^3 PM 10:",pm_10,"μg/m^3" print("PM 2.5:{} μg/m^3 PM 10:{} μg/m^3".format(pm_25, pm_10)) #print(". appears {} times.".format(i, key, wordBank[key])) # Sensor should be set to Adafruit_DHT.DHT11, # Adafruit_DHT.DHT22, or Adafruit_DHT.AM2302. sensorDHT = Adafruit_DHT.DHT22
#### START OF USER CUSTOMISABILITY HERE #### comparison_data = 'pm25' # Select the data to be pulled from API can be: pm25, pm10, co, o3, p, so2, t, w api_token = 'demo' # You can enter their own API token for use if desired api_location = 'shanghai' # You can enter their own location data here sensor_path = "/dev/ttyUSB0" # You may need to enter the path of the SDS011 sensor monitor_size_x = 800 # You can adjust the size of the window created - Make it the same as your screen for full screen monitor_size_y = 480 # You can adjust the size of the window created - Make it the same as your screen for full screen #### END OF USER CUSTOMISABILITY HERE #### api_link = 'http://api.waqi.info/feed/' + api_location + '/?token=' + api_token # The link to the AQI API try: sensor = sds011.SDS011(sensor_path, use_query_mode=True) sensor.sleep() # Tests sensor is working by placing it in sleep except: sensor = 'NO_SENSOR' def setUpGUI(): # This is the code that creates and updates the GUI sg.ChangeLookAndFeel('BlueMono') # Colour scheme for window live_aqi, time, average_aqi, per_change, live_api = getData() # Runs the get_data() sub routine to get the data average_aqi = average_aqi[0] # average_aqi holds multiple values, one rounded, one non-rounded actual_file_size = os.stat('data.csv').st_size / (1024*1024) actual_file_size = "%.4f" % actual_file_size max_data = open('max_data_size.txt', 'r') max_file_size = max_data.readline() max_data.close()
import sds011 import time import cloud sensor = sds011.SDS011() report = cloud.connect() while True: try: measurements = sensor.read() if measurements is None: pass else: report.compose(*measurements) time.sleep_ms(5000) except KeyboardInterrupt as e: print('KeyboardInterrupt')
import time import sys import signal __author__ = "Grzegorz Deneka" __license__ = "GPL3" __status__ = "PoC" __version__ = "0.01" serial_device = "/dev/ttyUSB0" # REQ Read and Write access sleep_time = 300 # 5 min sleep_warm_up = 30 if __name__ == "__main__": try: sensor = sds011.SDS011(serial_device, use_query_mode=True) except OSError as e: print(e.strerror) sys.exit(1) def signal_heandler(signum, frame): sensor.sleep() print("Sensor Off. Good Bye! ", signum) sys.exit(signum) signal.signal(signal.SIGINT, signal_heandler) signal.signal(signal.SIGTERM, signal_heandler) print("(pm2.5, pm10)") while True:
print("ValueError parsing config.ini file. Check number datatypes!") sys.exit() # Initialise I2C bus. i2c = busio.I2C(board.SCL, board.SDA) # Initialize the sensor sensor = adafruit_bme680.Adafruit_BME680_I2C(i2c) raspid = get_raspid() now = datetime.datetime.now() runNo = now.strftime("%Y%m%d%H%M") hostname = socket.gethostname() # Initialize the dust sensor dust = sds011.SDS011(dust_port, use_query_mode=True) print("Session: ", session) print("runNo: ", runNo) print("raspid: ", raspid) print("hostname: ", hostname) print("location: ", location) # Create the InfluxDB object client = InfluxDBClient(host, port, user, password, dbname) # BME680 configuration # Set sensor configs #sensor.set_humidity_oversample(bme680.OS_2X)