基于STM32F407的WIFI通信(使用的是ESP8266模块)

2023-05-16

基于STM32F407的WIFI通信(使用的是ESP8266模块)

本次做的是WIFI通信所实现的功能是:由单片机端向客户端发送数据。模式:STA模式(及连接路由器的方式)。(所实现的功能比较简单,只是单方向发送,测试5次,每次均成功,非常稳定,代码也非常简洁)。废话不多说,直接上代码。

(本次上传的代码对于比较懂的仁兄已经够用,如果还有仁兄想要参考完整的源码,可加我微信:wpt666aaa 或QQ:2036795517),这个很方便的。

主要代码

主函数部分:

#include "sys.h"
#include "delay.h"  
#include "usart.h"   
#include "usmart.h"  	
#include "usart3.h"
#include "common.h" 
#include "esp8266.h"

int main(void)
{        
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
	delay_init(168);  //初始化延时函数
	uart_init(115200);		//初始化串口波特率为115200
	usart3_init(115200);  //初始化串口3波特率为115200
	
	
	esp8266_start_trans();
	delay_ms(1000);
	esp8266_send_data("555",100);//像我这里,发送的数据就是555,你可以设置成其它你想要的数据
	atk_8266_quit_trans();
	while(1)
	{
		
	}
}

esp8266.c文件

void esp8266_start_trans(void)
{
    atk_8266_send_cmd("AT+CWMODE=1","OK",50);
    atk_8266_send_cmd("AT+RST","ready",100);	
	delay_ms(1000);
	delay_ms(1000);
	delay_ms(1000);
	delay_ms(1000);
	while(atk_8266_send_cmd("AT+CWJAP=\"WPT\",\"123456789\"","WIFI GOT IP",800));//这里连得是我本人用手机开的热点
	atk_8266_send_cmd("AT+CIPMUX=0","OK",30);
	while(atk_8266_send_cmd("AT+CIPSTART=\"TCP\",\"192.168.43.63\",8080","OK",180));
	atk_8266_send_cmd("AT+CIPMODE=1","OK",180);
	atk_8266_send_cmd("AT+CIPSEND","OK",60);//开始透传
}	

common.c文件

//ATK-ESP8266发送命令后,检测接收到的应答
//str:期待的应答结果
//返回值:0,没有得到期待的应答结果
//    其他,期待应答结果的位置(str的位置)
u8* atk_8266_check_cmd(u8 *str)
{
	
	char *strx=0;
	if(USART3_RX_STA&0X8000)		//接收到一次数据了
	{ 
		USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;//添加结束符
		strx=strstr((const char*)USART3_RX_BUF,(const char*)str);
	} 
	return (u8*)strx;
}


//向ATK-ESP8266发送命令
//cmd:发送的命令字符串
//ack:期待的应答结果,如果为空,则表示不需要等待应答
//waittime:等待时间(单位:10ms)
//返回值:0,发送成功(得到了期待的应答结果)
//       1,发送失败
u8 atk_8266_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{
	u8 res=0; 
	USART3_RX_STA=0;
	u3_printf("%s\r\n",cmd);	//发送命令
	if(ack&&waittime)		//需要等待应答
	{
		while(--waittime)	//等待倒计时
		{
			delay_ms(10);
			if(USART3_RX_STA&0X8000)//接收到期待的应答结果
			{
				if(atk_8266_check_cmd(ack))
				{
					printf("ack:%s\r\n",(u8*)ack);
					break;//得到有效数据 
				}
					USART3_RX_STA=0;
			} 
		}
		if(waittime==0)res=1; 
	}
	return res;
} 



//ATK-ESP8266退出透传模式
//返回值:0,退出成功;
//       1,退出失败
u8 atk_8266_quit_trans(void)
{
	while((USART3->SR&0X40)==0);	//等待发送空
	USART3->DR='+';      
	delay_ms(15);					//大于串口组帧时间(10ms)
	while((USART3->SR&0X40)==0);	//等待发送空
	USART3->DR='+';      
	delay_ms(15);					//大于串口组帧时间(10ms)
	while((USART3->SR&0X40)==0);	//等待发送空
	USART3->DR='+';      
	delay_ms(500);					//等待500ms
	return atk_8266_send_cmd("AT","OK",20);//退出透传判断.
}


//数据发送函数
u8* esp8266_send_data(u8 *cmd,u16 waittime)
{
	
	char temp[5];
	char *ack=temp;
	USART3_RX_STA=0;
	u3_printf("%s",cmd);
	if(waittime)
	{
			
		    while(--waittime)
			{
				delay_ms(10);
				if(USART3_RX_STA&0X8000)
				{
					
					USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;
					ack=(char*)USART3_RX_BUF;
					printf("ack:%s\r\n",(u8*)ack);
					USART3_RX_STA=0;
					break;	
				}	
			}	
	}
	return(u8*)ack;
}	

至于其余的文件都是一些常规的配置文件,这里就不多说了,如果想要源码添加我的联系方式私聊我即可。

结果展示


上图是我试验所得到的结果,之前说过了,我向电脑发送的数据是我自己随便取的一段数字:555。大家可以根据自己的喜好设置数据发送的内容。

在这里插入图片描述
上图是我用到的单片机和WIFI通信模块。

经验总结

本人实现这个功能前前后后花了将近一个月,学到了很多东西,可能对于大佬来说,我现在做的都算不上什么,不过对于我这个单片机入门水平的小白来说,感慨还是挺多的。

1.首先,就是一定要保证你的单片机是可以正常运行的,WIFI通信模块(本人使用的是正点原子的ESP28266模块,性能还是可以的)。可以用一个USB转TTL进行指令操作,判断ESP8266模块是否能正常运行(因为最近要忙着准备电赛,这个我过一段时间会再发布一个对应的指令调试教程)

2.其次,一定要多阅读代码。我是查阅了CSDN上几乎所有的相关代码,各种修改,删减,浓缩成现在这个样子。目前我这个代码放眼整个CSDN应该算是最精简的了(当然,不排除某些牛逼的大佬可以做到更加精简),你们可以在我这个代码的基础上添加各种功能,如果不需要,你就可以直接拿来用了。

3.你只有看懂了,才能拿来用,所以最好不要放过任何一个疑问,说不定这个疑问就是解决问题的关键。

4.最后在强调一下我这部分代码实现的功能:由单片机向电脑或手机传送数据(你们需要在电脑或手机下载一个网络调试助手)。或者自己开发一个APP用来接收数据。如果你们想要双向数据传输,可自行添加修改代码,这里我就不便多说了。可以说我提供的这段代码算是最最基础的,你们可以在这个基础上做一些“上层建筑”,都是可以的。

5.最后的最后,支持还是要支持一下的,请求各路英雄豪杰多多打赏,多多关注,多多点赞,我是只发布高质量文章的李白有点儿黑。

源码的链接:https://download.csdn.net/download/qq_50027598/18936540

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于STM32F407的WIFI通信(使用的是ESP8266模块) 的相关文章

  • 有没有办法在 iOS 中以编程方式打开和关闭蓝牙和/或 WiFi?

    我正在寻找一种简单的方法来在 iOS 4 x 设备 iPhone 和 iPad 上切换蓝牙和 WiFi 的打开和关闭状态 当我在不同的位置和使用场景之间移动时 我会不断切换这些功能 现在需要多次点击并访问 设置 应用程序 我希望创建一个简单
  • 以编程方式连接到 Android wifi 网络

    我正在尝试连接到选定的 wifi 网络 从 UI 但无法连接到它 这是我的代码 private boolean addNetworkAndActivate ScanResult scanResult String password Wifi
  • 关于 HTML 5 中的地理定位

    现在 Google 地图可以在 Firefox 的帮助下以街道精度精确定位我的位置 我知道这是 HTML 5 兼容浏览器的一项新功能 并且该位置是通过使用连接的 WiFi 网络的某种功能来获取的 我希望我没有做出任何愚蠢的假设 我想知道的是
  • 无法与 WPA2 android 连接

    我正在使用以下代码与 Android 中的 WPA2 连接 我可以与 WEP 和 WPA 连接 但我只获得 扫描 状态 我无法连接 WPA2 网络 你能告诉我需要进行哪些更改才能使此代码与 wpa2 WiFi 相关吗 private boo
  • Sntp.sync() 忽略服务器

    我一直在尝试与 ntp 服务器同步时间 但是 nodemcu 似乎忽略了服务器参数 sync lua sntp sync fr pool ntp org function tm rtctime epoch2cal rtctime get p
  • 如何捕获无线路由器的原始信号?

    我现在看到了几个项目 它们从典型无线路由器收集的无线电数据中获取新颖的空间信息 http wisee cs washington edu http wisee cs washington edu http www extremetech c
  • 我可以使用 WiFi 在两部未连接路由器的 Android 手机之间传输数据/消息吗?

    我知道如果两个Android手机连接到同一个wifi网络 它们可以实现套接字编程来在它们之间传输数据 但我其实想知道是否可以使用wifi作为两部Android手机之间的传输介质 就像蓝牙一样 使用 Android 2 2 可以在一台设备上创
  • iOS6 在非越狱设备上切换 WiFi

    我正在开发一个内部 iOS 应用程序 不适用于苹果商店 所以我很乐意使用私有 API 并且我希望能够以编程方式打开或关闭 wifi 我想要这样做的原因是 对于某些 WiFi 路由器 每当互联网连接中断时 iPad 就无法恢复 WiFi 不过
  • 启用/禁用 Microsoft 虚拟 WiFi 微型端口

    我禁用了我的Microsoft Virtual WiFi Miniport网络适 配器来自Control Panel Network and Internet Network Connections 只需右键单击微型端口网卡并单击 禁用 它
  • 我如何使用肘节检查连接性?

    我需要使用连接库检查应用程序内每个页面的连接性 所以我将在提供者内部使用一肘 问题是何时关闭流以便在用户关闭应用程序时可以处理它 像这样 import package connectivity connectivity dart overr
  • 多久轮询一次 wifi 信号强度?

    理想情况下 我希望近乎实时地监控无线网络的信号强度 比如每 100 毫秒一次 但如此高的频率可能有点过大了 我正在使用托管无线网络 http managedwifi codeplex com 库轮询 RSSI 我实例化一个WlanClien
  • 使用 SPIFFS 加载文件时出现问题 (ERR_CONTENT_LENGTH_MISMATCH)

    好吧 这两天我一直在研究这个问题 但我仍然觉得我一无所获 我最近开始使用SPIFFS 文件系统 for Arduino开发于呼扎 ESP8266像FSBrowser ino例如 虽然它在分离代码方面非常出色 但随着我的代码不断增长 它在稳定
  • 如何在没有互联网的情况下通过 wifi 提供网站服务?

    我想通过开放的 wifi 连接提供网站服务 但我不希望此 wifi 连接能够访问互联网 这是否可能以及我将如何去做 我已经在本地设置了网站 并通过本地主机或 IP 地址在浏览器中进行了访问 但我不确定如何设置网络服务器并通过 wifi 为网
  • Java获取无线网络的SSID等信息

    我正在尝试用 Java 获取无线网络设备的 SSID 我尝试了官方网络教程http java sun com docs books tutorial networking nifs retriving html http java sun
  • 从 Android 打印,无需系统对话框

    我想从我的 Android 应用程序打印图像 打印机 canon selphy cp910 带 wifi direct 我尝试使用 Google API 和 android support v4 print PrintHelper 类 它有
  • 无论我如何尝试,“netsh wlan startHostednetwork”命令都不起作用

    C Windows system32 gt netsh wlan 显示驱动程序 接口名称 无线网络连接 Driver DW1501 Wireless N WLAN Half Mini Card Vendor Broadcom Provide
  • 在 iOS 11 上使用 Swift 计算或获取 wifi 强度的方法

    正在寻找一种获取或计算设备 WiFi 强度的方法 见过抓取状态栏的示例 但无法使其在 iOS 11 上工作 func getSignalStrength gt Int let application UIApplication shared
  • 检测 Android 上的网络连接类型

    如何检测 Android 上的网络连接类型 是否通过ConnectivityManager getActiveNetworkInfo getType 答案是否仅限于 Wifi 和移动设备 如果问题是要确定手机的网络是否已连接且速度是否足以满
  • 获取 Wi-Fi 配置文件信息

    我使用的是 Windows 8 1 它没有工具 带有 GUI 来管理 wifi 网络配置文件 所以我正在写一篇对我有帮助的文章 我做了一些谷歌搜索并发现托管 Wifi API https managedwifi codeplex com 并
  • 更改 Wi-Fi 配置文件的密码

    在我志愿服务的长期护理医院中 每个月的第一天 访客 Wi Fi 连接的密码都会更改 这给工作人员带来了大量的工作 也给患者带来了很多挫败感 其中许多人的行动能力非常有限 是的 真正的解决方案是让 IT 团队保留相同的密码 但这不会发生 大多

随机推荐

  • 汽车CAN总线介绍

    CAN Controller Area Network 控制器局域网络 xff0c CAN网络在早期的整车应用中以BCM 车身控制器 为控制中心 xff0c 主要是车身零部件 雨刮 大灯 车窗 xff0c 智能硬件较少 xff0c 所以早期
  • /usr/bin/ssh-copy-id: ERROR

    搭建hadoop的时候不小心配错域名 导致配置免密码登陆的时候密码一直输入错误 重新修改域名后在配置就一直报错 解决办法 在 ssh目录下修改known hosts文件中配置错的域名 直接删除 重新执行命令 ssh copy id slav
  • 完整安装PX4/PX4-Autopilot,无需科学上网。

    安装自https github com PX4 PX4 Autopilot 的px4功能包 xff0c 因为需要科学上网似乎会失败 xff0c 这里采用其他方法来安装 截止到2022年9月 https hub fastgit xyz这个镜像
  • linux 安装docker报错解决

    出现问题说明 xff1a 当已经确定好了docker安装好了 xff08 用dockers version确认版本的情况下 xff09 一般可以正常运行 xff0c 但是用命令查看systemctl status docker运行状态时 x
  • 网络编程——UDP编程

    一 网络编程基础 计算机网络是指两台或更多的计算机组成的网络 xff0c 在同一个网络中 xff0c 任意两台计算机都可以直接通信 xff0c 因为所有计算机都需要遵循同一种网络协议 因此 xff0c 为了把计算机网络接入互联网 xff0c
  • Ubuntu20.04配置ORB-SLAM3环境并运行

    Ubuntu20 04配置ORB SLAM3环境并运行 1 安装依赖 安装Pangolin 安装OPENCV 安装Eigen 安装Python DBow2和g2o 2 源码下载3 遇到的问题1 编译第三方库出现问题 xff0c 安装Boos
  • toString()方法的作用

    将当前函数的函数名 和引用地址 以数组的形式返回 toString 方法是自带object类中的方法 如果不对toString 方法进行重写 xff0c 那么默认返回对象名和引用地址 重写示例 xff1a package com artis
  • Windows通过FTP服务上传20G大文件到Linux服务器

    场景描述 xff1a 在工作中 xff0c 需要将Windows中的文件上传到Linux服务器中 xff0c 文件大小为20G 通过xshell和rz lrzsz软件提供 xff0c rz上传文件 xff0c sz下载文件 的方式均无法上传
  • Postman Pre-request Script(预处理脚本) SNIPPETS所有用法解释

    获取环境变量 xff0c 全局变量 Get an environment variable 获取环境变量variable key pm environment get 34 variable key 34 Get a global vari
  • 编译ros工程时catkin_make 报错:This file requires compiler and library support for the ISO C++ 2011 standard

    This file requires compiler and library support for the ISO C 43 43 2011 standard This support must be enabled with the
  • ESP8266解析S-BUS协议

    Talk is cheap show you code 编译平台 xff1a Arduino IDE span class token comment 功能 xff1a 软件串口读取S BUS数据 xff1b 解析 xff1b 串口打印 s
  • CAN的ACK深入理解

    CAN信息发送成功后 xff0c 会有个应答间隙的 xff0c 在这个间隙内 xff0c 接收节点可以准备要回复的信息 xff0c 也就是把应答场填充为显性0 xff0c 在发送时其为隐性1 应答过程可能如下 xff1a 当信息传输到ACK
  • 二、Docker镜像使用和命令

    文章目录 Docker镜像使用和命令列出本机镜像查找镜像拉取镜像删除镜像删除所有镜像镜像的原理 Docker镜像使用和命令 镜像就是一个轻量级的 xff0c 可执行的独立软件包 xff0c 用来打包软件运行环境和基于运行环境开发的软件 xf
  • 阿里云ECS centos8连接可视化界面

    阿里云ECS centos8连接可视化界面 文章目录 阿里云ECS centos8连接可视化界面安装图形化界面安装VNC Server客户端设置界面为中文 安装图形化界面 使用以下命令安装图形桌面的软件包 yum groupinstall
  • DJI-OSDK开发

    DJI OSDK开发 一 简介 Onboard SDK xff0c 顾名思义就是跑在板子上的一套SDK接口 xff0c 通过串口与飞控进行通信 xff0c 通过调用这些接口 xff0c developer就可以实现对DJI A3 N3 M1
  • Linux 虚拟机centos /dev/mapper/cl-root 100% 解决方法

    1 在虚拟机中添加硬盘 一 添加新的磁盘 1 选择 虚拟机设置 并打开 xff0c 将光标定位在 硬盘 SCSI 选项上 xff0c 然后点击下方的 添加 按钮 2 点击下一步 3 选择SCSI 点击下一步 4 选择创建新虚拟机磁盘 xff
  • 解决ROS系统 rosdep update超时问题,省时又好用的方法,根本不需要修改什么文件这么麻烦

    直接使用小鱼提供的rosdepc 1 安装rosdepc wget http fishros com install O fishros amp amp bash fishros 2 输入数字3安装rosdepc 3 然后执行rosdepc
  • ubuntu安装kalibr,并进行相机和IMU(惯性测量单元)的内外参联合标定

    1 IMU内参的标定 参考我的另一篇博客 xff1a 4条消息 ubuntu安装imu utils xff0c 并进行IMU xff08 惯性测量单元 xff09 内参标定 xffe3 莫等闲 的博客 CSDN博客 https blog c
  • 华清远见电子词典

    1 服务器 include lt stdio h gt include lt sys types h gt include lt sys socket h gt include lt pthread h gt include lt sqli
  • 基于STM32F407的WIFI通信(使用的是ESP8266模块)

    基于STM32F407的WIFI通信 xff08 使用的是ESP8266模块 xff09 本次做的是WIFI通信所实现的功能是 xff1a 由单片机端向客户端发送数据 模式 xff1a STA模式 xff08 及连接路由器的方式 xff09