首页 > 其他分享 >教程!基于树莓派+传感器+阿里云IoT的智能家居管理

教程!基于树莓派+传感器+阿里云IoT的智能家居管理

时间:2023-09-18 17:24:35浏览次数:38  
标签:buzzer 树莓 IoT stats RAM 智能家居 window import DISK

时隔一年半,才发现这篇内容怎么还在草稿箱里,怪不得那么多人问我问题,绷不住了

以下代码均在同一文件夹下
在终端执行运行run.py文件即可

  1. run.py
1.	
#!/usr/bin/python3
2.	
3.	import aliLink,mqttd,rpi
4.	import time,json
5.	import Adafruit_DHT
6.	import time
7.	import LCD1602
8.	import flame_sensor
9.	import buzzer_1
10.	import rain_detector
11.	import gas_sensor
12.	import relay
13.	from threading import Thread
14.	
15.	pin = 19  # DHT11 温湿度传感器管脚定义
16.	Buzzer = 20    # 有源蜂鸣器管脚定义
17.	
18.	# GPIO口定义
19.	sensor = Adafruit_DHT.DHT11
20.	
21.	
22.	
23.	
24.	# 三元素(iot后台获取)
25.	ProductKey = 'a11lzCDSgZP'
26.	DeviceName = 'IU6aSETyiImFPSkpcywm'
27.	DeviceSecret = "2551eb5f630c372743c538e9b87bfe6d"
28.	# topic (iot后台获取)
29.	POST = '/sys/a11lzCDSgZP/IU6aSETyiImFPSkpcywm/thing/event/property/post'  # 上报消息到云
30.	POST_REPLY = '/sys/a11lzCDSgZP/IU6aSETyiImFPSkpcywm/thing/event/property/post_reply'
31.	SET = '/sys/a11lzCDSgZP/IU6aSETyiImFPSkpcywm/thing/service/property/set'  # 订阅云端指令
32.	
33.	
34.	#窗户开关
35.	window = 0
36.	window_status = 0
37.	Thread(target=relay.close).start()
38.	
39.	# 消息回调(云端下发消息的回调函数)
40.	def on_message(client, userdata, msg):
41.	    #print(msg.payload)
42.	    Msg = json.loads(msg.payload)
43.	
44.	    global window,window_status
45.	    window = Msg['params']['window']
46.	    print(msg.payload)  # 开关值
47.	    if window_status != window:
48.	        window_status = window
49.	        if window == 1:
50.	            Thread(target=relay.open).start()
51.	        else:
52.	            Thread(target=relay.close).start()
53.	
54.	
55.	
56.	#连接回调(与阿里云建立链接后的回调函数)
57.	def on_connect(client, userdata, flags, rc):
58.	    pass
59.	
60.	
61.	
62.	# 链接信息
63.	Server,ClientId,userNmae,Password = aliLink.linkiot(DeviceName,ProductKey,DeviceSecret)
64.	
65.	# mqtt链接
66.	mqtt = mqttd.MQTT(Server,ClientId,userNmae,Password)
67.	mqtt.subscribe(SET) # 订阅服务器下发消息topic
68.	mqtt.begin(on_message,on_connect)
69.	
70.	
71.	
72.	# 信息获取上报,每2秒钟上报一次系统参数
73.	while True:
74.	    #获取指示灯状态
75.	    power_stats=int(rpi.getLed())
76.	    if(power_stats == 0):
77.	        power_LED = 0
78.	    else:
79.	        power_LED = 1
80.	
81.	    # CPU 信息
82.	    CPU_temp = float(rpi.getCPUtemperature())  # 温度   ℃
83.	    CPU_usage = float(rpi.getCPUuse())         # 占用率 %
84.	
85.	    # RAM 信息
86.	    RAM_stats =rpi.getRAMinfo()
87.	    RAM_total =round(int(RAM_stats[0]) /1000,1)    #
88.	    RAM_used =round(int(RAM_stats[1]) /1000,1)
89.	    RAM_free =round(int(RAM_stats[2]) /1000,1)
90.	
91.	    # Disk 信息
92.	    DISK_stats =rpi.getDiskSpace()
93.	    DISK_total = float(DISK_stats[0][:-1])
94.	    DISK_used = float(DISK_stats[1][:-1])
95.	    DISK_perc = float(DISK_stats[3][:-1])
96.	
97.	    #温度,湿度
98.	    humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
99.	
100.	    # LCD显示
101.	    LCD = 0
102.	    try:
103.	        LCD1602.init(0x27, 1)          # 初始化显示屏
104.	        LCD1602.write(0, 0, 'humidity:    ' + str(int(humidity)) + '%')
105.	        LCD1602.write(0, 1, 'temperature: ' + str(int(temperature)) + '\'')  # 在第二行显示world!
106.	        LCD = 1
107.	    except:
108.	        print("显示屏连接不稳定,请检查")
109.	        LCD = 0
110.	
111.	    # 蜂鸣器
112.	    buzzer = 0
113.	
114.	    # 火焰传感器
115.	    flame_sensor.setup()
116.	    if flame_sensor.fire() == 0:
117.	        flame = 1
118.	        buzzer_1.buzzer_on() #让铃声叫
119.	        buzzer = 1
120.	    else:
121.	        flame = 0
122.	        buzzer_1.buzzer_off() #铃声不叫
123.	        buzzer = 0
124.	
125.	    # 烟雾传感器
126.	    gas = gas_sensor.gas()
127.	
128.	    # 雨滴传感器
129.	    rain_detector.setup()
130.	    if rain_detector.rain() == 0:
131.	        rain = 1
132.	    else:
133.	        rain = 0
134.	
135.	    # 构建与云端模型一致的消息结构
136.	    updateMsn = {
137.	        'cpu_temperature':CPU_temp,
138.	        'cpu_usage':CPU_usage,
139.	        'RAM_total':RAM_total,
140.	        'RAM_used':RAM_used,
141.	        'RAM_free':RAM_free,
142.	        'DISK_total':DISK_total,
143.	        'DISK_used_space':DISK_used,
144.	        'DISK_used_percentage':DISK_perc,
145.	        'PowerLed':power_LED,
146.	        'temperature':temperature,
147.	        'humidity':humidity,
148.	        'window':window,
149.	        'LCD':LCD,
150.	        'buzzer':buzzer,
151.	        'flame':flame,
152.	        'rain':rain,
153.	        'gas':gas
154.	    }
155.	    JsonUpdataMsn = aliLink.Alink(updateMsn)
156.	    print(JsonUpdataMsn)
157.	
158.	    mqtt.push(POST,JsonUpdataMsn) # 定时向阿里云IOT推送我们构建好的Alink协议数据
159.	
160.	    time.sleep(2) # 睡两秒,因为阿里云有每分钟上发信息次数限制

标签:buzzer,树莓,IoT,stats,RAM,智能家居,window,import,DISK
From: https://www.cnblogs.com/kemuling/p/17712492.html

相关文章

  • LED智能家居灯 开关调光 台灯落地灯控制驱动 降压恒流IC AP5191
    产品描述AP5191是一款PWM工作模式,高效率、外围简单、内置功率MOS管,适用于4.5-150V输入的高精度降压LED恒流驱动芯片。输出最大功率150W,最大电流6A。AP5191可实现线性调光和PWM调光,线性调光脚有效电压范围0.55-2.6V.AP5191工作频率可以通过RT外部电阻编程来设定,同时内置抖频电路,......
  • 《安富莱嵌入式周报》第303期:微软推出嵌入式安全物联网RTOS CHERIoT,超强的产品级开源
     更新一期视频教程:DSP视频教程第11期:插补算法,曲线拟合丝滑顺畅,统计函数和基础函数加速实现,汇集SIMD,饱和和MAC乘累加应用实战(2023-02-12)视频版:https://www.bilibili.com/video/BV17j411N7Cr/ 1、微软推出嵌入式安全物联网RTOSCHERIoT知识补充:CHERI的全称是CapabilityHardware......
  • 展会预告 | 图扑邀您共聚 IOTE 国际物联网展·深圳站
    参展时间:9月20日-22日图扑展位:9号馆9B35-1参展地址:深圳国际会展中心(宝安新馆)IOTE2023第二十届国际物联网展·深圳站,将于9月20日-22日在深圳国际会展中心(宝安)9、10、11号馆震撼来袭。本届展会以“IoT构建数字经济底座”为主题,将IoT技术引入实体经济领域,促进数字......
  • Apache IoTDB开发系统之Java 原生接口
    安装依赖JDK>=1.8Maven>=3.6安装方法在根目录下运行:mvncleaninstall-plsession-am-Dmaven.test.skip=true在MAVEN中使用原生接口<dependencies><dependency><groupId>org.apache.iotdb</groupId><artifactId>iotdb-session</......
  • Python开发实例(二十一)智能家居控制器:模拟一个简单的智能家居控制系统,控制虚拟设备的状
    在这个实例中,我们将模拟一个简单的智能家居控制系统,通过Python代码来控制虚拟设备的状态。我们将使用一个字典来表示设备及其状态,并提供用户界面来操作这些设备。下面是一个智能家居控制器的Python程序:#初始化设备状态字典devices={'灯':'关闭','空调':'关闭',......
  • 梅科尔工作室-IoT-南向开发第五次培训笔记
    ADCAPI分析unsignedintIoTAdcRead(unsignedintchannel,unsignedshort*data,IotAdcEquModelSelequModel,IotAdcCurBaiscurBais,unsignedshortrstCnt);参数说明channel:表示ADC通道data:表示指向存储读取数据的地址的指针equModel:表示平均算法的次数......
  • Apache IoTDB开发系统之语法规则
    字面值常量该部分对IoTDB中支持的字面值常量进行说明,包括字符串常量、数值型常量、时间戳常量、布尔型常量和空值。字符串常量字符串是由单引号(')或双引号(")字符括起来的字符序列。示例如下:'astring'"anotherstring"字符串字面值的使用场景:INSERT 或者 SELECT 中用于表达 TE......
  • 树莓派小车-Tips1
    目前树莓派小车文件结构:-usr|--Car|---frp_0.20.0_linux_arm|--mjpg-streamer|---mjpg-streamer-experimental启动网络连接服务:进入frp_0.20.0_linux_arm文件:cdCar/frp_0.20.0_linux_arm/启动frpc客户端服务:./frpc-c./frpc.ini开启摄像头:进入mjpg-streamer-ex......
  • 树莓派4b装系统到运行 Blazor Linux 本地程序全记录
    在Linux下运行gui程序,咱也是第一次做,属于是瞎子过河乱摸一通,写得有什么不对和可以优化的地方,希望各位看官斧正斧正.1.下载烧录器https://www.raspberrypi.com/software/我选择的是Raspbian64位系统,并配置好ssh账号密码,wifi,以便启动后可以直接黑屏ssh连接2.启用roo......
  • 如何使用树莓派搭建一个流媒体服务器 All In One
    如何使用树莓派搭建一个流媒体服务器AllInOneRaspberryPiStreamMeidiaServerRaspberryPiMeidiaPlayerOSEmbyMediaServerhttps://emby.media/https://github.com/MediaBrowser/Embyhttps://apps.apple.com/us/app/emby/id992180193?platform=macEmbyThea......