(
课件网) 第14课 智能物联系统的软件设计 年 级:八年级 学 科:初中信息科技(浙教版) 采集数据 发布数据 订阅/存储数据 智能校园数字气象站 问题思考:硬件搭建好后就能直接获取气象数据吗? 软件编写 发布 订阅 获取 呈现数据 知识回顾 中介 Wifi 无线路由器 任务要求:通过编程实现气象数据的实时采集,每隔一段时间获取新数据,并在屏幕上显示。 日积月累 Python:丰富的类库 编程的过程: ①导入相应库 ②调用相应的函数 编程软件: 参考函数: 温度:aht20.read_temp() 气压:bme.pressure()/1000 风速:WindSpeed(pin16,factor=4.5) 风向:WindDirection(pin14) 屏幕显示:oled.print(x,y,data,num) 发布数据到主题:mqtt.publish(topic,msg) 订阅主题:mqtt.subscribe(topic,event) 任务一:采集数据 任务一:采集数据 ① 明确算法 01 Wifi连接 MQTT连接 采集数据 OLED显示数据 每隔一段时间 发布数据到对应主题 任务要求:将采集到的气象数据发布到物联中台。 ②创建项目主题 1 2 3 4 主题名称建议 首字母大写 任务二:发布数据 01 Wifi连接 MQTT连接 采集数据 OLED显示数据 每隔一段时间 发布数据到不同主题 参考程序 from npython import * while True: #采集气象数据,并赋值给相应变量 wendu=aht20.read_temp() qiya=bme.pressure()/1000 #oled屏幕显示 oled.print(4,1,'校园数字气象站',1) oled.print(5,2,"温度:"+str (wendu), 1) oled.print(5,3,"气压:"+str (qiya), 1) time.sleep(5) mqtt.publish(“WenDu”,str(wendu)) ipserver="xxkj" #无线名称 ippass="123456789" #无线密码 ip=wifi.connect(ipserver,ippass) # 网络连接 server ="121.5.75.157" # MQTT服务器地址 port =1883 # MQTT服务器端口号 userId="4052" #用户ID projectId="Du0oKLv6fUBRisOHxBWeAJkJ7GNZfvMf" #项目ID mqtt.config(server,port,projectId=projectId,userId=userId,keepalive=1000) #配置MQTT mqtt.connect() #连接MQTT服务器 mqtt.publish(“QiYa”,str(qiya)) ③ 编写程序 任务二:发布数据 01 任务二:发布数据 MQTT连接 订阅主题 获取该主题下的数据 存储在数据库文件中 import mqttc,time,sqlite3 #导入MQTT库文件、time时间模块、sqlite3数据库模块 srv = "121.5.75.157" # MQTT服务器地址 port = 1883 # MQTT服务器端口号 projectId = 'e0AUj5N84pCm9zI8ujiHrVWdNrGJfzm7' #定义项目ID userId = '4089' #用户ID mqttc.config(srv,port,projectId=projectId,userId=userId) #mqtt连接参数配置 mqttc.connect() #mqtt连接 sub_topic = 'WenDu' #订阅的主题名称 #定义订阅回调函数 def sub_cb(topic,msg): data=msg.decode('utf-8') #将接收到的消息从字节类型转换为字符串类型 cmd=eval(data) #将字符串类型的数据转换成字典类型 print('订阅结果返回:',topic,cmd['msg']) try: #订阅传感器的数据 保存到数据库 now=time.strftime('%Y-%m-%d %H:%M:%S') #获取当前时间 uid=cmd['userId'] # 提取消息中的用户ID和数据值 value=cmd['msg'] # 准备插入数据库的SQL语句 sql=f"INSERT INTO weather(time,userid,topic,msg) VALUES('{now}','{uid}','{topic}','{value}')" conn=sqlite3.connect('database.db') # 连接到SQLite数据库 conn.execute(sql) # 执行SQL语句 conn.commit() # 提交事务 #订阅主题 mqttc.subscribe(sub_topic,sub_cb) 是否有新消息 是 只需订阅一次,当有新的消息时,订阅者便会被通知。 否 任务三:订阅主题存储数据 任务三:订阅主题存储数据 折线图更清晰呈现数据的变化趋势,易于分析 表格形式 折线图形式 任务要求:将获取的某一天 ... ...