首页 > 分享 > 基于阿里云平台的智能环境监测系统(树莓派4B)

基于阿里云平台的智能环境监测系统(树莓派4B)

基于阿里云平台的智能环境监测系统

1. 系统的设计背景

1.1 设计背景

在当今世界,人们花费大部分时间在室内,无论是在家中、办公室、学校还是商店。因此,室内环境[1]的质量对人们的生活质量和健康产生了深远影响。空气质量、温度、湿度、光照等因素都可以影响舒适度和工作效率。因此,设计一个基于阿里云平台和树莓派的室内智能环境监测系统至关重要,以满足人们对室内环境质量的需求。

首先,室内空气质量对人体健康至关重要。室内可能存在的空气污染物质,如二氧化碳、甲醛、挥发性有机化合物和颗粒物,对呼吸系统和整体健康产生负面影响。室内智能环境监测系统可以实时监测这些污染物质的浓度,提供警报或建议,帮助人们采取行动,改善室内空气质量。其次,温度和湿度是另一个重要的因素,它们会影响人们的舒适度和健康。过高或过低的温度以及干燥或潮湿的环境都可能导致不适感,影响工作效率和生活品质。这个系统将监测室内温度和湿度,并根据当前的环境情况做出调整,如开启、关闭风扇等。此外,室内光照也是关键因素。足够的光照对于提高警觉性和情绪状态非常重要。系统将包括光感应器,用于监测室内光照水平,并能够智能调整照明,以改善室内的视觉环境。

阿里云平台[2]作为强大的云计算和数据存储解决方案,将为这个系统提供数据存储、分析和远程访问的能力。树莓派将作为数据采集和传输的核心,负责实时收集各种环境数据并将其上传到云端。用户可以通过Web界面轻松访问实时环境数据,获得室内环境的综合视图,并根据需要进行调整。

这个室内智能环境监测系统将不仅适用于个人家庭,还可以用于办公室、学校、医院和商店等室内场所。它将有助于改善室内环境质量,提高生活品质,促进健康和工作效率。此外,系统还可以节约能源,减少资源浪费,对可持续发展目标做出贡献。

综上所述,基于阿里云平台和树莓派[3]的室内智能环境监测系统将成为一个创新的、可定制的解决方案,有助于满足人们对室内环境质量的需求,提高生活质量,保障健康,同时也对可持续性和节能目标产生积极影响。

2. 系统的设计方案

2.1 设计方案

B站视频链接: 不知道这个视频能收到多少点赞_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1u84y127LV/?share_source=copy_web&vd_source=05015ee1ef592cf60bd4691d62be503f

B站视频链接: 不知道这个视频能收到多少点赞_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1u84y127LV/?share_source=copy_web&vd_source=05015ee1ef592cf60bd4691d62be503f

B站视频链接: 不知道这个视频能收到多少点赞_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1u84y127LV/?share_source=copy_web&vd_source=05015ee1ef592cf60bd4691d62be503f

        如图1所示,树莓派连接各个外部硬件传感器模块,将测到的数据通过上传到阿里云,经过阿里云分析后下发命令控制蜂鸣器和照明模块工作。

(图1 系统结构图)

2.2 硬件的设计

(1)系统的主控

(图2 树莓派4B实物图)

树莓派4 Model B是一款强大、多功能的单板计算机,搭载四核CPU[4]、多种连接选项、丰富的内存配置和GPIO引脚,适用于各种应用,从教育到物联网和嵌入式开发,价格亲民且低功耗,是广泛用于创造、学习和实验的理想工具。基于以上特点,选用树莓派4 Model B作为该系统的主控。

(2)温湿度传感器

DHT11温湿度传感器[5]以其低成本、简单易用、数字输出、同时测量温湿度、可用性广泛和低功耗的特点而脱颖而出,适合本系统需要的基本温湿度数据。

(3)光照传感器

光敏电阻传感器[6]是一种感光元件,其电阻值随光照强度的变化而变化,光敏电阻传感器通常用于检测环境光照水平的变化,可用于亮度控制、光敏报警和光敏开关等应用,它们对光敏感、价格适中,适用于多种光敏感测量和控制任务。

(4)空气质量传感器

空气质量传感器[7]的优点包括实时监测环境中的污染物浓度,提供及时警报,帮助改善室内和室外空气质量,以及在健康和环境保护领域具有广泛的应用潜力。其高精度、可靠性和可编程性也使其成为科研、工业控制和物联网应用的重要工具。

(5)LED灯

RGB三原色的LED灯通过混合红、绿和蓝三种基本颜色的光以不同的亮度和比例,能够产生广泛的颜色和色彩效果,适用于照明、娱乐、装饰以及指示等多种应用,其可调节的亮度和色彩控制能力使其成为创意灯光设计和智能家居系统中不可或缺的组成部分。

(6)直流电机

直流电机模块可通过外部信号控制电机的转速和方向。它简化了直流电机的驱动过程。这种模块常用于机器人、小型车辆、家用电器和自动化系统等应用。在本系统中,只需提供高低电平即可控制风扇的正反转,非常方便。

(7)无源蜂鸣器

无源蜂鸣器是一种电子音响设备,不内置振荡器或驱动电路,其发声依赖外部交流电源或脉冲信号的输入,通过在合适的频率和时序下工作,能够产生声音或警报,常用于警报系统、计时器和各种提醒应用,因其简单、稳定和经济的特点而广泛应用。

(8)系统实物图

(图3 系统实物图)

2.3 阿里云物联网平台的配置

阿里云平台在物联网应用[8]开发中发挥着重要的作用。首先,它提供了高度可扩展的云计算基础设施,允许开发者轻松管理和存储来自大规模物联网设备的数据。其次,阿里云平台为设备连接和通信提供了安全性和可靠性,保护数据隐私和确保实时互联。此外,它支持各种传感器和协议,使开发者能够集成多样化的物联网设备。最重要的是,阿里云提供了丰富的工具和服务,如数据分析、人工智能、大数据处理等,以帮助开发者从物联网数据中提取有价值的信息,实现更智能的应用和决策。因此,阿里云平台为物联网应用提供了强大的基础设施和工具,加速了物联网技术的发展和创新,对于构建智能、高效、安全的物联网解决方案至关重要。

创建产品与设备

要想把各个硬件与阿里云物联网平台建立联系,第一步需要再阿里云物联网平台上创建一产品与设备,这里我把它命名为raspberry1,设备所属产品命名为树莓派测试,因为这个设备是我刚学习树莓派时创建的,这里我就直接使用了。

(图4 创建的产品与设备)

(2)为产品定义物理模型

接下来需要为所创建的产品定义物理模型,这一步也是相当关键的,在本系统中,主要用到了三个物理模型:光照强度、温度、湿度。这三个物理模型都有各自的标识符和取值范围,定义好物理模型之后,确定无误点击发布。

(图5 为产品定义物理模型)

(3)建立设备与平台的连接

最后一步是非常重要的,也是最有挑战性的。就是把实物与阿里云连接起来,这里需要用到阿里云物联网与实物之间的通信协议。经过我查阅资料后,发现两者之间是通过HTTP协议进行连接的,而且阿里云平台已经给出了相关的代码例程,需要我修改的是所创建产品的三元素,以及相应逻辑代码的编写。下图为连接成功后上传数据的截图,可以看出,各个传感器将实时检测数据并上传到了阿里云后台,与我在之前创建的三个物理模型相互对应,而且数据准确,约3秒上传更新一次数据。

(图6 数据上传至阿里云平台)

3. 总结与分析

这个智能环境监测系统为用户提供了多种重要的功能,旨在提高生活质量和安全性。首先,系统的烟雾报警功能是关键的生命安全特性,能够在检测到烟雾时立即触发警报,提醒居民采取适当的安全措施,减少火灾风险[9]。其次,智能照明功能为用户提供了便捷性和能源效益,自动调整照明强度和开关状态,改善室内环境,同时减少能源浪费。最重要的是,系统将传感器数据上传到阿里云平台,允许用户随时远程监测室内环境,提供了额外的便利性。另外,系统的云集成是一个显著特点,它为数据存储、访问和分析提供了可靠的平台。这不仅有助于用户监测实时数据,还可以为将来的数据分析和趋势识别提供关键支持。而且,用户可以轻松地通过Web界面进行远程控制和监测,增加了系统的用户友好性和可用性。

通过实地测试,该系统数据监测相对精准,数据上传至阿里云时速度快,实时性高,效果良好;当空气质量传感器检测到室内有可燃性气体[10]时,会立即驱动无源蜂鸣器报警;当光照强度低于某一阈值时,系统会自动打开灯光,当光照强度高于某一阈值时,灯光会自动熄灭,并将实时的光照强度值上传至阿里云平台,并储存,方便用户查看。

最后,感谢老师在课堂的辛勤付出和对同学们的严格要求,让我学到了有关物联网和各种传感器的很多知识。在以后得学习生涯和职业生涯中,我将会牢记老师的教导,对待学习一丝不苟,对待同学真诚善良,对待老师礼貌尊重。在以后我也会多多关注有关物联网方面的知识,不断学习,做一个有知识有文化的新青年。

参考文献

代码附录

在树莓派上运行Run.py

Run.py 

import paho.mqtt.client as mqtt  

import RPi.GPIO as GPIO  

import Adafruit_DHT  

import time  

import hashlib  

import hmac  

import random  

import json  

import PCF8591  

import MQ_2  

sensor = Adafruit_DHT.DHT11  

pin = 21  

options = {  

'productKey': 'k07x5a31RzY',  

'deviceName': 'raspberry1',  

'deviceSecret': '7ae2b6130b4348f4158f8db6745527b6',  

'regionId': 'cn-shanghai'  

}  

HOST = options['productKey'] + '.iot-as-mqtt.' + options['regionId'] + '.aliyuncs.com'  

PORT = 1883  

PUB_TOPIC = "/sys/" + options['productKey'] + "/" + options['deviceName'] + "/thing/event/property/post";  

def on_connect(client, userdata, flags, rc):  

print("Connected with result code " + str(rc))  

def on_message(client, userdata, msg):  

print(msg.topic + " " + str(msg.payload))  

def hmacsha1(key, msg):  

return hmac.new(key.encode(), msg.encode(), hashlib.sha1).hexdigest()   

def getAliyunIoTClient():  

    timestamp = str(int(time.time()))  

    CLIENT_ID = "paho.py|securemode=3,signmethod=hmacsha1,timestamp=" + timestamp + "|"  

    CONTENT_STR_FORMAT = "clientIdpaho.pydeviceName" + options['deviceName'] + "productKey" + options[  

'productKey'] + "timestamp" + timestamp  

    USER_NAME = options['deviceName'] + "&" + options['productKey']  

    PWD = hmacsha1(options['deviceSecret'], CONTENT_STR_FORMAT)  

    client = mqtt.Client(client_id=CLIENT_ID, clean_session=False)  

    client.username_pw_set(USER_NAME, PWD)  

return client 

def get_sensor_data():  

    Humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)  

return Humidity, temperature  

if __name__ == '__main__':  

    client = getAliyunIoTClient()  

    client.on_connect = on_connect  

    client.on_message = on_message  

    client.connect(HOST, 1883, 300)  

    PCF8591.setup(0x48)  

while True:  

        Humidity, temperature = get_sensor_data()  

        tmp = (255 - PCF8591.read(1))  

        tmp = int(tmp * (255 - 125) / 255 + 125)  

        MQ=20  

        status = GPIO.input(MQ)  

        PCF8591.PCF()  

        MQ_2.MQ_2()  

        payload_json = {  

'id': int(time.time()),  

'params': {  

'temperature': temperature,  

'Humidity': Humidity,  

'tmp':tmp  

            },  

'method': "thing.event.property.post"  

        }  

print('-----------------------')  

print("湿度:", Humidity)  

print("温度:", temperature)  

print("光照强度:", tmp)  

print('风扇状态:',status)  

print('-----------------------')  

        client.publish(PUB_TOPIC, payload=str(payload_json), qos=1)  

        time.sleep(3)  

下面是aliLink.py

import time, json, random

import hmac, hashlib

def linkiot(DeviceName, ProductKey, DeviceSecret, server='iot-as-mqtt.cn-shanghai.aliyuncs.com'):

serverUrl = server

ClientIdSuffix = "|securemode=3,signmethod=hmacsha256,timestamp="

Times = str(int(time.time()))

Server = ProductKey + '.' + serverUrl

ClientId = DeviceName + ClientIdSuffix + Times + '|'

userNmae = DeviceName + "&" + ProductKey

PasswdClear = "clientId" + DeviceName + "deviceName" + DeviceName + "productKey" + ProductKey + "timestamp" + Times

h = hmac.new(bytes(DeviceSecret, encoding='UTF-8'), digestmod=hashlib.sha256)

h.update(bytes(PasswdClear, encoding='UTF-8'))

Passwd = h.hexdigest()

return Server, ClientId, userNmae, Passwd

def Alink(params):

AlinkJson = {}

AlinkJson["id"] = random.randint(0, 999999)

AlinkJson["version"] = "1.0"

AlinkJson["params"] = params

AlinkJson["method"] = "thing.event.property.post"

return json.dumps(AlinkJson)

if __name__ == "__main__":

pass

下面是风扇Fan.py

import RPi.GPIO as GPIO

import time

GPIO.setmode(GPIO.BCM)

Fan = 6

GPIO.setup(Fan, GPIO.OUT)

def forward():

GPIO.output(Fan, GPIO.HIGH)

def stop():

GPIO.output(Fan, GPIO.LOW)

下面是灯光Light.py

import RPi.GPIO as GPIO

import time

GPIO.setmode(GPIO.BCM)

LED_R = 13

LED_G = 16

LED_B = 17

GPIO.setup(LED_R,GPIO.OUT)

GPIO.setup(LED_G,GPIO.OUT)

GPIO.setup(LED_B,GPIO.OUT)

GPIO.output(LED_R,GPIO.LOW)

GPIO.output(LED_G,GPIO.LOW)

GPIO.output(LED_B,GPIO.LOW)

def LED_ON():

GPIO.output(LED_R,GPIO.HIGH)

GPIO.output(LED_G,GPIO.HIGH)

GPIO.output(LED_B,GPIO.HIGH)

def LED_OFF():

GPIO.output(LED_R,GPIO.LOW)

GPIO.output(LED_G,GPIO.LOW)

GPIO.output(LED_B,GPIO.LOW)

下面是MQ_2.py

import RPi.GPIO as GPIO

import time

import Fan

import Light

MQ=20

GPIO.setmode(GPIO.BCM)

GPIO.setup(MQ, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

def MQ_2():

status = GPIO.input(MQ)

if status == 1:

Fan.stop()

else:

Fan.forward()

下面是协议mqttd.py

import paho.mqtt.client

class MQTT:

def __init__(self, host, CcientID, username=None, password=None, port=1883, timeOut=60):

self.Host = host

self.Port = port

self.timeOut = timeOut

self.username = username

self.password = password

self.CcientID = CcientID

self.mqttc = paho.mqtt.client.Client(self.CcientID)

if self.username is not None:

self.mqttc.username_pw_set(self.username, self.password)

self.mqttc.connect(self.Host, self.Port, self.timeOut)

def begin(self, message, connect):

self.mqttc.on_connect = connect

self.mqttc.on_message = message

self.mqttc.loop_start()

def push(self, tag, date, _Qos=0):

self.mqttc.publish(tag, date, _Qos)

def subscribe(self, _tag):

self.mqttc.subscribe(_tag)

下面是PCF8591.py

import smbus

import RPi.GPIO as GPIO

import time

import Light

bus = smbus.SMBus(1)

GPIO.setmode(GPIO.BCM)

GPIO.setup(17,GPIO.OUT)

def setup(Addr):

global address

address = Addr

def read(chn):

if chn == 0:

bus.write_byte(address, 0x40)

if chn == 1:

bus.write_byte(address, 0x41)

if chn == 2:

bus.write_byte(address, 0x42)

if chn == 3:

bus.write_byte(address, 0x43)

bus.read_byte(address)

return bus.read_byte(address)

def write(val):

temp = val

temp = int(temp)

bus.write_byte_data(address, 0x40, temp)

def PCF():

tmp = (255 - read(1))

tmp = int(tmp * (255 - 125) / 255 + 125)

if tmp<185:

Light.LED_ON()

else:

Light.LED_OFF()

write(tmp)

time.sleep(0.5)

相关知识

基于Raspberry Pi的家庭花卉智能浇灌系统.pdf
树莓派智能花卉浇灌系统设计与实现
一种基于SoC和阿里云的智能家居系统设计方案
银盒子智能收银系统:云平台 + 智能硬件 = 为商户而生的软硬一体解决方案
基于植株需光差异特性的设施黄瓜立体光环境智能调控系统
基于物联网云的花园智能监控系统设计文档资源
智能环境监测系统下载
基于低功耗传输方法的设施花卉环境监测系统
用树莓派制作一款自动浇灌系统
基于物联网温室环境监测系统设计.doc

网址: 基于阿里云平台的智能环境监测系统(树莓派4B) https://m.huajiangbk.com/newsview621033.html

所属分类:花卉
上一篇: 植物生长环境监测系统,植物冠层环
下一篇: 物联网环境监测数据中心