Closed nsk closed 4 years ago
Hi,
1. The Raspberry Pi examples require Python packages called smbus and requests. These are already installed in recent versions of Raspberry Pi OS. Which operating system version are you using?
It looks like you need to install requests, by doing:
pip3 install requests
If that does not work, you may need to install pip:
sudo apt-get install python3-pip
2. sudo should not be necessary to run the examples, just do:
python3 IoT_cloud_logging.py
3. To use the SDS011, connect it with 3 wires as explained in the readme, then in the file IoT_cloud_logging.py change the line:
particleSensor = PARTICLE_SENSOR_OFF
to:
particleSensor = PARTICLE_SENSOR_SDS011
I use via usb
Sent from ProtonMail Mobile
Le sam., oct. 3, 2020 à 13:05, Metriful Ltd notifications@github.com a écrit :
Hi,
- The Raspberry Pi examples require Python packages called smbus and requests. These are already installed in recent versions of Raspberry Pi OS. Which operating system version are you using?
It looks like you need to install requests, by doing:
pip3 install requests
If that does not work, you may need to install pip:
sudo apt-get install python3-pip
- sudo should not be necessary to run the examples, just do:
python3 IoT_cloud_logging.py
- To use the SDS011, connect it with 3 wires as explained in the readme, then in the file IoT_cloud_logging.py change the line:
particleSensor = PARTICLE_SENSOR_OFF
to:
particleSensor = PARTICLE_SENSOR_SDS011
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.
The SDS011 cannot be used via USB with the MS430 sensor board, or with the code examples.
To use the SDS with the MS430, you must connect 3 pins on the SDS using wires. This is explained in the GitHub Readme. The wires go to GND and 3.3V on the Raspberry Pi and to the PRT pin on the MS430.
The USB cable is for using the SDS011 directly with a computer. We do not give code examples for this.
"Traceback (most recent call last):
File "IoT_cloud_logging.py", line 18, in
config file
# IoT_cloud_logging.py
# Example IoT data logging code for the Metriful MS430.
# This example is designed to run with Python 3 on a Raspberry Pi.
# Environmental data values are measured and logged to an internet
# cloud account every 100 seconds. The example gives the choice of
# using either the Tago.io or Thingspeak.com cloud - both of these
# offer a free account for low data rates.
# Copyright 2020 Metriful Ltd.
# Licensed under the MIT License - for further details see LICENSE.txt
# For code examples, datasheet and user guide, visit
# https://github.com/metriful/sensor
import requests
from sensor_functions import *
#########################################################
# USER-EDITABLE SETTINGS
# How often to read and log data (every 3, 100, 300 seconds)
# Note: due to data rate limits on free cloud services, this should
# be set to 100 or 300 seconds, not 3 seconds.
cycle_period = CYCLE_PERIOD_100_S
# Which particle sensor, if any, is attached (PPD42, SDS011, or OFF)
particleSensor = PARTICLE_SENSOR_SDS011
# IoT cloud settings.
# This example uses the free IoT cloud hosting services provided
# by Tago.io or Thingspeak.com
# Other free cloud providers are available.
# An account must have been set up with the relevant cloud provider and
# an internet connection to the Pi must exist. See the accompanying
# readme and User Guide for more information.
# Choose which provider to use
use_Tago_cloud = True
# To use the ThingSpeak cloud, set: use_Tago_cloud=False
# The chosen account's key/token must be inserted below.
if (use_Tago_cloud):
# settings for Tago.io cloud
TAGO_DEVICE_TOKEN_STRING = "30ffb9d4-98aa-419b-b33b-c856fdbd85d7"
else:
# settings for ThingSpeak.com cloud
THINGSPEAK_API_KEY_STRING = "PASTE YOUR API KEY HERE WITHIN QUOTES"
# END OF USER-EDITABLE SETTINGS
#########################################################
# Set up the GPIO and I2C communications bus
(GPIO, I2C_bus) = SensorHardwareSetup()
# Apply the chosen settings to the MS430
if (particleSensor != PARTICLE_SENSOR_OFF):
I2C_bus.write_i2c_block_data(i2c_7bit_address, PARTICLE_SENSOR_SELECT_REG, [particleSensor])
I2C_bus.write_i2c_block_data(i2c_7bit_address, CYCLE_TIME_PERIOD_REG, [cycle_period])
#########################################################
# Full cloud settings for HTTP logging
if (use_Tago_cloud):
# settings for Tago.io cloud
tago_url = "http://api.tago.io/data"
tago_header = {"Content-type": "application/json","Device-Token":TAGO_DEVICE_TOKEN_STRING}
else:
# settings for ThingSpeak.com cloud
thingspeak_url = "http://api.thingspeak.com/update"
thingspeak_header = {"Content-type": "application/x-www-form-urlencoded"}
print("Logging data. Press ctrl-c to exit.")
# Enter cycle mode
I2C_bus.write_byte(i2c_7bit_address, CYCLE_MODE_CMD)
while (True):
# Wait for the next new data release, indicated by a falling edge on READY
while (not GPIO.event_detected(READY_pin)):
sleep(0.05)
# Now read all data from the MS430
# Air data
raw_data = I2C_bus.read_i2c_block_data(i2c_7bit_address, AIR_DATA_READ, AIR_DATA_BYTES)
air_data = extractAirData(raw_data)
# Air quality data
# The initial self-calibration of the air quality data may take several
# minutes to complete. During this time the accuracy parameter is zero
# and the data values are not valid.
raw_data = I2C_bus.read_i2c_block_data(i2c_7bit_address, AIR_QUALITY_DATA_READ, AIR_QUALITY_DATA_BYTES)
air_quality_data = extractAirQualityData(raw_data)
# Light data
raw_data = I2C_bus.read_i2c_block_data(i2c_7bit_address, LIGHT_DATA_READ, LIGHT_DATA_BYTES)
light_data = extractLightData(raw_data)
# Sound data
raw_data = I2C_bus.read_i2c_block_data(i2c_7bit_address, SOUND_DATA_READ, SOUND_DATA_BYTES)
sound_data = extractSoundData(raw_data)
# Particle data
# This requires the connection of a particulate sensor (invalid
# values will be obtained if this sensor is not present).
# Also note that, due to the low pass filtering used, the
# particle data become valid after an initial initialization
# period of approximately one minute.
raw_data = I2C_bus.read_i2c_block_data(i2c_7bit_address, PARTICLE_DATA_READ, PARTICLE_DATA_BYTES)
particle_data = extractParticleData(raw_data, particleSensor)
# Assemble the data into the required format, then send it to the cloud
# as an HTTP POST request.
# For both example cloud providers, the following quantities will be sent:
# 1 Temperature/C
# 2 Pressure/Pa
# 3 Humidity/%
# 4 Air quality index
# 5 bVOC/ppm
# 6 SPL/dBA
# 7 Illuminance/lux
# 8 Particle concentration
# Additionally, for Tago, the following is sent:
# 9 Air Quality Assessment summary (Good, Bad, etc.)
# 10 Peak sound amplitude / mPa
try:
if use_Tago_cloud:
payload = [0]*10;
payload[0] = {"variable":"temperature","value":"{:.1f}".format(air_data['T_C'])}
payload[1] = {"variable":"pressure","value":air_data['P_Pa']}
payload[2] = {"variable":"humidity","value":"{:.1f}".format(air_data['H_pc'])}
payload[3] = {"variable":"aqi","value":"{:.1f}".format(air_quality_data['AQI'])}
payload[4] = {"variable":"aqi_string","value":interpret_AQI_value(air_quality_data['AQI'])}
payload[5] = {"variable":"bvoc","value":"{:.2f}".format(air_quality_data['bVOC'])}
payload[6] = {"variable":"spl","value":"{:.1f}".format(sound_data['SPL_dBA'])}
payload[7] = {"variable":"peak_amp","value":"{:.2f}".format(sound_data['peak_amp_mPa'])}
payload[8] = {"variable":"illuminance","value":"{:.2f}".format(light_data['illum_lux'])}
payload[9] = {"variable":"particulates","value":"{:.2f}".format(particle_data['concentration'])}
requests.post(tago_url, json=payload, headers=tago_header, timeout=2)
else:
# Use ThingSpeak.com cloud
payload = "api_key=" + THINGSPEAK_API_KEY_STRING
payload += "&field1=" + "{:.1f}".format(air_data['T_C'])
payload += "&field2=" + str(air_data['P_Pa'])
payload += "&field3=" + "{:.1f}".format(air_data['H_pc'])
payload += "&field4=" + "{:.1f}".format(air_quality_data['AQI'])
payload += "&field5=" + "{:.2f}".format(air_quality_data['bVOC'])
payload += "&field6=" + "{:.1f}".format(sound_data['SPL_dBA'])
payload += "&field7=" + "{:.2f}".format(light_data['illum_lux'])
payload += "&field8=" + "{:.2f}".format(particle_data['concentration'])
requests.post(thingspeak_url, data=payload, headers=thingspeak_header, timeout=2)
except:
# An error has occurred, likely due to a lost internet connection,
# and the post has failed.
# The program will retry with the next data release and will succeed
# if the internet reconnects.
print("HTTP POST failed.")
root@Metriful-CH341SER:/home/pi/sensor/Raspberry_Pi# python3 IoT_cloud_logging.py
Traceback (most recent call last):
File "IoT_cloud_logging.py", line 18, in
resolve with install smbus2 via pip3
pi@Metriful-CH341SER:~/sensor/Raspberry_Pi $ sudo python IoT_cloud_logging.py Traceback (most recent call last): File "IoT_cloud_logging.py", line 17, in
import requests
ImportError: No module named requests
and how activate SDS011 sensor on IoT file ??
thx