仔爸 发表于 2023-6-3 11:54:23

Beetle ESP32 C3 通过网络获取气象数据

本帖最后由 仔爸 于 2023-6-3 11:58 编辑

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


上一篇[]中我们已经尝试将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**,然后填写一张创建新账号的表单,完成注册。注意需要进入邮箱单击一下激活账号的链接。



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

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


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


需要注意的是,此处获取的气温是**开氏度**,不是国外常用的华氏度,也不是国内常见的摄氏度,关于开氏度的介绍见下面的文字,详见[# 为什么绝对零度正好是-273.15度?](https://www.zhihu.com/question/54691426)一文。
>1848年,被誉为“[热力学](https://www.zhihu.com/search?q=%E7%83%AD%E5%8A%9B%E5%AD%A6&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A2603061228%7D)之父”开尔文勋爵在其论文《关于一种[绝对温标](https://www.zhihu.com/search?q=%E7%BB%9D%E5%AF%B9%E6%B8%A9%E6%A0%87&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A2603061228%7D)》中,提出了一种与测温物质的属性无关的纯理论上的温标,将这种“绝对温标”将理论上的温度下限值,也就是-273.15℃设为“绝对零度”,并以摄氏度作为其单位增量。是的,这种温标也就是后来的[热力学温标](https://www.zhihu.com/search?q=%E7%83%AD%E5%8A%9B%E5%AD%A6%E6%B8%A9%E6%A0%87&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A2603061228%7D),其单位为K(开尔文),根据定义,1K的温度变化与1℃相等,只是两者的计算起点不同而已,两者可以简单地用“K = ℃ + 273.15”来进行换算,比如说1℃,就相当于274.15K。

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

二、创建消息主题
在行空板的SIoT服务器上创建用于接收并保存天气数据的主题,本例我们仅创建气温和风力两个主题。


三、编写程序
编写MicroPython程序,并保存到Beetle ESP32 C3设备上。
```python
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获取网络数据,并将其作为消息发送者,将获取的数据发送并保存到物联网服务器的数据库中。如果我们为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,所以都会往这方面靠近。 ...

感谢分享经验,受教了受教了
页: [1]
查看完整版本: Beetle ESP32 C3 通过网络获取气象数据