785|3

3

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【得捷电子Follow me第1期】项目总结 :紫外线强度提示 [复制链接]

  本帖最后由 TonyOne 于 2023-7-2 21:08 编辑

内容一:视频

播放器加载失败: 未检测到Flash Player,请到安装
1_2_1


内容二: 项目总结报告

1. 项目描述

    感谢电子工程世界和得捷电子举办的 Follow me 活动,让我有机会能够在专业大牛的带领下做出了这个小制作。

    按照主办方要求,我购买了PicoW及转接板、ssd1315 oled屏以及GPS模块。本来还想用个joystick做翻页功能后来发现自己的心知天气账户功能很有限,所以一屏就足够了。

    我涉及的项目是“紫外线强度提示”。这几天气温高、太阳晒,别说紫外线了,红外线都强。但是其实阴天、气温低的时候,紫外线一样很强的。虽说手机有些天气预报软件附带紫外线预报功能,但是对于我们经常出行的人来说,不一定会想到把地点调成自己所在的地方。所以我想到,可以用GPS的定位功能,获取所在地点的坐标,然后再通过网络服务,获取紫外线(UV)辐射强度,这样在屋里就可知道外边的情况了。

    我想到用GPS坐标来查紫外线辐射,还有一个重要原因,就是我用过“心知天气”这个平台。这个平台的“生活指数”功能下,可以获取指定城市的基本、交通、生活、运动、健康 5 大类共 27 项生活指数。但是有限制——付费用户可获取全部数据; 免费用户只返回 6 项基本类生活指数,而且只有概述brief,没有details(详情请阅读文档 https://docs.seniverse.com/api/life/suggestion.html)。但这也足够我做这个小项目了。

    收到板子并跟着学习了视频课程后,我先做了实验,学会了点亮板载led、PWM驱动蜂鸣器、用ssd1306的库驱动ssd1315、连接WiFi并在网络上发请求。然后就开始实验,发现GPS信号不怎么稳定,于是想到可以把上一次的坐标缓存到pos.txt里。坐标缓存到pos.txt里,为了安全起见,我把wifi的用户口令、心知天气的key,分别存到wifi.txt和key.txt里,在初始化阶段取出。

    于是,系统运行的流程基本就确定了:
    首先import库、初始化引脚、初始化UART和I2C、读取各项设置,然后获取GPS坐标,如果没得到就取保存的GPS坐标,否则更新保存GPS坐标,在后面就连接WIFI,从“心知天气”用GPS坐标获取本地紫外线强度和气温,最后通过oled屏显示出来。

     最终效果就是上边的视频了。再次感谢电子工程世界和得捷电子。

 

2. 各功能对应的主要代码片段及说明

(1)驱动ssd1315 oled屏,使用的是ssd1306库:

ssd1306.py (4.81 KB, 下载次数: 0)

上传到PICO上后,就可以导入了

  • from machine import Pin,I2C
  • from ssd1306 import SSD1306_I2C
  • i2c=I2C(0,sda=Pin(8),scl=Pin(9),freq=400000)
  • oled = SSD1306_I2C(128,64,i2c)

需要显示内容的时候,用这样的方式

  • oled.contrast(50)
  • oled.fill(0)
  • oled.text("loc:", 2, 5)
  • oled.text(" uv:", 2, 23)
  • oled.text(" C:", 2, 41)
  • oled.text( path , 40, 5)
  • oled.text( uv , 40, 23)
  • oled.text( t , 40, 41)
  • oled.show()

(2)GPS使用uart读入

  • from machine import Pin,UART
  • gps_module = UART(0, baudrate=9600,tx=Pin(0), rx=Pin(1))

解析GPS返回的串用micropyGPS库

micropyGPS.py (29.56 KB, 下载次数: 0)

也是找的现成的代码处理

  • my_gps = MicropyGPS(8)#东八区的修正
  • lat=''
  • lng=''
  • s_time=''
  • rtc=''
  • def get_GPS_values(com):
  • global lat,lng,s_time,rtc
  • time.sleep_ms(200)
  • cc = com.readline()
  • if cc:
  • cc1=cc.decode()
  • print(cc1)
  • for x in cc:
  • my_gps.update(chr(x))
  • lat=str(my_gps.latitude[0] + (my_gps.latitude[1] / 60))
  • lng=str(my_gps.longitude[0] + (my_gps.longitude[1] / 60))
  • date = "20"+str(my_gps.date[2])+"-"+str(my_gps.date[1])+"-"+str(my_gps.date[0])+"T"
  • timestamp = my_gps.timestamp
  • rtc = str(int(timestamp[0]))+":"+str(int(timestamp[1]))+":"+str(int(timestamp[2]))
  • s_time= date+rtc+"Z"
  • print(lat,lng,s_time,rtc)
  • return lat,lng,s_time,rtc

(3)连WIFI用micro python自带的network库

  • import network
  • ……
  • wlan = network.WLAN(network.STA_IF)
  • wlan.active(True )
  • wlan.connect(ssid, password)
  • #尝试联网
  • max_wait = 10
  • while max_wait >0:
  • if wlan.status() < 0 or wlan.status() >= 3:
  • break
  • max_wait -= 1
  • time.sleep(1)
  • #判断联网状态
  • if wlan.status() != 3:
  • return None

(4)从“心知天气”查UV和温度,用urequests,然后用json解析

  • import urequests,json
  • ……
  • def url_rtn(url):
  • r = urequests.get( url )
  • s=r.content
  • r.close()
  • if s:
  • s = s.decode()
  • d=json.loads(s)
  • return d
  • else:
  • return None

调用心知天气的http get

  • uv,t,path=(None,None,None)
  • d=url_rtn( "https://api.seniverse.com/v3/life/suggestion.json?key=%s&location=%f:%f&language=en&days=1"%(str(p_key) ,float(p_lat),float(p_lng) ))
  • if d:
  • uv = d['results'][0]['suggestion'][0]['uv']['brief']
  • path = d['results'][0]['location']['name']
  • o=url_rtn( "https://api.seniverse.com/v3/weather/now.json?key=%s&location=%f:%f&language=en&unit=c"%( str(p_key) ,float(p_lat),float(p_lng) ))
  • if o:
  • t = o['results'][0]['now']['temperature']
  • print(t)
  • if not path :
  • path = d['results'][0]['location']['name']
  • return uv,t,path

 

3. 功能展示及说明(图文并茂)

功能很简单,就是获取GPS坐标,然后连接WIFI,从“心知天气”用GPS坐标获取本地紫外线强度和气温,最后通过oled屏显示出来。


4. 对本活动的心得体会(包括意见或建议)

经过本次活动,熟悉了microPython,上手了树莓Pico,感觉收获很大。再次感谢电子工程世界和得捷电子。

 

内容三:可编译下载的代码

注意key要到www.seniverse.com去申请,WiFi配置用你自己手机的。

prj_20230630113147.rar (11.15 KB, 下载次数: 0)

https://download.eeworld.com.cn/detail/TonyOne/628473

 

最新回复

感谢楼主的分享,恭喜完成任务,这个开板可以深入研究,希望多来EEWORLD展示楼主的才华。   详情 回复 发表于 2023-7-1 09:24
点赞(1) 关注
 
 

回复
举报

7336

帖子

2

TA的资源

版主

沙发
 

我以为是通过传感器获取紫外线强度呢,不过通过定位这个方法获取紫外线强度也是很不错的!

 
 
 

回复

4953

帖子

12

TA的资源

版主

板凳
 
他这个就是用API获取显示,不过也很不错。各有千秋,毕竟自己测要硬件
 
 
 

回复

7141

帖子

11

TA的资源

版主

4
 

感谢楼主的分享,恭喜完成任务,这个开板可以深入研究,希望多来EEWORLD展示楼主的才华。

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
福禄克有奖直播:高精度测温赋能电子制造 报名中!
直播时间:2025年2月28日(周五)上午10:00
直播主题:高精度测温赋能电子制造
小伙伴们儿快来报名直播吧~好礼等你拿!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表