esp8266 天气时钟(esp8266天气时钟固件)

esp8266 天气时钟(esp8266天气时钟固件)AT CWQAP 与 AP 断开连接 AT CWSAP 设置 ESP8266 softAP 配置 AT CWLIF 获取连接到 ESP8266 softAP 的 station 的信息 关于 WiFi 模式 这里要说明一下 sta 模式 下模块相当于客户端 像我们手机平板一样是要去连接路由器的 而 AP 模式 下模块相当于路由器 是发射 WiFi 被别人连的

大家好,我是讯享网,很高兴认识大家。



关于WiFi模式这里要说明一下,sta模式下模块相当于客户端,像我们手机平板一样是要去连接路由器的,而AP模式下模块相当于路由器,是发射WiFi被别人连的。ESP8266支持两种模式并存(模块出厂默认的是AP模式) 。另外,扫描WiFi指令 AT+CWLAP 只能在sta模式下使用,否则会报ERRO错误, AT+CWJAPAT+CWQAP 指令也同理。

sta模式连接WiFi演示

  1. 发送 *指令配置模块为sta模式(参数1,2,3分别对应模式sta,AP和sta/AP)。
  2. 发送*指令扫描当前附近WiFi,模块会返回可用AP列表。
  3. 使用连接到指定的路由器,比如我在图书馆的WiFi是 “Wang”,密码是“”,实际连接WiFi发送的指令就是 。
  4. 返回的“WIFI CONNECTED”说明连接成功,“WIFI GOT IP”代表模块分配到了IP。
  5. 最后可使用 *断开当前连接的WiFi。

TCP/IP相关AT指令

传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。

我们常说互联网互联网,那两个连接到互联网的设备该如何相互“交流”呢?TCP连接就是其中一种最常用的方式。TCP是面向连接的传输层协议,通信双方都要实现TCP协议,其中一方只需目标ip地址和端口号就能发起连接,连接一旦建立,就像在双方之间拉了一条管子,管子两端可进行全双工(双向同时收发)通信。

TCP是传输层协议,是在网络层IP协议的基础上封装而来。而这些封装的实现细节也是与我们无关,我们只需使用系统所提供的相关接口“拿来即用”,比如网络编程中的Socket。ESP8266模块中也实现了TCP/IP协议栈,模块作为客户端可轻松使用AT指令向服务端发起TCP连接。连接TCP服务器并开启透传模式后,模块串口收到的数据就会通过TCP连接透传到服务端,这样就完成了数据从硬件串口通过网络到程序进程的传输,实现软硬结合。

把WiFi模块和电脑连接,在sscom确定AT指令能正常使用后,就可以开始配置TCP连接了,具体步骤如下:

  1. 根据上面“sta模式连接WiFi演示”一节把模块连上WiFi
  2. 输入指令 *设置单连接
  3. 从“网络调试助手”得知本机IP和端口,输入指令 (指令参数分别为连接类型、目标IP地址和端口号)向服务器发起TCP连接请求,握手成功并建立连接后,服务器端的“网络调试助手”就会显示客户端IP和端口信息,此时双方已做好收发数据的准备(根据实际需要连接的IP地址来
  4. 输入指令开启透传模式
  5. 输入命令 

以上其实就是大概本次项目需要使用到的指令,ESP8266配置代码如下:

本项目为WiFi天气时钟,自然离不开需要从网页上读取天气信息。这里我们使用业内比较著名的知心天气

2.1 登陆心知天气官网,注册

没有账号的朋友可以自己去注册一下,流程很简单。不商用的话,知心天气是免费的,还是比较良心的(网站响应率也很高)。

esp8266 时钟固件 esp8266时钟代码_TCP
讯享网

点击“立即免费试用”

esp8266 时钟固件 esp8266时钟代码_TCP_02

点击免费版的“免费申请”

esp8266 时钟固件 esp8266时钟代码_stm32_03

申请后可查看到自己的私钥(自行保存后面需要用到)

esp8266 时钟固件 esp8266时钟代码_网络_04

2.1 API函数的使用

目前,大部分网络数据调用都是习惯性的调用数据提供商的API接口函数

重新点击“产品”—>“天气数据”,点击“查看API文档”

esp8266 时钟固件 esp8266时钟代码_开源_05

点击”天气实况”,打开对应的API接口文档

esp8266 时钟固件 esp8266时钟代码_网络_06

查看天气实况的接口地址,以及返回的数据结果示例(自行保存后面需要用到)

esp8266 时钟固件 esp8266时钟代码_网络_07

(1)上述知心天气API接口函数的寻找和使用通用性很高,大部分网络数据读取的流程与之类似。

(2)嵌入式开发大部分情况下一般都是C语言进行开发的,由于C语言的局限性,没有直接的字典类型处理(python),所以,对于服务器返回给ESP8266的JSON数据一般是无法直接解码读取的。目前有2种方法处理:①、移植CJSON去解码②取巧去比对字符串(本次使用的方法)

项目使用过程中直接使用知心天气自带的API函数,项目大致流程:开启STA模式后,成功连上WiFi后,通过TCP协议去访问执行天气网站的服务器,在发送特定的API接口函数,服务器响应后返回需要的结果信息。

STM32作为MCU与ESP8266直接的通讯就是简单的UART(串口)通信,这一点依旧与蓝牙模块很类似。使用方法:通过串口UARTx_TX连接ESP8266的UART_RX,然后单片机通过串口发送AT指令集。ESP8266后续从服务器接受的数据信息也从ESP8266的UART_TX传输给单片机UARTx_RX。后续只需要使用自己的方法去解析串口接收到的数据,即可得到自己想要的数据信息。

可以初步使用电脑串口去读取MCU接收到ESP8266返回的信息:

esp8266 时钟固件 esp8266时钟代码_stm32_08

1、RCC配置外部高速晶振(精度更高)——HSE;

esp8266 时钟固件 esp8266时钟代码_网络_09

2、SYS配置:Debug设置成Serial Wire否则可能导致芯片自锁);

esp8266 时钟固件 esp8266时钟代码_开源_10

3、GPIO配置:此处模拟使用SPI通信,并且设置ESP8266的EN和RST;

esp8266 时钟固件 esp8266时钟代码_开源_11

4、RTC配置:年月日,时分秒;

esp8266 时钟固件 esp8266时钟代码_esp8266 时钟固件_12

5、UART1和UART3配置:MCU分别与电脑和ESP8266通讯(记得开启串口通信中断);

esp8266 时钟固件 esp8266时钟代码_开源_13

esp8266 时钟固件 esp8266时钟代码_开源_14

esp8266 时钟固件 esp8266时钟代码_TCP_15

esp8266 时钟固件 esp8266时钟代码_stm32_16

6、时钟树配置

esp8266 时钟固件 esp8266时钟代码_开源_17

7、工程配置

esp8266 时钟固件 esp8266时钟代码_开源_18

5.1 TFT-LCD显示代码

LCD显示部分其实都是非常基础的操作,不熟悉的可以去看看笔者另一篇文章了解一下。作者这里主要把工程中不一样的地方指出来一下。

5.1.1 UI设计

WiFi天气时钟中最要的点——UI设计,需要去设计很多界面图标,作者这里耗费了超级多的时间,翻遍了GitHub视觉中国。最后找到了差不多符合作者要求的UI库(有需要的可以评论区留下邮箱),如下:

esp8266 时钟固件 esp8266时钟代码_TCP_19

5.1.2 GIF动图实现

目前,由于STM32自身内存的缘故,其实STM32是不太适合实现GIF动图的。所以,网上这方面的资料和代码都很少。目前,较为主流的方法:(1)enWin或者Lvgl库实现GIF动图;(2)从SD卡读取数据去显示

作者这里用了一直笨方法去实现了GIF显示,就是去循环遍历GIF动图的每一帧。

使用GIF分离器去分离GIF动图的每一帧

esp8266 时钟固件 esp8266时钟代码_开源_20

再利用Image2Lcd 2.9(激活成功教程版)去提前图模;

esp8266 时钟固件 esp8266时钟代码_stm32_21

将取模代码变为2维数组第一维度为帧数第二维度为每帧图片的取模

esp8266 时钟固件 esp8266时钟代码_开源_22

之后循环显示该GIF数组的每一帧,即可实现GIF动图显示。

代码:

5.2 ESP8266代码

EPS8266部分代码主要是配置后负责和目标服务器去实现通讯,当然还有需要解码服务器返回信息。

5.2.1 ESP8266配置代码(含UART处理)

UART回调处理函数:

ESP8266.h(AT控制):

ESP8266.c:

注意,key=后面尽量换成自己的密钥,location=后面也可以换成自己所在城市的字母。

5.2.2 ESP8266信息解码

这部分作者取巧,使用了字符串对比和指针取值的操作。

strstr()函数:

esp8266 时钟固件 esp8266时钟代码_开源_23

atoi()函数:

esp8266 时钟固件 esp8266时钟代码_网络_24

代码:

小讯
上一篇 2025-05-27 18:32
下一篇 2025-05-24 23:10

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/163375.html