1.WiFi的常用AT指令顺序:
1):AT+RST—模块重启指令

2):AT+CWMODE—设置工作模式


示例:
AT+CWMODE=1
3)AT+CWJAP="K80","123123123"—连接附近的路由器:
若成功连接,出现

4)AT+CWQAP—WIFI模块断开与路由器的连接
通常WIFI端口连接后,会提示
![]()
5) AT+CIPSTART—WiFi模块连接服务器
该指令需要3个参数:依次是 传输层协议、域名(俗称网址)/IP地址、 端口号.
示例:
AT+CIPSTART="TCP","www.baidu.com",443
6) AT+CIPCLOSE—关闭与服务器的连接
示例:
AT+CIPCLOSE
7) AT+CIPMODE—让WiFi工作在透传模式
示例:
AT+CIPMODE=1
什么是透传模式?
在透传模式下:1.单片机/电脑发送WiFi数据,直接传送给服务器。
2. 服务器发送给WIFI数据,直接传送给单片机/电脑 此模式下,AT指令被禁用。(因为AT指令不被WIFI单独处理,直接发给服务器了)
8) AT+CIPSEND—开启给服务器发送数据的指令
示例:
AT+CIPSEND

2.连接获取天气的服务器:
1) 连接服务器至少需要IP地址和端口号
搜索心知天气
心知天气 – 高精度气象数据 – 天气数据API接口 – 行业气象解决方案 (seniverse.com)
网址:https://www.seniverse.com/

3.用电脑调式WiFi模块连接并获取天气信息的流程:
1)先让WIFI模块复位(可选)
|
AT+RST |
2) 设置工作模式
|
AT+CWMODE=1 |
3)连接附近的路由器
|
AT+CWJAP="K80","123123123" |
4)连接心知天气服务器
|
AT+CIPSTART="TCP","api.seniverse.com",80 |
5)设置透传模式
|
AT+CIPMODE=1 |
6)透传模式下开启发送
|
AT+CIPSEND |
此后给WIFI模块发送的数据都是会直接传送给服务器,WIFI不会将后续的数据当成AT指令来处理;除非给WIFI模块连续三个‘+’字符,使WIFI退出透传模式,即WIFI会再度回到响应AT指令的状态。
发送HTTP请求报文
|
GET /v3/weather/now.json?key=换成你的私人密钥&location=beijing&language=en&unit=c HTTP/1.1 Host: api.seniverse.com
|

4.如何用STM32来获取这些信息:
问题1:STM32如何获取服务器的天气信息?
答:上一节的操作本质上是 电脑给WiFi模块依次发送这些指令,所以逻辑上改为用STM32来给WiFi模块发送这些指令同样可以实现。分析可能需要注意的细节:
比如:对于 AT+WMODE=1,1 指令,WiFi模块响应迅速;对于连接路由器则需要一些时间;
(以上代码的主要部分是基于USART2的发送字符串 和 接收+空闲中断来实现的)
STM32实际收到的内容是上方内容对应的字符串(留意一些没有明确标注的”\\r\\n”),之后需要考虑的问题是从这个较长的字符串中,截取天气的文本和温度,即获取"text": 后方的一个被双引号包含单词 以及 或"temperature" 后方的一个被双引号包含的单词。
此处需要大量使用字符串函数,尤其是strstr() 查询子串。
5.关键函数分析:
1)wifi的硬件初始化:

2):给wifi模块发送数据
1.单字节发送:

2.数组发送:(比如发送 "+++" 退出透传)

3.字符串发送(比如发送 AT 指令)

4.指令层:

5.推出透传

6.断开wifi的连接

7.复位 WiFi 模块

8.关闭/开启回显

9.设置 WiFi 模式

10.连接wifi

11.连接 TCP 服务器

12.WiFi 初始化总入口

13.HTTP 请求天气







