2392浏览
查看: 2392|回复: 7

[ESP8266/ESP32] Beetle ESP32 C3 通过网络获取气象数据

[复制链接]
本帖最后由 仔爸 于 2023-6-3 11:58 编辑

在DFROBOT的产品维库中,有一篇关于Beetle ESP32 C3通过网络获取天气数据的文章,可惜是通过Arduino实现的,仔爸在这几天通过MicroPython进行编程,想尝试用MPython实现获取网络天气数据,同时将这些获取的数据发送到SIoT物联网数据库,并通过Mind + V1.8中的可视化面板展示出来。

上一篇[[Beetle ESP32 C3 物联网亮板载灯]]中我们已经尝试将ESP32 C3进行了无线网络的连接,同时通过siot.py接收来自物联网服务器(行空板)的消息。而本例中我们将使用Beetle ESP32 C3联网后,通过API KEY获取OpenWeather网站上的天气数据,发送到物联网服务器。因此我们首先去OpenWeather网站注册账号并获取API KEY。

一、注册OpenWeather账号并获取API KEY

  1. 进入https://openweathermap.org/appid/,单击右上角的Sign in,然后单击Create an Account,然后填写一张创建新账号的表单,完成注册。注意需要进入邮箱单击一下激活账号的链接。
    Beetle ESP32 C3 通过网络获取气象数据图1
    Beetle ESP32 C3 通过网络获取气象数据图2

  2. 单击右上角的用户名,并在下拉菜单中单击My API Keys,进入获取API Key的界面(单击下图中的3处也一样)。默认自动生成了一个Key,也可以单击右侧的Generate按钮创建新的Key。将其中一个key进行复制。Beetle ESP32 C3 通过网络获取气象数据图3

  3. 第一步中单击邮箱中的激活账号链接后,会继续收到一封邮件,里面介绍如何使用Key的方法。我们可以复制并修改其中一些参数,来实现中国某个城市的天气数据。如想获取中国宁波的天气数据,则可将q=后面改为NingBo, CN(无需区分大小写):
    http://api.openweathermap.org/data/2.5/weather?q=NingBo,CN&APPID=0baff7057**********82526d3a5
    Beetle ESP32 C3 通过网络获取气象数据图4

将该链接粘贴到浏览器地址栏,按下回车后,将返回一组以JSON格式的天气数据信息。注意观察里面的相关信息,如temp与气温相关,pressure表示气压,wind是风速等等。
Beetle ESP32 C3 通过网络获取气象数据图5

需要注意的是,此处获取的气温是开氏度,不是国外常用的华氏度,也不是国内常见的摄氏度,关于开氏度的介绍见下面的文字,详见# 为什么绝对零度正好是-273.15度?一文。

1848年,被誉为“热力学之父”开尔文勋爵在其论文《关于一种绝对温标》中,提出了一种与测温物质的属性无关的纯理论上的温标,将这种“绝对温标”将理论上的温度下限值,也就是-273.15℃设为“绝对零度”,并以摄氏度作为其单位增量。是的,这种温标也就是后来的热力学温标,其单位为K(开尔文),根据定义,1K的温度变化与1℃相等,只是两者的计算起点不同而已,两者可以简单地用“K = ℃ + 273.15”来进行换算,比如说1℃,就相当于274.15K。

所以我们只要将获得的气温数据减去273.15就得到了摄氏度。

二、创建消息主题
在行空板的SIoT服务器上创建用于接收并保存天气数据的主题,本例我们仅创建气温和风力两个主题。
Beetle ESP32 C3 通过网络获取气象数据图6

三、编写程序
编写MicroPython程序,并保存到Beetle ESP32 C3设备上。

import urequests
import ujson
import time
import siot #导入同目录下的siot.py

SERVER="192.168.10.223"  #行空板的IP地址
CLIENT_ID=""
IOT_pubTopic_temp='siot/temp'
IOT_pubTopic_windspeed='siot/windspeed'
IOT_UserName='siot'
IOT_PassWord='dfrobot'

siot.init(CLIENT_ID,SERVER,user=IOT_UserName,password=IOT_PassWord)

def WIFIconnect(): #无线链接
    import network
    ssid='shufang'  #无线名称
    password='25222214'  #修改为无线密码
    station=network.WLAN(network.STA_IF)
    if station.isconnected() == True:
        print("WiFi already connected")
        print(station.ifconfig())
        return
    station.active(True)
    station.connect(ssid,password)
    while station.isconnected() == False:
        pass
    print("Connection successful")
    print(station.ifconfig())

WIFIconnect()
siot.connect()

urlpath="https://api.openweathermap.org/data/2.5/weather?q=NingBo,CN&APPID=0baff705*************82526d3a5"

while True:
    time.sleep(2)
    response = urequests.get(urlpath) #从OpenWeather网站获取天气数据流
    dict1=response.json()  #转为json格式
    temp=str('%.2f'%(dict1["main"]["temp"]-273.15)) #开氏度减273.15等于摄氏度,并保留2位小数
    windspeed=str(dict1["wind"]["speed"])
    #print(temp,windspeed)
    siot.publish(IOT_pubTopic_temp,temp,qos=1) #将气温数据发送到物联网服务器,qos=1表示数据保存在服务器上
    siot.publish(IOT_pubTopic_windspeed,windspeed,qos=1) #发送并保存风力数据

四、数据显示在可视化面板
打开Mind+ 1.8,单击右上角的可视化面板按钮,创建一个空白项目,然后连接行空板物联网服务器,并设计两个可视化组件,折线图连接气温主题,进度仪表盘连接风力主题。这样就可以显示物联网服务器上的气象数据了。
Beetle ESP32 C3 通过网络获取气象数据图7

本例我们尝试用Beetle ESP32 C3获取网络数据,并将其作为消息发送者,将获取的数据发送并保存到物联网服务器的数据库中。如果我们为ESP32 C3外接一些传感器,同样可以将数据发送到物联网服务器,其原理是一样的。




txm派瑞深山锹  高级技师

发表于 2023-6-27 11:26:40

话说开发esp系列的固件用arduino环境多还是micropy多呀?还有就是库丰富度问题?
回复

使用道具 举报

仔爸  中级技师
 楼主|

发表于 2023-8-8 00:03:50

txm派瑞深山锹 发表于 2023-6-27 11:26
话说开发esp系列的固件用arduino环境多还是micropy多呀?还有就是库丰富度问题? ...

这个看个人喜好,以及自己掌握的编程语言的程度。最近在学python和micropython,所以都会往这方面靠近。
回复

使用道具 举报

花生编程  中级技匠

发表于 2023-8-23 21:56:32

厉害厉害
回复

使用道具 举报

花生编程  中级技匠

发表于 2023-8-23 21:57:37

不错不错
回复

使用道具 举报

三春牛-创客  初级技神

发表于 2023-8-24 14:15:06

厉害厉害
回复

使用道具 举报

三春牛-创客  初级技神

发表于 2023-8-24 14:17:01

赞赞赞赞赞!
回复

使用道具 举报

txm派瑞深山锹  高级技师

发表于 2023-10-8 14:21:34

仔爸 发表于 2023-8-8 00:03
这个看个人喜好,以及自己掌握的编程语言的程度。最近在学python和micropython,所以都会往这方面靠近。 ...

感谢分享经验,受教了受教了
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail