打印
[IOT技术]

通过WIFI模块(ESP8266)获取天气预报

[复制链接]
4591|66
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wwppd|  楼主 | 2023-5-23 22:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用到的AT指令如下:

1. 关闭回显

ATE0

2. 设置为STA模式

AT+CWMODE_DEF=1

3. 设置WIFI名称和密码

AT+CWJAP_DEF=”SSID”,”Password”

4. 开启DHCP

AT+CWDHCP_DEF=1,1

5. 设置为单连接模式

AT+CIPMUX=0

6. 设置为透传模式

AT+CIPMODE=1



2.获取网络时间

获取网络时间的方式有两种,对于较新版本的固件,可以直接通过AT指令来获取。(可以通过AT+GMR指令来查询固件的版本。)

AT+CIPSNTPTIME?

对于较老版本的固件,不支持该AT指令,只能通过自己连接网络服务器来获取当前时间。具体需要的AT指令如下:

1.建立TCP链接

AT+CIPSTART="TCP","www.beijing-time.org",80

2.打开传透模式

AT+CIPSEND

3.收到‘>’符号后,随便发送个数据

4.等待接收数据

接收的数据可以先用网络调试助手来测试,如下,可以看到,数据中包含了当前的日期和时间信息,我们可以先找到字符串中“Data”的位置,再解析后面的数据。数据格式固定,直接按照字符位置解析就行。

需要注意的是,获取的这个时间是格林威治时间,与北京时间相差8个小时。

当然,也可以通过连接其它NTP时间服务器来获取时间,步骤是类似的。



3.获取天气预报

天气的获取就要比时间稍复杂一些,网上有很多可以提供天气预报的服务器,有些可以免费使用,一般都需要注册一个账号,这里以“心知天气”为例进行介绍。步骤如下:

1.注册账号。在该网站注册一个账号:
​ ​https://www.seniverse.com/。注册之后就可以通过其开放的API来获取天气预报。有免费版和付费版,区别在于访问频次和获取的天气信息内容不同。如下:​​



2.查看私钥。在控制台查看账号的私钥,这个在程序中要用。



3.API。有了这个私钥,我们就可以通过API来获取天气预报了,相关的API说明可以在这里查询:

​ ​https://seniverse.yuque.com/books/share/f4f9bf1a-d3d9-4a68-8996-950f8c88400e/sl6gvt#d29hl​​

先用网络调试助手测试一下:



可以看到,通过TCP连接服务器后,发送GET请求就可以收到天气预报数据,接下来就是解析数据了。


使用特权

评论回复
沙发
tpgf| | 2023-6-6 15:14 | 只看该作者
为什么我们使用at指令的时候都需要进入透传模式呢

使用特权

评论回复
板凳
qcliu| | 2023-6-6 15:33 | 只看该作者
SerialNet模式将本地异步串口通信转换成基于TCP/UDP协议的网络通信。其主要目是将串行通信的简单设备实现在网络上的通信,而这些设备不需要做任何改变

使用特权

评论回复
地板
drer| | 2023-6-6 16:09 | 只看该作者
DTU进入SerialNet模式后,既可以作为客户端模式也可作为服务端模式。工作在SerialNet模式下的DTU将自动完成串口到网络通信的转换,所有数据可透明的在两设备之间双向传输。

使用特权

评论回复
5
coshi| | 2023-6-6 16:25 | 只看该作者
SerialNet模式的建立首先要用AT+I命令定义所有相关的参数,然后再用一特殊AT+I命令进入SerialNet模式

使用特权

评论回复
6
kxsi| | 2023-6-6 16:48 | 只看该作者
SerialNet模式定义了一系列相关的操作参数,这些参数的定义实现了网络连接所需要的属性

使用特权

评论回复
7
wiba| | 2023-6-6 17:09 | 只看该作者
当DTU工作在SerialNet模式时,在设备串口与网络之间他的工作方式就象路由器的路由过程。

使用特权

评论回复
8
jtracy3| | 2023-6-6 17:30 | 只看该作者
esp8266与单片机硬件连接好,然后参照datasheet,写出相应的代码就好了。

使用特权

评论回复
9
gygp| | 2023-6-7 21:15 | 只看该作者
一般使用JSON格式进行编码和解析。使用开源的JSON库,如cJSON等,可以方便地解析JSON数据,提取所需信息。

使用特权

评论回复
10
10299823| | 2023-6-8 22:24 | 只看该作者
可以在PC端制作一个通过互联网获取网站天气信息和时间的程序

使用特权

评论回复
11
tabmone| | 2023-6-8 22:44 | 只看该作者
可以通过第三方网站的API接口获取相关信息

使用特权

评论回复
12
geraldbetty| | 2023-6-8 23:06 | 只看该作者
需要使用WIFI模块连接到互联网,获取网络访问权限。连接WIFI可以使用AT指令或者使用开发板上的API进行配置

使用特权

评论回复
13
uptown| | 2023-6-10 11:03 | 只看该作者
根据解析得到的天气信息,进行相应的处理和显示。可以将天气信息显示在液晶屏幕、串口终端等设备上,或者通过声音提示、灯光等方式进行反馈。

使用特权

评论回复
14
zerorobert| | 2023-6-10 11:25 | 只看该作者
通过向天气预报API发送HTTP请求,获取相应的天气数据。

使用特权

评论回复
15
benjaminka| | 2023-6-10 11:46 | 只看该作者
在编写代码时,需要考虑API的访问频率限制和数据格式等问题。

使用特权

评论回复
16
juliestephen| | 2023-6-10 12:39 | 只看该作者
常见的天气预报API有心知天气、聚合数据等,可以根据实际需求选择合适的API。

使用特权

评论回复
17
juliestephen| | 2023-6-10 13:18 | 只看该作者
使用AT+CIPSNTPTIME?指令获取当前的网络时间信息,包括年、月、日、时、分、秒等信息。

使用特权

评论回复
18
pmp| | 2023-6-10 13:32 | 只看该作者
在使用AT指令获取时间时,需要确保ESP8266已经连接上了可用的WiFi网络,并且能够正常访问NTP服务器。

使用特权

评论回复
19
loutin| | 2023-6-10 13:45 | 只看该作者
使用AT指令获取网络时间需要确保ESP8266已经成功连接到Wi-Fi网络,并且网络畅通。

使用特权

评论回复
20
phoenixwhite| | 2023-6-10 13:58 | 只看该作者
esp8266可以做路由器吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

44

主题

2808

帖子

2

粉丝