通过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请求就可以收到天气预报数据,接下来就是解析数据了。
为什么我们使用at指令的时候都需要进入透传模式呢 SerialNet模式将本地异步串口通信转换成基于TCP/UDP协议的网络通信。其主要目是将串行通信的简单设备实现在网络上的通信,而这些设备不需要做任何改变 DTU进入SerialNet模式后,既可以作为客户端模式也可作为服务端模式。工作在SerialNet模式下的DTU将自动完成串口到网络通信的转换,所有数据可透明的在两设备之间双向传输。 SerialNet模式的建立首先要用AT+I命令定义所有相关的参数,然后再用一特殊AT+I命令进入SerialNet模式 SerialNet模式定义了一系列相关的操作参数,这些参数的定义实现了网络连接所需要的属性 当DTU工作在SerialNet模式时,在设备串口与网络之间他的工作方式就象路由器的路由过程。 esp8266与单片机硬件连接好,然后参照datasheet,写出相应的代码就好了。 一般使用JSON格式进行编码和解析。使用开源的JSON库,如cJSON等,可以方便地解析JSON数据,提取所需信息。 可以在PC端制作一个通过互联网获取网站天气信息和时间的程序 可以通过第三方网站的API接口获取相关信息 需要使用WIFI模块连接到互联网,获取网络访问权限。连接WIFI可以使用AT指令或者使用开发板上的API进行配置 根据解析得到的天气信息,进行相应的处理和显示。可以将天气信息显示在液晶屏幕、串口终端等设备上,或者通过声音提示、灯光等方式进行反馈。 通过向天气预报API发送HTTP请求,获取相应的天气数据。 在编写代码时,需要考虑API的访问频率限制和数据格式等问题。 常见的天气预报API有心知天气、聚合数据等,可以根据实际需求选择合适的API。 使用AT+CIPSNTPTIME?指令获取当前的网络时间信息,包括年、月、日、时、分、秒等信息。 在使用AT指令获取时间时,需要确保ESP8266已经连接上了可用的WiFi网络,并且能够正常访问NTP服务器。 使用AT指令获取网络时间需要确保ESP8266已经成功连接到Wi-Fi网络,并且网络畅通。 esp8266可以做路由器吗?