2215浏览
查看: 2215|回复: 6

行空+掌控+Blynk桌面气象站

[复制链接]
本帖最后由 freedomzjsx 于 2022-4-17 16:47 编辑

【起源】
       抢购的行空板总要有点用武之地,屏幕是一大亮点,就像一块白布总想着画点什么东西上去,能不能来个桌面气象站呢?为了后续能对气象数据进行更深入的分析和可视化,SIoT的存储数据感觉不太够用,于是决定采用Blynk物联服务的数据库存储数据,基于在树莓派和虚谷号部署Blynk-server的基础,很顺利的在行空板上完成部署。如何部署,请参看我论坛帖子《行空板部署自启动Blynk》https://mc.dfrobot.com.cn/thread-312772-1-1.html

【展示】
行空+掌控+Blynk桌面气象站图1

【功能】
(1)行空板部署Blynk服务端
(2)BME680传感器连接掌控板发送温度、湿度、气压数据到Blynk服务端,数据存储到Blynk服务端。
行空+掌控+Blynk桌面气象站图2
注意:程序不要直接上传,在自动生成的代码区域复制代码,然后粘贴到手动编辑,将IPAddress(116,62,49,166), 8080);中的端口8080修改成8088,然后上传程序。
(3)python读取Blynk服务的数据库温度、湿度、气压数据。

(4)行空板屏幕显示读取的数据、利用datetime和time库显示当前时间日期。

行空+掌控+Blynk桌面气象站图3

【器材】
行空板、掌控板、BME680传感器


【后续】
1、完善气象数据,缺传感器啊
2、利用python库进行气象数据可视化,利用Flask进行web展示,技术能力不行还在学习中
3、利用metabase进行数据可视化,web展示更方便
4、完成外壳设计

【程序】
  1. import time
  2. import datetime
  3. import psycopg2  #导入python连接postgresql数据库的第三方库
  4. from unihiker import GUI
  5. gui=GUI()
  6. conn = psycopg2.connect(dbname="blynk_reporting",user="test",password="test",host="localhost",port="5432") #连接数据库blynk_reporting
  7. t=datetime.datetime.today() #读取datatime库中的当前日
  8. font_family = gui.load_font('RuiSong.ttf') #读取本地字库,可自行下载字体上传到同一目录下
  9. img_imagebg=gui.draw_image(x=120,y=160,image="bg.png",origin='center')
  10. def show_time():  #定义显示时间函数
  11.     while True:
  12.         time.sleep(0.5)
  13.         timestrHM = time.strftime("%H:%M")  #小时:分钟
  14.         timestrH = time.strftime("%H") #24小时制
  15.         updateHM.config(text=timestrHM)
  16. gui.start_thread(show_time)
  17. def show_week():   
  18.     week_list=["星期一","星期二","星期三","星期四","星期五","星期六","星期日"] #创建星期的中文显示列表
  19.     week=week_list[t.weekday()]  #获取星期,0-6分别对应周一到周日,根据列表的索引显示值为中文
  20.     updateweek.config(text=week) #更新文本为索引对应的值
  21. def show_md():
  22.     month=t.month  #获取当前月
  23.     day=t.day      #获取当前日
  24.     updatem.config(text=str(month)+"月") #更新文本为月的值
  25.     updateD.config(text=day)   #更新文本为日的值
  26. def get_temp():  #获取温度数据
  27.     temp = conn.cursor()  #创建指针
  28.     temp_sql="select doublevalue from reporting_raw_data where pintype like 'v' and pin=0 order by ts desc limit 1"
  29.     temp.execute(temp_sql)
  30.         #执行SQL语句:获取reporting_raw_data表中端口类型为V(虚拟端口),端口为0的以时间排序的最新一条数据,输出doublevalue
  31.     temp_row=temp.fetchall()
  32.     conn.commit()  #提交事务
  33.     updatetemp.config(text=temp_row)
  34. def get_hum():    #获取湿度数据   
  35.     hum = conn.cursor()  #创建指针
  36.     hum_sql="select doublevalue from reporting_raw_data where pintype like 'v' and pin=1 order by ts desc limit 1"
  37.     hum.execute(hum_sql)
  38.     #执行SQL语句:获取reporting_raw_data表中端口类型为V(虚拟端口),端口为1的以时间排序的最新一条数据,输出doublevalue
  39.     hum_row=hum.fetchall()
  40.     conn.commit()  #提交事务
  41.     updatehum.config(text=hum_row)
  42. def get_hpa():      #获取气压数据  
  43.     hpa = conn.cursor()  #创建指针
  44.     hpa_sql="select doublevalue from reporting_raw_data where pintype like 'v' and pin=2 order by ts desc limit 1"
  45.     hpa.execute(hpa_sql)
  46.     #执行SQL语句:获取reporting_raw_data表中端口类型为V(虚拟端口),端口为2的以时间排序的最新一条数据,输出doublevalue
  47.     hpa_row=hpa.fetchall()
  48.     conn.commit()  #提交事务
  49.     updatehpa.config(text=hpa_row)
  50. updateHM = gui.draw_text(x=75, y=70, text='',color=(128,0,128),origin='bottom',font_family = font_family,font_size=36)
  51. #显示小时:分钟
  52. updatem  = gui.draw_text(x=168, y=35, text='',color=(128,0,128),origin='bottom' ,font_family = font_family,font_size=12) #显示月
  53. updateD  = gui.draw_text(x=208, y=55, text='',color=(128,0,128),origin='bottom' ,font_family = font_family,font_size=28) #显示日
  54. updateweek  = gui.draw_text(x=208, y=70, text='',color=(128,0,128),origin='bottom' ,font_family = font_family,font_size=10) #显示星期
  55. img_imagetemp=gui.draw_image(x=18,y=93,w=40,h=25,image="temp.png",origin='center')#显示温度表示图
  56. updatetemp  = gui.draw_text(x=58, y=110, text='',color="#f36f34",origin='bottom' ,font_family = font_family,font_size=18) #显示温度
  57. updatetemp2  = gui.draw_text(x=95, y=108, text='℃',color="#f36f34",origin='bottom' ,font_family = font_family,font_size=12)
  58. img_imagehum = gui.draw_image(x=140,y=95,w=40,h=25,image="hum.png",origin='center')#显示湿度表示图
  59. updatehum  = gui.draw_text(x=185, y=110, text='',color="#f36f34",origin='bottom' ,font_family = font_family,font_size=18) #显示湿度
  60. updatehum2  = gui.draw_text(x=219, y=107, text='%',color="#f36f34",origin='bottom' ,font_family = font_family,font_size=12)
  61. img_imagehpa = gui.draw_image(x=20,y=140,w=40,h=25,image="pa.png",origin='center')#显示气压表示图
  62. updatehpa  = gui.draw_text(x=85, y=157, text='',color='#f36f34',origin='bottom' ,font_family = font_family,font_size=18) #显示气压
  63. updatehpa2  = gui.draw_text(x=150, y=155, text='hPa',color="#f36f34",origin='bottom' ,font_family = font_family,font_size=12)
  64. #gui.fill_round_rect(x=5, y=237, w=112, h=75, r=5,width=3, color="#57b5ff")
  65. #gui.fill_round_rect(x=122, y=237, w=113, h=75, r=5,width=3, color="#57b5ff")
  66. while True:   
  67.     get_temp()
  68.     get_hum()
  69.     get_hpa()
  70.     show_week()
  71.     show_md()
  72.     time.sleep(1)
复制代码



desk.zip

2.28 MB, 下载次数: 40

解压上传到jupyter,直接运行desk.ipynb

hnyzcj  版主

发表于 2022-4-17 19:10:29

老版,你搞大了,干嘛还用掌控,直接连接行空板不香吗
回复

使用道具 举报

freedomzjsx  中级技师
 楼主|

发表于 2022-4-17 20:05:14

hnyzcj 发表于 2022-4-17 19:10
老版,你搞大了,干嘛还用掌控,直接连接行空板不香吗

行空连接bme 680写语句不会
回复

使用道具 举报

freedomzjsx  中级技师
 楼主|

发表于 2022-4-17 20:17:54

有680的python库吗?
回复

使用道具 举报

Hockel  中级技匠

发表于 2022-4-17 20:23:37

本帖最后由 Hockel 于 2022-4-17 20:28 编辑
freedomzjsx 发表于 2022-4-17 20:17
有680的python库吗?

import time
from pinpong.board import Board
from pinpong.libs.dfrobot_bme680 import DFRobot_BME680

Board("uno").begin()#初始化,选择板型和端口号,不输入端口号则进行自动识别
#Board("uno","COM36").begin()  #windows下指定端口初始化
#Board("uno","/dev/ttyACM0").begin()   #linux下指定端口初始化
#Board("uno","/dev/cu.usbmodem14101").begin()   #mac下指定端口初始化

sensor = DFRobot_BME680()

while True:
    if sensor.get_sensor_data():
        print("-------------------")
        print("temperature: {} ℃".format(sensor.data.temperature))
        print("pressure: {} Pa".format(sensor.data.pressure))
        print("humidity: {} %rh".format(sensor.data.humidity))
        print("altitudu: {} m".format(sensor.data.altitudu))
        print("gas_resistance: {} ohm".format(sensor.data.gas_resistance))
        print("-------------------")
    time.sleep(1)

回复

使用道具 举报

freedomzjsx  中级技师
 楼主|

发表于 2022-4-17 20:32:03

本帖最后由 freedomzjsx 于 2022-4-18 09:53 编辑
Hockel 发表于 2022-4-17 20:23
import time
from pinpong.board import Board
from pinpong.libs.dfrobot_bme680 import DFRobot_BME680

已测试,无法使用,经常初始化错误,偶尔能正常
回复

使用道具 举报

freedomzjsx  中级技师
 楼主|

发表于 2022-4-19 16:18:56

本帖最后由 freedomzjsx 于 2022-4-19 16:26 编辑
hnyzcj 发表于 2022-4-17 19:10
老版,你搞大了,干嘛还用掌控,直接连接行空板不香吗

Blynk app不支持行空板,正在测试
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail