上次学会了串口调试助手配置ESP8266之后,尝试用STM32的串口来配置ESP8266,参考了以下几篇文章
文章1,点击跳转
文章2,点击跳转

STM32+ESP8266实现远程控制LED

  • 一、硬件连接
  • 二、云平台
  • 三、软件配置
    • 1、LED的配置
    • 2、串口3的配置
    • 3、ESP8266的配置
    • 4、main函数
  • 四、测试

一、硬件连接

ESP8266 STM32
3V3 3.3
GND GND
RX PB10
TX PB11

然后STM32f103C8T6核心板自带了一个LED接的是PB13引脚。

这里值得一提的是,刚开始我把ESP8266的3V3引脚接到了USB转TTL的3V3上,用串口调试助手没反应,后来发现是供电的问题,换到STLINK的3.3V上就好了。

二、云平台

想要实现远程控制,需要一个数据转发的过程,所以,我们需要云平台来给我们转发数据。这里推荐一个物联平台: http://www.doit.am/

将手机以及其他设备(如ESP8266)接入云平台后,它们之间就可以进行远程通信了。

获取IP地址和端口号http://tcp.doit.am/,这个IP和端口号在后面的软件配置里需要用到
点进去之后是这样的

三、软件配置

1、LED的配置

//LED初始化
void LED_Init(void)
{GPIO_InitTypeDef  GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);  //使能PC端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;               //LED0-->PB.5 端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;          //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //IO口速度为50MHzGPIO_Init(GPIOC, &GPIO_InitStructure);                     //根据设定参数初始化GPIOC13GPIO_SetBits(GPIOC,GPIO_Pin_13);                      //PC13 输出高
}

2、串口3的配置

因为我们需要串口1来调试代码,所以用STM32的串口3也就是PB10、PB11与ESP8266连接,下面是串口3的配置代码以接收中断服务函数。

//串口接收缓存区
u8 USART3_RX_BUF[USART3_MAX_RECV_LEN];              //接收缓冲,最大USART3_MAX_RECV_LEN个字节.
u8  USART3_TX_BUF[USART3_MAX_SEND_LEN];             //发送缓冲,最大USART3_MAX_SEND_LEN字节//接收到的数据状态
//[15]:0,没有接收到数据;1,接收到了一批数据.
//[14:0]:接收到的数据长度
vu16 USART3_RX_STA=0;//串口3接收中断服务函数
void USART3_IRQHandler(void)
{u8 res;    if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//接收到数据{      res =USART_ReceiveData(USART3);    USART_SendData(DEBUG_USARTx,res);    //这里是把ESP8266发送到串口3的消息发送到电脑端串口调试助手,便于调试if(res != 'A')                     //以‘A’为结束位,收到‘A’表示一次接收消息完成{if((USART3_RX_STA&(1<<15))==0)//接收完的一批数据,还没有被处理,则不再接收其他数据{ USART3_RX_BUF[USART3_RX_STA++]=res;    //记录接收到的值    }else {USART3_RX_STA|=1<<15;                //没有收到结束符‘A’,收到的字节数>=0x80,强制标记接收完成}  }       else {USART3_RX_STA|=1<<15;              //接收消息完成}   }
}//初始化IO 串口3
//pclk1:PCLK1时钟频率(Mhz)
//bound:波特率
void usart3_init(u32 bound)
{  NVIC_InitTypeDef NVIC_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  // GPIOB时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); //串口3时钟使能USART_DeInit(USART3);  //复位串口3//USART3_TX   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PB10GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   //复用推挽输出GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化PB10//USART3_RX   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入GPIO_Init(GPIOB, &GPIO_InitStructure);  //初始化PB11USART_InitStructure.USART_BaudRate = bound;//波特率一般设置为9600;USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;    //收发模式USART_Init(USART3, &USART_InitStructure); //初始化串口 3USART_Cmd(USART3, ENABLE);                    //使能串口 //使能接收中断USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//开启中断   //设置中断优先级NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//抢占优先级3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;        //子优先级3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;         //IRQ通道使能NVIC_Init(&NVIC_InitStructure);    //根据指定的参数初始化VIC寄存器USART3_RX_STA=0;     //清零
}//串口3,printf 函数
//确保一次发送数据不超过USART3_MAX_SEND_LEN字节
void u3_printf(char* fmt,...)
{  u16 i,j; va_list ap; va_start(ap,fmt);vsprintf((char*)USART3_TX_BUF,fmt,ap);va_end(ap);i=strlen((const char*)USART3_TX_BUF);        //此次发送数据的长度for(j=0;j<i;j++)                           //循环发送数据{while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕   USART_SendData(USART3,USART3_TX_BUF[j]); }
}

3、ESP8266的配置

这里需要注意的是,因为要发送 " ,所以要加上转义字符 \

这里的IP地址与端口号填我们在云平台获取的,每发送一条命令都需要延时等待一下,可以按情况更改

char a[]="AT+CWMODE=1";
char b[]="AT+RST";
char c[]="AT+CWJAP=\"WIFI名称\",\"WIFI密码\"";
char d[]="AT+CIPMUX=1";
char e[]="AT+CIPSTART=0,\"TCP\",\"IP地址\",端口号";void esp8266_start_trans(void)
{//设置工作模式 1:station模式   2:AP模式  3:兼容 AP+station模式esp8266_send_cmd1((u8 *)a);delay_ms(1000);delay_ms(1000);//重启esp8266_send_cmd1((u8 *)b);delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);//连接WIFIesp8266_send_cmd1((u8 *)c);delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);esp8266_send_cmd1((u8 *)d);delay_ms(1000);delay_ms(1000);//连接TCP服务端esp8266_send_cmd1((u8 *)e);delay_ms(1000);delay_ms(1000);delay_ms(1000);}void esp8266_send_cmd1(u8 *cmd)
{u3_printf("%s\r\n",cmd); //发送命令,需要加换行符
}

4、main函数

收到"on"开灯,收到"off"灭灯

int main(void)
{   USART_Config();delay_init();LED_Init();usart3_init(115200);esp8266_start_trans();   printf("初始化完成\n");USART3_RX_STA=0;while(1){  if(USART3_RX_STA&0x8000)   //如果消息接收完成,则处理{if(strstr((const char*)USART3_RX_BUF,"on"))  //这里是看接收到的消息中有没有自己设置的命令“on”,strstr()函数不会用的可以搜一下{GPIO_ResetBits(GPIOC,GPIO_Pin_13);}if(strstr((const char*)USART3_RX_BUF,"off")) {GPIO_SetBits(GPIOC,GPIO_Pin_13);}USART3_RX_STA=0;    //消息处理完成,开始重新接收memset(USART3_RX_BUF,0,600);         //将接收区清0}}
}

四、测试

打开电脑串口调试助手,用手机或电脑网络调试助手连接云平台,发送命令,记得加上结束符’A’,现象如下,同时LED的亮灭情况也随命令变化

手机端我用的是自己写的APP

电脑串口调试助手

LED的变化我就不贴出来了

最后把我的工程文件以及APP分享出来,需要的自取,链接:https://pan.baidu.com/s/1cd3nMlHz6UTnPx74tv3TVA
提取码:0k0c

好了,到这里就结束了,下次分享一下我写手机端TCP调试助手的过程。

STM32+ESP8266实现远程控制LED相关推荐

  1. STM32+ESP8266+TLINK 远程控制LED

    目录 整体框架 单片机部分 ESP8266部分 TLINK平台 实验结果 项目地址 整体框架 单片机部分 USART通信(本项目中STM32利用USART2与ESP8266通信) void USART ...

  2. esp8266连接远程服务器IP,ESP8266连接服务器实现远程控制LED灯

    本帖最后由 chenyuechi 于 2017-7-17 15:32 编辑 本教程是用ESP8266实现远程控制LED灯的亮/灭,只要学会了控制LED灯,就可以控制继电器.电机等很多东西噢 开发之前大 ...

  3. ESP8266远程控制LED

    <手把手教你玩物联网>系列推文将介绍使用RT-Thread----小而美的物联网操作系统,制作一个室内温湿度数据采集,并实现终端采集数据上传物联网云平台onenet,实现云端远程数据监控功 ...

  4. 【开源】手机APP通过IoT点亮LED灯(STM32+ESP8266+阿里云+MQTT+Android)

    (STM32+ESP8266+阿里云+MQTT+Android) 本项目利用Android Studio编写了连接阿里云和MQTT的APP,并在UI界面简单设计了标题,连接按钮,点灯按钮,灭灯按钮.如 ...

  5. stm32+esp8266(wifi模块)+贝壳物联+开关控制

    目录 硬件准备 软件准备 自我准备 贝壳物联 贝壳物联和esp8266的连接 通过AT指令连接 STM32F103+esp8266连接贝壳物联 如何上机连接 代码部分 通过手机对STM32进行灯亮灭的 ...

  6. STM32+ESP8266(ESP-12F)物联网温度计-腾讯云物联网

    STM32+ESP8266(ESP-12F)物联网温度计-腾讯云物联网 目录 STM32+ESP8266(ESP-12F)物联网温度计-腾讯云物联网 一.硬件及软件准备 1.完整工程源码 2.硬件:S ...

  7. android+app+wifi+控制+协议,玩转OneNET物联网平台之MQTT服务④ —— 远程控制LED(数量无限制)+ Android App控制...

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.但愿你们分享给你周边须要的朋友或者同窗,说不定大神成长之路有博哥的奠定石...android 若是以为有用,麻烦点赞收藏,您的 ...

  8. STM32 ESP8266和Java服务器透传模式下的双向通信

    系列文章: ESP8266的AP模式与STA模式简单测试 简单的Java服务器和客户端的通信 STM32 ESP8266和Java服务器透传模式下的双向通信 jsp向servlet传输数据 Servl ...

  9. 古董万年历升级WiFi授时 STM32+ESP8266

    [小制作]古董万年历升级WiFi授时 STM32+ESP8266 故事,还得从一只蝙蝠说起... 先来看一下前后对比 硬件方面 升级之前 升级之后 功能方面 调用序列图-这里只放个大概 详细的还得结合 ...

  10. stm32 esp8266 ota升级-自建mqtt和文件服务器全量升级

    stm32 esp8266 ota系列文章: stm32 esp8266 ota-快速搭建web服务器之docker安装openresty stm32 esp8266 ota升级-tcp模拟http ...

最新文章

  1. 在阿里云Kubernetes容器服务上打造TensorFlow实验室
  2. 使用 ChatterBot 库制作一个聊天机器人
  3. LeetCode--024--两两交换链表中的节点(java)
  4. Atitit 大json文件的结构化查看解决方案,高性能的jsonview  attilax总结.docx
  5. 浅谈JS原型与原型链(一)
  6. 计算机应用办公软件实训报告,办公软件实习报告
  7. java integer valueof_对 Java Integer.valueOf() 的一些了解
  8. html5中如何自动跳转页面,实现HTML5上滑跳转页面的两种方法
  9. javascript V8引擎垃圾收集机制
  10. 芯片老化验证流程_IC老化测试
  11. #CSP 201509-1 数列分段(100分)
  12. 设计模式之——抽象工厂模式
  13. Output Arcade for Mac:集合大量 Loop 素材的素材库插件
  14. 好用的开源房产管理系统测评(附源码)
  15. 鸟哥Linux第二十四章-Linux内核编译与管理简记
  16. Centos7防火墙iptables安装及设置图文并茂【实现防火墙管理功能】
  17. Excel如何删除空白行
  18. 金融风控实战——反欺诈特征
  19. opencv批量修改图片分辨率
  20. 移动端身份证识别,APP证件信息采集

热门文章

  1. greensock是个很不错的类库,故转载了一些关于其中类使用方法的文章。
  2. greensock下载_使用GreenSock完成我们的可拖动的画布外菜单
  3. u盘维护系统 linux,制作绝对pe+puppy U盘维护系统双系统(以下方法也可制作archlinux U盘安装)...
  4. 大模型系统和应用——自然语言处理大模型基础
  5. 物联网工程导论第二版思考题答案
  6. QQ2007密码盗取程序介绍(参考部分网上代码)
  7. 引用阿里图标库(iconFont)的三种方式
  8. 2021-05-19 退役啦
  9. 可视化神经网络实验报告,可视化神经网络工具
  10. 用tinypng压缩图片