esp8266与stm32、手机通讯(原子云)——hal库(有代码)

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

esp8266分为三种工作模式
STA:8266连接到网络比如wifi、手机热点等。
AP:8266作为热点,由手机连接到8266.
STA+AP:两种模式兼容。
本文章的实现是采用第一种方式。
首先百度搜索原子云(手机通讯就是用原子云app),进入设备管理,新建设备,(图中的是我以前建的,如果你第一次使用原子云下图应该没有设备)。
在这里插入图片描述

选择ESP8266,填写设备名称和密码。
在这里插入图片描述
上图的的编号和你刚才设置的密码接下来会用到。(用你自己的编号)

硬件连接:

在这里插入图片描述

必须短接: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相连

发送指令如下图,发送第一个指令时极有可能乱码,再发送一次就好了
在这里插入图片描述

发送复位指令后会出现乱码和一个logo,如下图
在这里插入图片描述
最后发送连接手机热点的指令。在此步骤之前要先打开手机热点,然后就可以出现下图内容。
在这里插入图片描述
完成以上步骤后将8266插到之前的排母上,然后只需在代码里实现连接到原子云即可。

代码实现:
在主函数中添加如下代码
在这里插入图片描述

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

然后编译,下载到单片机,稍等片刻,即可连接到原子云。
在这里插入图片描述

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

所以在执行连接到原子云的指令之前,应该延时几秒等待8266连接到手机热点,我的8266连接到手机时间是7s左右,所以我延时8s。
在这里插入图片描述
上文说过,单片机重新上电后发送的第一条消息会乱码,所以这里我们发送两次指令,间隔500ms。这样就实现了电脑与单片机通讯。

手机与单片机通讯
下载原子云app。
链接:https://pan.baidu.com/s/1Kzpj4MArcxq1judQC3swPA
提取码:t7vu
安装成功之后进入登陆界面,需要输入的token需要到原子云网页里找,进入原子云网页,点击左下角账号信息,即可看到API TOKEN.
登陆成功后会发现一片空白。
点击分组管理,点击创建分组,分组名称随便起。之后点击操作里的分组设置
在这里插入图片描述
之后勾选,并移动到右面,点击保存。
在这里插入图片描述

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

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

uint8_t buffer[3];

之后在主函数的while里添加以下代码,
在这里插入图片描述
方便你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就可以的。这里博主希望各位可以在学习过程中自己解决问题,最后希望我们一起进步。

  • 7
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值