wwppd 发表于 2023-5-23 22:00

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

用到的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将自动完成串口到网络通信的转换,所有数据可透明的在两设备之间双向传输。

coshi 发表于 2023-6-6 16:25

SerialNet模式的建立首先要用AT+I命令定义所有相关的参数,然后再用一特殊AT+I命令进入SerialNet模式

kxsi 发表于 2023-6-6 16:48

SerialNet模式定义了一系列相关的操作参数,这些参数的定义实现了网络连接所需要的属性

wiba 发表于 2023-6-6 17:09

当DTU工作在SerialNet模式时,在设备串口与网络之间他的工作方式就象路由器的路由过程。

jtracy3 发表于 2023-6-6 17:30

esp8266与单片机硬件连接好,然后参照datasheet,写出相应的代码就好了。

gygp 发表于 2023-6-7 21:15

一般使用JSON格式进行编码和解析。使用开源的JSON库,如cJSON等,可以方便地解析JSON数据,提取所需信息。

10299823 发表于 2023-6-8 22:24

可以在PC端制作一个通过互联网获取网站天气信息和时间的程序

tabmone 发表于 2023-6-8 22:44

可以通过第三方网站的API接口获取相关信息

geraldbetty 发表于 2023-6-8 23:06

需要使用WIFI模块连接到互联网,获取网络访问权限。连接WIFI可以使用AT指令或者使用开发板上的API进行配置

uptown 发表于 2023-6-10 11:03

根据解析得到的天气信息,进行相应的处理和显示。可以将天气信息显示在液晶屏幕、串口终端等设备上,或者通过声音提示、灯光等方式进行反馈。

zerorobert 发表于 2023-6-10 11:25

通过向天气预报API发送HTTP请求,获取相应的天气数据。

benjaminka 发表于 2023-6-10 11:46

在编写代码时,需要考虑API的访问频率限制和数据格式等问题。

juliestephen 发表于 2023-6-10 12:39

常见的天气预报API有心知天气、聚合数据等,可以根据实际需求选择合适的API。

juliestephen 发表于 2023-6-10 13:18

使用AT+CIPSNTPTIME?指令获取当前的网络时间信息,包括年、月、日、时、分、秒等信息。

pmp 发表于 2023-6-10 13:32

在使用AT指令获取时间时,需要确保ESP8266已经连接上了可用的WiFi网络,并且能够正常访问NTP服务器。

loutin 发表于 2023-6-10 13:45

使用AT指令获取网络时间需要确保ESP8266已经成功连接到Wi-Fi网络,并且网络畅通。

phoenixwhite 发表于 2023-6-10 13:58

esp8266可以做路由器吗?
页: [1] 2 3 4
查看完整版本: 通过WIFI模块(ESP8266)获取天气预报