文章目录

  • 前言
  • 一、原子云是什么?
  • 二、如何实现远程控制?
  • 三、具体步骤
    • 1.硬件准备
    • 2.总体连线
    • 3.原子云设置
    • 4.WiFi代码部分
    • 5.测试部分
  • 总结

前言

最近在做毕业设计,题目是关于STM32的一个智能电梯控制系统,其中用到了WiFi模块。我最开始使用的是ESP8266-01S这款模块去连接onenet、天工、阿里云这些,但都以失败告终。但在博主的不懈努力下(其实愁坏了),最后找到了正点原子的这款ATK-ESP8266模块成功连接了原子云并实现了远程控制功能。

所以在这里呢也是给大家分享一下博主的连云过程,也算是记录一下,以免后来自己忘了怎么连的了。
本文视频教程参见B站:
https://www.bilibili.com/video/BV165411f7CT?spm_id_from=333.999.0.0
相关软件例程代码我会放在文章末尾


提示:以下是本篇文章正文内容,下面案例可供参考

一、原子云是什么?

原子云是正点原子推出的一款物联网云平台,我个人觉得要比其他的云平台稍微好用一点,使用起来不那么复杂,连接简单,对于小白来说及其友好。并且原子哥官方也会有一定的技术支持(有一说一,原子哥不愧是原子哥,真不是吹的,属实好用,真香)。

二、如何实现远程控制?

其实远程控制对于许多小白来说是一个很难的功能,感觉很“高大上”,其实不然。
远程控制常见的无非蓝牙控制和WiFi控制,蓝牙控制没有什么好说的,距离有限,难度也不大。我们这里主要讲述WiFi控制。
WiFi控制顾名思义,通过WiFi来实现远程控制我们的设备。要实现远程控制,那么首先我们就需要知道WiFi模块的三种模式:

1、AP模式(无线接入点)
AP模式就是WiFi模块自己成为一个热点,此时他就像是一个服务器(server),能够让手机、电脑等设备连入,组成一个局域网。
!!!注意是手机主动去连接模块。

2、STA模式(无线终端)
STA(Station)模式的ESP8266就像是一个客户端(client)他可以去连接手机的热点或者其他的WiFi。
!!!注意是模块主动去连接WiFi。

3、STA+AP模式(共存)
共存,指的是既可以通过路由器连接到互联网,也可以作为一个热点被其它设备连接,从而实现广域网和局域网的无缝切换。

那么在本文例程中,我们主要使用STA模式,因为我们需要让模块接入互联网上云。
具体的远程控制见下图:
当我们远程控制时,我们需要通过原子云demo发送数据到原子云服务器,原子云服务器接收数据之后再下发给ATK-ESP8266模块。同样,接收来自ATK-ESP8266模块的消息时,我们也需要将数据从ATK-ESP8266发送至原子云服务器,再由原子云服务器下发到我们的移动端上。

三、具体步骤

1.硬件准备

1、ATK-ESP8266
2、STM32F103C8T6
3、USB-TLL(调试信息打印)
4、蜂鸣器(模拟执行机构)
5、杜邦线若干
6、STLINK
上面是正点原子的ATK-ESP8266模块。


这是USB-TTL,主要用于调试信息的打印。

2.总体连线

ATK-ESP8266与STM32F103C8T6的连接关系
只需用到模块的4个引脚

STM32F103C8T6 ATK-ESP8266
5V VCC
GND GND
PB11(USART3_RX) TXD
PB10(USART3_TX) RXD
ATK-ESP8266的RST引脚与IO-0引脚默认高电平,可以不接。
RST引脚是复位引脚,如果需要软件复位的话,可以接上,将其拉低即可。
IO-0引脚是烧写固件时使用的,烧写时将其拉低。
VCC引脚我问过官方的技术支持,他们说3.3V也可以给模块供电,但是我个人建议用5V供电。
串口一定要反接,模块的TX接单片机RX,模块的RX接单片机的TX。

USB-TTL与STM32F103C8T6的连接关系

STM32F103C8T6 USB-TTL
PA9(USART1_TX) RXD
PA10(USART1_RX) TXD
GND GND
在这里我们不需要接USB-TTL的5V

单片机使用串口3来通过WiFi模块与云端进行收发数据,使用串口1来输出调试信息。

下面是总体连线图

3.原子云设置

首先我们进入原子云 https://cloud.alientek.com/ ,没有账号的需要先注册一个账号。

注册好之后就进入了以下页面,我们首先点击设备管理注册一个设备。

点击新增设备选择ESP8266

设备名称随便输入

创建好设备之后就像下面一样,记住这个编号,后面会用到。可以看到现在状态是断开的。

创建好设备之后,我们需要再创建一个分组。
我们点击分组管理,选择创建分组,分组名称自己填写

然后我们还需要将我们创建好的设备添加进分组,刚创建好的分组,设备数量是0个,当我们把设备添加进分组之后,设备数量会变成1,如下图:


最后,我们点击账号信息,记住这个API,这是我们登录原子云demo的”账号密码“

至此,云端的设置就大功告成了!

4.WiFi代码部分

由于目前博主的项目还没有完善,暂时项目源码不会给出来,后面完善之后在放出源码,这里只给出WiFi部分的相关例程代码,希望能给大家一些启发。

首先是ESP8266配置

printf ( "\r\n正在配置 ESP8266 ......\r\n" );//1、向模块发送测试指令 AT
ESP8266_AT_Test ();//2、设置模块模式为STA模式 AT+CWMODE=1
ESP8266_Net_Mode_Choose ( STA );//3、设置要连接路由器的 ID 和密码
while ( ! ESP8266_JoinAP ( macUser_ESP8266_ApSsid, macUser_ESP8266_ApPwd ) );//4、连接原子云 发送设备编号和密码
while ( ! ESP8266_ConnectYuanziyun ( yuanziyun_DeviceID, yuanziyun_DevicePassWord ) );printf ( "\r\n配置 ESP8266 完毕\r\n" );

AT指令测试函数,这个函数将发送AT指令到ATK-ESP8266模块,看是否能接收到回复。

/** 函数名:ESP8266_AT_Test* 描述  :对WF-ESP8266模块进行AT测试启动* 输入  :无* 返回  : 无* 调用  :被外部调用*/
void ESP8266_AT_Test ( void )
{char count = 0;macESP8266_RST_HIGH_LEVEL();Delay_ms ( 1000 );while ( count < 10 ){if( ESP8266_Cmd ( "AT", "OK", NULL, 500 ) ) return;              //如果接收到模块返回的OK指令,就直接返回ESP8266_Rst();                                                                                     //否则复位模块,重新发送AT测试指令++ count;}
}

设置ATK-ESP8266模式为STA模式

/** 函数名:ESP8266_Net_Mode_Choose* 描述  :选择WF-ESP8266模块的工作模式* 输入  :enumMode,工作模式* 返回  : 1,选择成功*         0,选择失败* 调用  :被外部调用*/
bool ESP8266_Net_Mode_Choose ( ENUM_Net_ModeTypeDef enumMode )
{switch ( enumMode ){case STA:return ESP8266_Cmd ( "AT+CWMODE=1", "OK", "no change", 2500 );case AP:return ESP8266_Cmd ( "AT+CWMODE=2", "OK", "no change", 2500 );case STA_AP:return ESP8266_Cmd ( "AT+CWMODE=3", "OK", "no change", 2500 );default:return false;}
}

ATK-ESP8266模块连接热点

/** 函数名:ESP8266_JoinAP* 描述  :WF-ESP8266模块连接外部WiFi* 输入  :pSSID,WiFi名称字符串*       :pPassWord,WiFi密码字符串* 返回  : 1,连接成功*         0,连接失败* 调用  :被外部调用*/
bool ESP8266_JoinAP ( char * pSSID, char * pPassWord )
{char cCmd [120];sprintf ( cCmd, "AT+CWJAP=\"%s\",\"%s\"", pSSID, pPassWord );return ESP8266_Cmd ( cCmd, "OK", NULL, 5000 );
}

ATK-ESP8266模块连接原子云

/** ESP8266_ConnectYuanziyun* 描述  :WF-ESP8266模块连接原子云* 输入  :pSSID,原子云上设备ID*       :pPassWord,原子云上设备密码* 返回  : 1,连接成功*         0,连接失败* 调用  :被外部调用*/
bool ESP8266_ConnectYuanziyun ( char * pSSID, char * pPassWord )
{char cCmd [120];sprintf ( cCmd, "AT+ATKCLDSTA=\"%s\",\"%s\"", pSSID, pPassWord );return ESP8266_Cmd ( cCmd, "OK", "CONNECTED", 5000 );
}

以上是ATK-ESP8266模块配置部分,下面是数据收发部分

while ( 1 )
{sprintf ( cStr, "\r\nNow Floor:1 \r\n");printf ( "%s", cStr );                                             //打印数据ESP8266_SendString ( ENABLE, cStr, 0, Single_ID_0 );               //通过透传模式 发送信息到原子云Delay_ms ( 1500 );if ( strEsp8266_Fram_Record .InfBit .FramFinishFlag ){USART_ITConfig ( macESP8266_USARTx, USART_IT_RXNE, DISABLE ); //禁用串口接收中断strEsp8266_Fram_Record .Data_RX_BUF [ strEsp8266_Fram_Record .InfBit .FramLength ]  = '\0';        //接收到的数据末尾添加结束符printf ( "\r\n%s\r\n", strEsp8266_Fram_Record .Data_RX_BUF );                                      //调试口打印接收到的数据
//strstr是C语言中的函数,作用是返回字符串中首次出现子串的地址。
// 若接收到的字符串中包含字符串  "1" 蜂鸣器响一次if ( ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "1" ) ) != 0 ){GPIO_SetBits(GPIOA,GPIO_Pin_11);Delay_ms ( 500 );GPIO_ResetBits(GPIOA,GPIO_Pin_11);}
// 若接收到的字符串中包含字符串  "2" 蜂鸣器响两次else if ( ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "2" ) ) != 0 ){for(i = 0 ; i < 2 ; i++){GPIO_SetBits(GPIOA,GPIO_Pin_11);Delay_ms ( 500 );GPIO_ResetBits(GPIOA,GPIO_Pin_11);Delay_ms ( 500 );}}// 若接收到的字符串中包含字符串  "3" 蜂鸣器响三次else if ( ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "3" ) ) != 0 ){for(i = 0 ; i < 3 ; i++){GPIO_SetBits(GPIOA,GPIO_Pin_11);Delay_ms ( 500 );GPIO_ResetBits(GPIOA,GPIO_Pin_11);Delay_ms ( 500 );}}strEsp8266_Fram_Record .InfBit .FramLength = 0;strEsp8266_Fram_Record .InfBit .FramFinishFlag = 0;USART_ITConfig ( macESP8266_USARTx, USART_IT_RXNE, ENABLE ); //使能串口接收中断}
}

5.测试部分

ATK-ESP8266模块已经成功上云。


可以看到,WiFi模块已经能够和原子云进行数据交互了,原子云能够收到来自模块的信息,并且模块也能够收到来自原子云的信息。

下面我们再来试一试移动端的控制。
移动端我们需要用到原子云demo这个软件,大家可以找官方的技术支持要。我们需要通过原子云demo将数据上传到原子云,原子云在将数据下发到模块,从而实现远程控制。
首先我们打开原子云demo这个软件:

打开后填入我们前面提到的的API

点击登录之后就可以进入原子云,并且能够我们创建的设备在线,并且连入了手机热点

我们点击这个设备,将进入以下界面,然后,我们点击订阅设备消息,将会提示订阅成功,如图:

至此,我们的手机就能够远程与ATK-ESP8266模块进行数据收发了,下面我们来试一下:

可以看到,我们通过手机发送“3”,串口输出打印了“3”,说明ATK-ESP8266模块已经成功收到了来自手机的数据并且单片机能够正常处理。同时单片机发送给手机的信息,在APP上也能够正常显示。
说明我们已经基本实现了WiFi远程控制这个功能!
但是这个例程代码在接收数据部分有一个小bug,就是strstr函数是检索子串在字符串中首次出现的位置的,所以即使输入了一些其他的无关字符,但如果包括了你想要的子串,那么仍然会执行相应函数。
因此,要解决这个问题我们只需要将strstr函数更改为字符串比较函数strcmp即可。

总结

以上就是今天要讲的内容,本文仅仅简单介绍了如何使用ATK-ESP8266连接原子云,其中可能有讲的不好的,甚至讲错的地方,希望大家理解,因为博主也是学生党一枚,因为做毕业设计所以才接触这个模块没多久(轻点喷)。有许多大神都讲得比我好,我也参考过许多大神的文章,确实感觉自己有许多不足,这里只是给大家分享一下我的经验,也是我本人第一次写文章,不足之处多见谅。(如有侵权,请在评论区留言,会马上删除)。

由于某些同学将无偿给代码当成我应做之事,所以今日起(2022.4.24)代码不再无偿分享
需要例程代码私聊发送

视频讲解请看B站:
https://www.bilibili.com/video/BV165411f7CT?spm_id_from=333.999.0.0

STM32F103C8T6+ATK-ESP8266连接原子云相关推荐

  1. STM32F103C8T6通过ESP8266连接阿里云物联网平台(附代码)

    代码: https://download.csdn.net/download/cainiaofu/13973012 阿里云lot Studio控制 Web开发(程序已精简) 分享一下自己使用stm32 ...

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

    本文所讲: 正点原子的wifi模块esp8266与正点原子开发板战舰V3(stm32f103zet6)及手机app通讯 esp8266分为三种工作模式: STA:8266连接到网络比如wifi.手机热 ...

  3. stm32f103c8t6控制ESP8266与手机APP通信

    stm32f103c8t6控制ESP8266与手机APP通信 之前已经发表过利用stm32控制蓝牙模块与手机APP通信的文章,那么现在我就来说说用WIFI模块来控制与手机APP的通信 首先需要的器件如 ...

  4. 基于STM32F103C8T6与ESP8266的物联网智能温度采集与蓝牙OLED数字钟的设计与实现

    基于STM32F103C8T6与ESP8266的物联网智能温度采集与蓝牙OLED数字钟的设计与实现 作者: 颜孙炜 文章目录 基于STM32F103C8T6与ESP8266的物联网智能温度采集与蓝牙O ...

  5. stm32f103c8t6+esp8266在WiFi下通过手机控制外设

    stm32f103c8t6+esp8266在WiFi下通过手机控制外设 前言 准备材料 实验目的 实验效果 代码 主函数 对esp8266初始化 总结 代码 前言 通过上一篇,介绍了esp8266的基 ...

  6. ESP8266连接阿里云(STM32)

    一.概述 之前通过串口调试助手+ESP8266已经连接上阿里云了 ESP8266连接阿里云(串口调试助手) 这次我们使用STM32+ESP8266来接入阿里云,其实本质上就是STM32和ESP8266 ...

  7. 【STM32+ESP8266连接腾讯云物联网开发平台 2】STM32+ESP8266-01S连接腾讯云

    文章目录 前言 一.硬件准备 1.ESP8266-01S 2. STM32F103C8T6核心板或者小开发板及其程序下载器 二.软件准备 1.STM32CubeMX 2. MDK (Keil v5) ...

  8. esp8266监听服务器端口信息,esp8266连接远程服务器收信息

    esp8266连接远程服务器收信息 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务 ...

  9. ESP8266连接阿里云(串口调试助手)

    参考链接:ESP8266 AT MQTT 透传指令接入阿里云物联网平台笔记 刷AT固件 参考链接:ESP8266连接阿里云 需要注意: 有时可能会出现下载失败的情况,注意一下FLASH SIZE那里, ...

最新文章

  1. Flocking for Multi-Agent Dynamic Systems:Algorithms and Theory
  2. 实例详解 EJB 中的六大事务传播属性--转
  3. hook虚表监控虚表
  4. Windows 下使用 BaiduExporter + Aria2 下载百度网盘文件
  5. 解决ubuntukylin 13.10安装wine时无法解决软件包依赖问题
  6. BZOJ2286: [Sdoi2011]消耗战(虚树)
  7. readyState的五种状态详解【转】
  8. CentOS 7 SSH相关使用问题及其解决办法
  9. 计算机网络基础高职pdf,高职《计算机网络基础》课程教学改革的思考.pdf
  10. dedecms(织梦)采集规则规则宝典
  11. Python基于OpenCV的人脸集合相似度检测系统(源码&UI&教程)
  12. matlab中提取裂缝图像,灰度图像中裂缝自动识别和检测方法与流程
  13. Codeforces 437B 437C
  14. Flink CheckpointCoordinator 步骤 流程 源码
  15. 【项目实战课】基于Pytorch的InceptionNet花卉图像分类实战
  16. 做擦边网站 服务器放在狗爹,在GoDaddy搭建Prosper202服务器
  17. GPU与CPU、显卡区别
  18. 【图像加密】基于matlab行列像素置乱+DWT图像加密【含Matlab源码 675期】
  19. 计算机怎样禁用中等加密算法,教你win10系统BitLocker加密功能禁用硬件加密
  20. java cms建站系统源码_51javacms CMS系统

热门文章

  1. 广西大学计算机调剂信息2021,广西大学2021年考研可调剂的专业和人数一览
  2. 苏宁从面试到入职历险记
  3. 头像叠加android_Android开发头像挨着叠加效果
  4. c语言会议安排编程,我院召开《C语言程序设计》课程教学研讨会
  5. Table ‘表名‘ doesn‘t exist 一个小细节
  6. 兄弟连区块链入门教程分享区块链POW证明代码实现demo
  7. 算法题-1528. 重新排列字符串
  8. 7 款 DevOps 工具管理 Kubernetes
  9. 墙都不扶就服你!javaredisson分布式锁
  10. MD5.js,前端MD5加密