399|0

227

帖子

3

资源

一粒金砂(中级)

【小型家用气象站】通过uart获取esp8266气象数据 [复制链接]

本帖最后由 reayfei 于 2021-7-18 22:26 编辑

         小型家用气象站需要实现对未来24h的天气预报进行显示,这样就需要一个模块能够,连接网络获取气象网站的信息,很久之前就购买过esp8266模块,那个时候python的学习热潮特别火,所以自己也买了相关书籍。

         后来了解后,发现python非常强大,可以导入很多库,这样你需求的很多功能,仅需要几行代码就能完成,大大提高编码效率。这一次,还能作为完成作品的一部分,也是花费很少的时间,就调试通,功能也很稳定。

         某宝购买到的esp8266模块,到手后,需要烧写基于ESP8266的MicroPython固件

           https://micropython.org/download/#esp8266

         打开常用的串口工具,设置波特率为115200,打开串口并给ESP8266重启上电,打印如下字符说明烧写固件成功:

 

上电打印信息.png

 

 

如何从气象网站获取信息呢?

可以从气象部门或专业的公司网站提供的API进行获取。我这里使用的是心知天气提供的。

需要自己申请一个API密钥,然后使用这个密钥,随时都可以进行获取,心知天气提供的接口有很多种,比如:天气实况,24小时逐小时天气预报,未来15天逐日天气预报和昨日天气,气象灾害预警等等,我这里使用的未来15天逐日天气预报和昨日天气,只需要把红框days=5修改为days=1即可。

 

接口地址.png

 以下是从心知天气获取到的json数据:

{
  "results": [{
    "location": {
      "id": "WX4FBXXFKE4F",
      "name": "北京",
      "country": "CN",
      "path": "北京,北京,中国",
      "timezone": "Asia/Shanghai",
      "timezone_offset": "+08:00"
    },
    "daily": [{                          //返回指定days天数的结果
      "date": "2015-09-20",              //日期
      "text_day": "多云",                //白天天气现象文字
      "code_day": "4",                  //白天天气现象代码
      "text_night": "晴",               //晚间天气现象文字
      "code_night": "0",                //晚间天气现象代码
      "high": "26",                     //当天最高温度
      "low": "17",                      //当天最低温度
      "precip": "0",                    //降水概率,范围0~100,单位百分比(目前仅支持国外城市)
      "wind_direction": "",             //风向文字
      "wind_direction_degree": "255",   //风向角度,范围0~360
      "wind_speed": "9.66",             //风速,单位km/h(当unit=c时)、mph(当unit=f时)
      "wind_scale": "",                 //风力等级
      "rainfall": "0.0",                //降水量,单位mm
      "humidity": "76"                  //相对湿度,0~100,单位为百分比
    }, {
      "date": "2015-09-21",
      "text_day": "晴",
      "code_day": "0",
      "text_night": "晴",
      "code_night": "0",
      "high": "27",
      "low": "17",
      "precip": "0",
      "wind_direction": "",
      "wind_direction_degree": "157",
      "wind_speed": "17.7",
      "wind_scale": "3",
      "rainfall": "0.0",
      "humidity": "76"
    }, {
      ...                               //更多返回结果
    }],
    "last_update": "2015-09-20T18:00:00+08:00" //数据更新时间(该城市的本地时间)
  }]
}

 

micropython源码:

import network
import time
import os
import urequests
import ujson
 
ssid = 'dxxxk'
password ='xxxxxxxxxxxxx'
 
def ConnectNet(ssid ,password):
    mynetwork=network.WLAN(network.STA_IF)
    mynetwork.active(True)
    mynetwork.connect(ssid,password)
 
    while True:
        if(mynetwork.isconnected()):
            break
        else :
            time.sleep(1)
    print(mynetwork.ifconfig())
 
if __name__=='__main__':
    ConnectNet(ssid,password)

    while True:
		result2=urequests.get('https://api.seniverse.com/v3/weather/daily.json?key=xxxxxxxxxxxx&location=dalian&language=en&unit=c&start=0&days=1')
		j2=ujson.loads(result2.text)
		#print(j2['results'][0]['location']['name'],end=' ')
		#print(j2['results'][0]['daily'][0]['date'],end=' ')
		print("A",end=' ')
		print(j2['results'][0]['daily'][0]['code_day'],end=' ')
		print(j2['results'][0]['daily'][0]['high'],end=' ')
		print(j2['results'][0]['daily'][0]['low'],end=' ')
		print(j2['results'][0]['daily'][0]['wind_scale'],end=' ')
		print("B")
		
		time.sleep(20)

          

功能实现后,uart打印出来的气象信息:辽宁大连的未来24小时天气预报。

天气数据截图.png

 

心知天气.png

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

最新文章 更多>>
    关闭
    站长推荐上一条 1/9 下一条

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

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

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

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