哪个做企业网站,长沙网站推广公司哪家好,河北省建设局材料备案网站,免费建站系统个人目录
前言
一、ESP8266介绍
二、如何实现WiFi传输#xff1f;代码详解附上
三、结果实现流程与展示
四、总结
题外话#xff1a; 前言
哎哎哎#xff0c;发觉好久没有更新博客了#xff0c;最近一直事情比较多#xff0c;也没什么时间注意博客#xff0c;不过接下…目录
前言
一、ESP8266介绍
二、如何实现WiFi传输代码详解附上
三、结果实现流程与展示
四、总结
题外话 前言
哎哎哎发觉好久没有更新博客了最近一直事情比较多也没什么时间注意博客不过接下来时间会有了继续更新STM32F1和MSP430的文章觉得有帮助的记得收藏点赞哦关注博主更多新鲜知识第一时间知道不容错过哦
今天这一讲注意涉及到WiFi模块ESP8266的使用主要是用WiFi来控制LED0亮灭包括会详细介绍一下该模块的使用废话不多说正题进入··· 参考资料WIFI模块ATK-ESP8266(ESP 01) — 正点原子资料下载中心 1.0.0 文档 (openedv.com) 一、ESP8266介绍
互联网时代无线传输、无线通信尤为重要那么在WiFi通信方面就数ESP8266用的最为广泛了因为ESP8266是一个具备高性能的模块在不了解其原理的情况下只要有一定的串口知识理解那么就可以轻松上手该模块进而实现手机WiFi操作。简单来说就是利用编程来实现WiFi模块的透明传输。
一些使用参考资料可以参考正点原子官网 这里我们看到该模块有8个接口但是实际上我们只需要用到五个接口就可以操作这个WiFi模块了主要是3.3V、GND、RXD、TXD、EN这五个接口可以看上图RXD接单片机上的TXD接口这里我用的是串口3所以接PB10TXD接单片机上的RXD接口即PB11EN接3.3V即可。
那么他有哪些指令呢
博客上有许多关于AT指令的文章这里推荐一篇文章给大家
ESP8266 WIFI模块AT指令汇总_尘埃世界的博客-CSDN博客_esp8266at指令集
该博主详细地介绍了许多指令大家可以不断尝试各种指令在这我就不会详细介绍这些指令了相信大家仔细阅读该博主的文章肯定也有所收获这里我只是作为一名小小搬运工哈哈 这里你会发现它有三种模式即STA、AP、混合那么我们该如何使用呢这里简单说明一下
STA模式就是类似一个接收模式就是开启该模式后你只能通过串口给他发送信息ESP8266只负责接收而不会产生一个热点手机或其他设备是找不到热点的然后这模式我一般会直接用来调试各种AT指令通过串口调试助手进行数据传输
AP模式就简单了就是它发出去一个热点供手机或其他设备连接如果要实现手机连热点来控制单片机那么该模式就要开启了。
混合模式就是两者同时实现。
接下来关于传输的方式一般都是采用透传比较好如果不采用透传模式那么每发送一次数据都要发送一次ATCIPSENDparam的指令就显得尤为麻烦因此模式一般设置为透传模式退出透传模式就给指令“”即可后面代码里也有具体涉及到透传模式的退出操作后面代码再一一介绍。 二、如何实现WiFi传输代码详解附上
串口3初始化函数
#include delay.h
#include usart3.h
#include stdarg.h
#include stdio.h
#include string.h
#include timer.h u8 res;
//串口接收发送缓存区
u8 USART3_RX_BUF[USART3_MAX_RECV_LEN];
u8 USART3_TX_BUF[USART3_MAX_SEND_LEN]; vu16 USART3_RX_STA0; //串口3中断
void USART3_IRQHandler(void)
{if(USART_GetITStatus(USART3, USART_IT_RXNE) ! RESET){ res USART_ReceiveData(USART3); if((USART3_RX_STA(115))0){ if(USART3_RX_STAUSART3_MAX_RECV_LEN) {TIM_SetCounter(TIM7,0); if(USART3_RX_STA0) {TIM_Cmd(TIM7,ENABLE);}USART3_RX_BUF[USART3_RX_STA]res; }else {USART3_RX_STA|115; } }}
} //串口3初始化
void usart3_init(u32 bound)
{ NVIC_InitTypeDef NVIC_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); USART_DeInit(USART3); //USART3_TX PB10GPIO_InitStructure.GPIO_Pin GPIO_Pin_10; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP;GPIO_Init(GPIOB, GPIO_InitStructure); //USART3_RX PB11GPIO_InitStructure.GPIO_Pin GPIO_Pin_11;GPIO_InitStructure.GPIO_Mode GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOB, GPIO_InitStructure); USART_InitStructure.USART_BaudRate bound;USART_InitStructure.USART_WordLength USART_WordLength_8b;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);USART_Cmd(USART3, ENABLE); USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); NVIC_InitStructure.NVIC_IRQChannel USART3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority2 ;NVIC_InitStructure.NVIC_IRQChannelSubPriority 3; NVIC_InitStructure.NVIC_IRQChannelCmd ENABLE; NVIC_Init(NVIC_InitStructure); TIM7_Int_Init(1000-1,7200-1); USART3_RX_STA0; TIM_Cmd(TIM7,DISABLE); }
//串口3printf函数保证输入不大于设定长度
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);istrlen((const char*)USART3_TX_BUF); for(j0;ji;j) {while(USART_GetFlagStatus(USART3,USART_FLAG_TC)RESET); USART_SendData(USART3,USART3_TX_BUF[j]); }
}ESP8266初始化函数
#include esp8266.h
#include string.h
#include usart.h
#include usart3.h
#include stm32f10x.h
#include sys.h
#include delay.h
#include lcd.h//ESP8266初始化
void esp8266_start_trans(void)
{esp8266_send_cmd(ATCWMODE2,OK,50);//设置为AP模式esp8266_send_cmd(ATRST,ready,20);//重启delay_ms(1000); delay_ms(1000);delay_ms(1000);delay_ms(1000);esp8266_send_cmd(ATCWSAP\ESP8266\,\12345678\,1,4,OK,200);//设置WiFi名称、密码模式esp8266_send_cmd(ATCIPMUX1,OK,20);//进入透传模式esp8266_send_cmd(ATCIPSERVER1,8080,OK,200);//设置端口8080esp8266_send_cmd(ATCIPSEND,OK,50);//开始发送数据
}//退出透传模式
u8 esp8266_quit_trans(void)
{u8 result1;u3_printf();delay_ms(1000); resultesp8266_send_cmd(AT,OK,20);if(result)printf(quit_trans failed!);elseprintf(quit_trans success!);return result;
}//发送指令返回0发送成功1则失败
u8 esp8266_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{u8 res0; USART3_RX_STA0;u3_printf(%s\r\n,cmd); if(ackwaittime) {while(--waittime) {delay_ms(10);if(USART3_RX_STA0X8000){if(esp8266_check_cmd(ack)){printf(ack:%s\r\n,(u8*)ack);break;}USART3_RX_STA0;} }if(waittime0)res1; }return res;
} //检测是否应答指令
u8* esp8266_check_cmd(u8 *str)
{char *strx0;if(USART3_RX_STA0X8000) { USART3_RX_BUF[USART3_RX_STA0X7FFF]0;strxstrstr((const char*)USART3_RX_BUF,(const char*)str);} return (u8*)strx;
}//向ESP8266发送指令数据的函数暂时用不到可以自己斟酌加上
//u8* esp8266_send_data(u8 *cmd,u16 waittime)
//{// char temp[5];
// char *acktemp;
// USART3_RX_STA0;
// u3_printf(%s,cmd);
// LCD_ShowString(30,130,200,16,16,cmd);
// if(waittime)
// {
// while(--waittime)
// {
// delay_ms(10);
// if(USART3_RX_STA0X8000)
// {
// USART3_RX_BUF[USART3_RX_STA0X7FFF]0;
// ack(char*)USART3_RX_BUF;
// printf(ack:%s\r\n,(u8*)ack);
// LCD_ShowString(30,190,200,16,16,(u8*)ack);
// USART3_RX_STA0;
// break;
// }
// }
// }
// return (u8*)ack;
//} 主函数
#include delay.h
#include sys.h
#include usart.h
#include usart3.h
#include esp8266.h
#include string.h
#include timer.h
#include led.hint main(void){ char a[15]; delay_init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); uart_init(115200); usart3_init(115200); LED_Init(); esp8266_start_trans(); //ESP8266初始化 while(1){if(USART3_RX_STA0x8000){sprintf(a,%s,USART3_RX_BUF);if(strstr((const char*)a,on)) //输入onLED0亮LED00;if(strstr((const char*)a,off)) //输入offLED0灭LED01; USART3_RX_STA0;}}
} 三、结果实现流程与展示
下面如何用手机实现控制呢
1、首先在手机端下载一个TCP在各大浏览器搜索就有了 2、打开WiFi搜索你设置的热点并连接 3、查看该WiFi的地址 这里可能会有一定的误差错误可能会是192.168.4.1好像要正确的我是去串口调试助手查了一下跟这里又不太一样具体原因我也不太了解如果手机上显示的IP地址不对那就只能利用调试助手进行一下AT指令查询这样比较准确就把串口更改一下就行了记得代码串口也要更改自己尝试上手比较有收获。
4、打开TCP输入地址和端口连接上热点然后就可以进行各种命令了 结果
输入on 输入off 四、总结
哈哈学到这里就会发现你已经轻松掌握了如何使用ESP8266WiFi串口模块了那么接下来就是对所学知识的巩固与实践操作再然后就是利用该模块进阶完成各种设计祝大家会有所收获同时这里附上一个优秀博主的文章我也是从那里吸取经验的他那里有更为详细得讲解遇到问题直接扣扣博主一定会有所解决的加油
优秀文章链接
【常用模块】ESP8266 WIFI串口通信模块使用详解实例附STM32详细代码_Yngz_Miao的博客-CSDN博客_stm32wifi模块
以上就是我这一期的全部内容了讲的可能不太好希望大家多多包涵也可以给博主一个赞你的每一次点赞都是我前进方向上的动力一起加油
走过路过觉得可以给博主点个赞哈哈 题外话
挺喜欢彭于晏说的一句话“我就是没有才华所以才用命去拼”
学习32之路固然辛苦但要是坚持下来了那不是很酷哈哈哈