freedomzjsx 发表于 2022-4-17 16:44:51

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

本帖最后由 freedomzjsx 于 2022-4-17 16:47 编辑

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


【功能】(1)行空板部署Blynk服务端(2)BME680传感器连接掌控板发送温度、湿度、气压数据到Blynk服务端,数据存储到Blynk服务端。
注意:程序不要直接上传,在自动生成的代码区域复制代码,然后粘贴到手动编辑,将IPAddress(116,62,49,166), 8080);中的端口8080修改成8088,然后上传程序。(3)python读取Blynk服务的数据库温度、湿度、气压数据。
(4)行空板屏幕显示读取的数据、利用datetime和time库显示当前时间日期。


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

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

【程序】
import time
import datetime
import psycopg2#导入python连接postgresql数据库的第三方库
from unihiker import GUI

gui=GUI()
conn = psycopg2.connect(dbname="blynk_reporting",user="test",password="test",host="localhost",port="5432") #连接数据库blynk_reporting
t=datetime.datetime.today() #读取datatime库中的当前日
font_family = gui.load_font('RuiSong.ttf') #读取本地字库,可自行下载字体上传到同一目录下
img_imagebg=gui.draw_image(x=120,y=160,image="bg.png",origin='center')

def show_time():#定义显示时间函数
    while True:
      time.sleep(0.5)
      timestrHM = time.strftime("%H:%M")#小时:分钟
      timestrH = time.strftime("%H") #24小时制
      updateHM.config(text=timestrHM)
gui.start_thread(show_time)

def show_week():   
    week_list=["星期一","星期二","星期三","星期四","星期五","星期六","星期日"] #创建星期的中文显示列表
    week=week_list#获取星期,0-6分别对应周一到周日,根据列表的索引显示值为中文
    updateweek.config(text=week) #更新文本为索引对应的值

def show_md():
    month=t.month#获取当前月
    day=t.day      #获取当前日
    updatem.config(text=str(month)+"月") #更新文本为月的值
    updateD.config(text=day)   #更新文本为日的值

def get_temp():#获取温度数据

    temp = conn.cursor()#创建指针
    temp_sql="select doublevalue from reporting_raw_data where pintype like 'v' and pin=0 order by ts desc limit 1"
    temp.execute(temp_sql)
      #执行SQL语句:获取reporting_raw_data表中端口类型为V(虚拟端口),端口为0的以时间排序的最新一条数据,输出doublevalue
    temp_row=temp.fetchall()
    conn.commit()#提交事务
    updatetemp.config(text=temp_row)

def get_hum():    #获取湿度数据   
    hum = conn.cursor()#创建指针
    hum_sql="select doublevalue from reporting_raw_data where pintype like 'v' and pin=1 order by ts desc limit 1"
    hum.execute(hum_sql)
    #执行SQL语句:获取reporting_raw_data表中端口类型为V(虚拟端口),端口为1的以时间排序的最新一条数据,输出doublevalue
    hum_row=hum.fetchall()
    conn.commit()#提交事务
    updatehum.config(text=hum_row)


def get_hpa():      #获取气压数据
    hpa = conn.cursor()#创建指针
    hpa_sql="select doublevalue from reporting_raw_data where pintype like 'v' and pin=2 order by ts desc limit 1"
    hpa.execute(hpa_sql)
    #执行SQL语句:获取reporting_raw_data表中端口类型为V(虚拟端口),端口为2的以时间排序的最新一条数据,输出doublevalue
    hpa_row=hpa.fetchall()
    conn.commit()#提交事务
    updatehpa.config(text=hpa_row)



updateHM = gui.draw_text(x=75, y=70, text='',color=(128,0,128),origin='bottom',font_family = font_family,font_size=36)
#显示小时:分钟

updatem= gui.draw_text(x=168, y=35, text='',color=(128,0,128),origin='bottom' ,font_family = font_family,font_size=12) #显示月
updateD= gui.draw_text(x=208, y=55, text='',color=(128,0,128),origin='bottom' ,font_family = font_family,font_size=28) #显示日
updateweek= gui.draw_text(x=208, y=70, text='',color=(128,0,128),origin='bottom' ,font_family = font_family,font_size=10) #显示星期


img_imagetemp=gui.draw_image(x=18,y=93,w=40,h=25,image="temp.png",origin='center')#显示温度表示图
updatetemp= gui.draw_text(x=58, y=110, text='',color="#f36f34",origin='bottom' ,font_family = font_family,font_size=18) #显示温度
updatetemp2= gui.draw_text(x=95, y=108, text='℃',color="#f36f34",origin='bottom' ,font_family = font_family,font_size=12)


img_imagehum = gui.draw_image(x=140,y=95,w=40,h=25,image="hum.png",origin='center')#显示湿度表示图
updatehum= gui.draw_text(x=185, y=110, text='',color="#f36f34",origin='bottom' ,font_family = font_family,font_size=18) #显示湿度
updatehum2= gui.draw_text(x=219, y=107, text='%',color="#f36f34",origin='bottom' ,font_family = font_family,font_size=12)

img_imagehpa = gui.draw_image(x=20,y=140,w=40,h=25,image="pa.png",origin='center')#显示气压表示图
updatehpa= gui.draw_text(x=85, y=157, text='',color='#f36f34',origin='bottom' ,font_family = font_family,font_size=18) #显示气压
updatehpa2= gui.draw_text(x=150, y=155, text='hPa',color="#f36f34",origin='bottom' ,font_family = font_family,font_size=12)


#gui.fill_round_rect(x=5, y=237, w=112, h=75, r=5,width=3, color="#57b5ff")

#gui.fill_round_rect(x=122, y=237, w=113, h=75, r=5,width=3, color="#57b5ff")

while True:   
    get_temp()
    get_hum()
    get_hpa()
    show_week()
    show_md()
    time.sleep(1)



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不支持行空板,正在测试
页: [1]
查看完整版本: 行空+掌控+Blynk桌面气象站