本文所讲: 正点原子的wifi模块esp8266与正点原子开发板战舰V3(stm32f103zet6)及手机app通讯

esp8266分为三种工作模式

STA:8266连接到网络比如wifi、手机热点等。

AP:8266作为热点,由手机连接到8266.

STA+AP:两种模式兼容。

本文章的实现是采用第一种方式。

首先百度搜索原子云(手机通讯就是用原子云app),进入设备管理,新建设备,(图中的是我以前建的,如果你第一次使用原子云下图应该没有设备)。

esp8266如何连接手机热点 esp8266连接手机热点代码_串口

选择ESP8266,填写设备名称和密码。

esp8266如何连接手机热点 esp8266连接手机热点代码_esp8266如何连接手机热点_02


上图的的编号和你刚才设置的密码接下来会用到。(用你自己的编号)

硬件连接:

esp8266如何连接手机热点 esp8266连接手机热点代码_串口_03

必须短接:PB11(RX)和 GBC_TX 以及 PB10(TX)和 GBC_RX。
此时8266与开发板的串口3相连(波特率为115200)

代码实现:
利用hal库与keil5进行实现。cubemx里配置好串口1(需要在代码里重定义printf函数)和串口3。(既然使用8266了,相信这一步对你来说小菜一碟)

首先了解几个AT指令

AT+CWMODE=1 //设置8266为STA模式
AT+RST //复位
WIFI CONNECTEDWIFI GOT IPAT+CWJAP=“热点名称”,“热点密码”//连接手机热点
AT+ATKCLDSTA=“上面说的编号”,“设置的密码”//连接到原子云

除连接到原子云需要每次上电都配置外,其余指令只需初始化一次,因此我们可以利用串口1和串口助手直接发送AT指令完成前三个指令。

将8266的VCC连到单片机的5V,GND与单片机的GND相连,TXD与单片机的RXD相连,RXD与单片机的TXD相连

发送指令如下图,发送第一个指令时极有可能乱码,再发送一次就好了

esp8266如何连接手机热点 esp8266连接手机热点代码_mcu_04

发送复位指令后会出现乱码和一个logo,如下图

esp8266如何连接手机热点 esp8266连接手机热点代码_mcu_05


最后发送连接手机热点的指令。在此步骤之前要先打开手机热点,然后就可以出现下图内容。

esp8266如何连接手机热点 esp8266连接手机热点代码_esp8266如何连接手机热点_06


完成以上步骤后将8266插到之前的排母上,然后只需在代码里实现连接到原子云即可。代码实现:

在主函数中添加如下代码

esp8266如何连接手机热点 esp8266连接手机热点代码_mcu_07

你可能发现代码好像怪怪的,好像多了好多 \ ,这里要提到转义字符的概念,字符串中是不能直接输出 " 的,解决方法就是在 " 前加 \ ,这样就可以输出 " 了,这里的 \ " 就是转义字符。

esp8266如何连接手机热点 esp8266连接手机热点代码_stm32_08

然后编译,下载到单片机,稍等片刻,即可连接到原子云。

esp8266如何连接手机热点 esp8266连接手机热点代码_单片机_09

这样就完成了电脑与单片机通讯了吗?并没有!我们现在是在已经连接到手机热点的基础上进行的与原子云连接。那如果将热点关闭,单片机断电。然后打开热点,单片机重新上电会发生什么?你可以试一下,你会发现连接不到原子云了。
这是因为代码的执行速度比8266连接到手机的速度快得多,也就是当8266还没连接到手机时,8266连接原子云的指令已经执行完毕了。

所以在执行连接到原子云的指令之前,应该延时几秒等待8266连接到手机热点,我的8266连接到手机时间是7s左右,所以我延时8s。

esp8266如何连接手机热点 esp8266连接手机热点代码_stm32_10


上文说过,单片机重新上电后发送的第一条消息会乱码,所以这里我们发送两次指令,间隔500ms。这样就实现了电脑与单片机通讯。手机与单片机通讯

下载原子云app。

链接:https://pan.baidu.com/s/1Kzpj4MArcxq1judQC3swPA 提取码:t7vu

安装成功之后进入登陆界面,需要输入的token需要到原子云网页里找,进入原子云网页,点击左下角账号信息,即可看到API TOKEN.

登陆成功后会发现一片空白。

点击分组管理,点击创建分组,分组名称随便起。之后点击操作里的分组设置

esp8266如何连接手机热点 esp8266连接手机热点代码_esp8266如何连接手机热点_11


之后勾选,并移动到右面,点击保存。

esp8266如何连接手机热点 esp8266连接手机热点代码_mcu_12

按以上步骤操作后,重新登陆原子云app。即可与单片机通讯。

下面举个例子,手机输入123使led亮灭
代码如下:
首先定义有三个元素的数组,

uint8_t buffer[3];

之后在主函数的while里添加以下代码,

esp8266如何连接手机热点 esp8266连接手机热点代码_stm32_13


方便你cv

HAL_UART_Receive(&huart3, buffer,3,0xffff);
     if(strcmp(buffer,"123") == 0)
      {
          HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);//我自己定义的
      }

别忘了添加头文件

> #include <string.h>

之后编译,下载到单片机中。即可发现led一直在闪烁。

至此,本文所讲内容结束了,大家也可以尝试用串口中断来实现消息的发送。其实当你把这个功能和项目里其他功能结合时可能会出现一些逻辑上的问题,并不是直接cv就可以的。这里博主希望各位可以在学习过程中自己解决问题,最后希望我们一起进步。