STM32F103C8T6+ATK-ESP8266连接原子云-程序员宅基地

技术标签: stm32  STM32智能电梯控制系统  嵌入式硬件  单片机  


前言

最近在做毕业设计,题目是关于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模式,因为我们需要让模块接入互联网上云。
具体的远程控制见下图:
移动端控制ATK-ESP8266模块当我们远程控制时,我们需要通过原子云demo发送数据到原子云服务器,原子云服务器接收数据之后再下发给ATK-ESP8266模块。同样,接收来自ATK-ESP8266模块的消息时,我们也需要将数据从ATK-ESP8266发送至原子云服务器,再由原子云服务器下发到我们的移动端上。

三、具体步骤

1.硬件准备

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

USB-TTL
这是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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_56620512/article/details/122635279

智能推荐

Springboot集成mqtt【demo】_springboot mtqq demo-程序员宅基地

文章浏览阅读1.3k次。项目目录如下启动类如下import org.eclipse.paho.client.mqttv3.MqttException;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.boot.autoconfigure.SpringBootApplicatio_springboot mtqq demo

C语言中的popen()函数_c popen函数 resource temporarily unavailable-程序员宅基地

文章浏览阅读3.3w次,点赞10次,收藏66次。Linux中的popen()函数可以在程序中执行一个shell命令,并返回命令执行的结果。有两种操作模式,分别为读和写。在读模式中,程序中可以读取到命令的输出,其中有一个应用就是获取网络接口的参数。在写模式中,最常用的是创建一个新的文件或开启其他服务等。头文件:#include 函数原型:FILE *popen(const char *command, const char *type_c popen函数 resource temporarily unavailable

新手小白也能做短视频自媒体,掌握方法和技巧,稳定每天200多_每天200百条视频怎么做-程序员宅基地

文章浏览阅读323次。大周跟很多新手小伙伴一样,都是从一个什么都不懂的小白,一步一步走到今天的,也遇到过各种各样的问题,坚持下去你就能赢。前期做得比较多,现在每天不去操作,也能有100-200的稳定收益,所以说做短视频自媒体是越到后期越赚钱的,新手小伙伴们完全可以去尝试操作,不要害怕失败。我们前期的收益主要来源与播放量的收益,就是平台给的广告分成,粉丝用户看你的短视频作品时下方会有下拉广告,所以说你的收益是与播放量挂钩的。新手小白经常会出现作品被下架、扣分和重复度过高的问题,导致没有收益或被封号,今天大周分享几个我常用的小_每天200百条视频怎么做

HttpClient 四种请求访问代码 HttpGet HttpPost HttpPut HttpDelete_httpput putrequest = new httpput-程序员宅基地

文章浏览阅读4.9k次。逻辑:String url = "http://www.baidu.com";//将要访问的url字符串放入HttpPost中HttpPost httpPost = new HttpPost(url);//请求头 放置一些修改http请求头和cookiehttpPost.setHeader("Accept", "application/json");......//如果_httpput putrequest = new httpput

EG网关串口连接施耐德M340PLC应用案例-程序员宅基地

文章浏览阅读971次,点赞17次,收藏18次。设置步骤:点击需要报警的变量后面的【报警】→【新增】→填写报警信息与条件→【确定】。【寄存器类型】:在施耐德M340 PLC中,离散量的输入输出使用的是%M地址,模拟量使用的是%MW地址(Modbus寄存器对应关系可以参考下面案例的采集变量对照表)。步骤:点击【后台管理】(只有管理账号才有此权限)→【设备中心】→【EG设备管理】→【+新增】→填写设备信息→点击【保存】。Modbus参数设置完成后,把修改好的程序下载到PLC中,再打开【应用程序树】,点击【GVL】,将变量进行修改。

合成生物学|第一期:什么是合成生物学_如何理解合成生物学的层级结构?-程序员宅基地

文章浏览阅读5.9k次,点赞2次,收藏7次。这个系列是关于天津大学宋凯教授的《合成生物学导论》的学习笔记,将对合成生物学的概念、合成生物系统的设计、数学模拟与性能分析以及合成生物学基础与应用研究进行一个概括性记述,目的主要是通过合成生物学这个前沿方向了解学科交叉融合现状与方法以及掌握一些工程性方法与思路。1. 合成生物学的诞生:1953年,克里克和沃森发现了DNA双螺旋结构、开始了解读生物遗传密码的第一步;2003年,人类基因组计划..._如何理解合成生物学的层级结构?

随便推点

windows11,打不开IE浏览器,自动跳转到edge浏览器_res://ieframe.dll-程序员宅基地

文章浏览阅读3.7w次,点赞4次,收藏17次。目前的 暂时解决办法是,1. 打开 Edge浏览器,--设置2. 点击左上角 设置--默认浏览器3. Internet Explorer模式页面--添加 ‘自己需要IE浏览器打开的网址’,然后 就会在 Edge中,再次打开网址尝试;(次模式 会保存30天,30天后需 再次操作)..._res://ieframe.dll

Oracle12c 容器数据库详解_oracle fcpsb-程序员宅基地

文章浏览阅读1.9w次。如果是非生产环境,容器数据库CDB 这功能还可以。但是,如果生产使用CDB,也可以,但是感觉很鸡肋,一般上生产的,最好为非CDB 数据库。1, CDB 容器数据2, PDB 可插拔式数据库3,根容器 CDB$ROOT4, 种子可插拔数据库 PDB$SEED5, 克隆,通过 种子库(pdb$seed 不能修改,只读),pdb库,非CDB库,创建可插拔数据库。6,非CDB,ORACLE12C 没有创建..._oracle fcpsb

php simplexml_PHP的SimpleXML处理-程序员宅基地

文章浏览阅读347次。PHP版本5引入了SimpleXML,SimpleXML是一种用于读写XML的新应用程序编程接口(API)。 在SimpleXML中,表达式如下: $doc->rss->channel->item->title 从文档中选择元素。 只要您对文档的结构有所了解,这些表达式就很容易编写。 但是,如果您不确切知道感兴趣的元素出现在何处(例如Docbook,HTML和类似的叙..._php simplexml

php超链接颜色,html超链接默认字体颜色怎么清除-程序员宅基地

文章浏览阅读594次。方法:1、在body中使用link、alink、vlink属性来设置其他颜色,例“”。2、先使用“:link”、“:visited”、“:active”选择器选中a元素;然后使用color属性设置其他颜色。本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。为了突出超链接,超链接文字通常采用与其他文字不同的颜色,超链接文字的下端还会加一条横线。网页的..._php的href颜色

SourceInsight 4.0使用说明_cppcheck在sourceinsight上使用-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏31次。Source Insight是一个面向项目开发的程序编辑器和代码浏览器,它拥有内置的对C/C++,C#和Java等程序的分析。能分析源代码并在工作的同时动态维护它自己的符号数据库,并自动显示有用的上下文信息。Options->Key Assignments 进入快捷键设置界面,找到自己想要设置的命令。如下图所示选择“Exit”命令,可以看到系统默认的快捷键是“Alt+F4”。_cppcheck在sourceinsight上使用

nginx 开启websocket支持_elang启用websocket-程序员宅基地

文章浏览阅读1.8k次。WebSocket是目前比较成熟的技术了,WebSocket协议为创建客户端和服务器端需要实时双向通讯的webapp提供了一个选择。其为HTML5的一部分,WebSocket相较于原来开发这类app的方法来说,其能使开发更加地简单。大部分现在的浏览器都支持WebSocket,比如Firefox,IE,Chrome,Safari,Opera,并且越来越多的服务器框架现在也同样支持WebSocket。在实际的生产环境中,要求多个WebSocket服务器必须具有高性能和高可用,那么WebSocket协议就需要_elang启用websocket

推荐文章

热门文章

相关标签