51单片机 wifi连接

一、基本概念

ESP8266是一款集成了WiFi功能的高性能芯片,广泛应用于物联网设备、智能家居、传感器网络等领域。以下是ESP8266的详细讲解:

1. 功能特点:ESP8266集成了TCP/IP协议栈,支持STA(Station)和AP(Access Point)模式,可以连接到无线路由器,并且可以作为热点提供WiFi连接。ESP8266还支持多路TCP/UDP连接,支持WPA/WPA2加密,具有低功耗特性。

2. 硬件特性:ESP8266内置了Tensilica L106 32位微控制器,工作频率可达80MHz;集成了高性能天线,功耗低,性能稳定;支持SPI、I2C、UART等多种接口,方便与传感器、外围设备进行通信。

3. 开发环境:ESP8266的开发通常使用Arduino IDE、Espressif SDK等开发工具,也可以使用Lua语言进行开发。Espressif Systems提供了丰富的文档和示例代码,方便开发者快速上手。

4. 项目应用:ESP8266广泛应用于物联网设备、智能家居、智能灯光系统、无线传感器网络等领域。通过ESP8266,可以实现设备之间的远程控制、数据传输、远程监测等功能。

5. 资源丰富:ESP8266拥有庞大的开发者社区和支持者,有丰富的资源和教程,方便开发者学习和解决问题。

总的来说,ESP8266作为一款强大的WiFi模块,具有良好的稳定性、低成本和丰富的功能特性,适合用于各种物联网和智能设备的开发与应用。

二、配置wifi模块

2.1 AT

WIFI GOT IP
AT


OK

2.2 配置成9600波特率
 

AT+UART=9600,8,1,0,0

2.3 设置工作模式

1. 是station(设备)模式 2.是AP(路由)模式 3.是双模

AT+CWMODE=3

2.4 以设备模式接入家中路由器配置
 

AT+CWJAP="ChinaNet-dUNY","g6jdzedh"   //第一个括号写的是自己的wifi号 第二个写的是wifi密码

2.5 查询IP地址
 

AT+CIFSR

+CIFSR:APIP,"192.168.4.1"
+CIFSR:APMAC,"8e:ce:4e:cf:19:22"
+CIFSR:STAIP,"192.168.1.12"
+CIFSR:STAMAC,"8c:ce:4e:cf:19:22"

2.6 连接到 TCP server

AT+CIPSTART="TCP","192.168.1.9",8880


 

三、代码

#include "reg52.h"
#include "intrins.h"
#include <string.h>


#define SIZE 12
sfr AUXR = 0x8E;
sbit D5 = P3^7;
sbit D6 = P3^6;

char buffer[SIZE];
code char LJWL[]  = "AT+CWJAP=\"ChinaNet-dUNY\",\"g6jdzedh\"\r\n"; //入网指令
code char LJFWQ[] = "AT+CIPSTART=\"TCP\",\"192.168.1.9\",8880\r\n"; //连接服务器指令
char TCMS[]  = "AT+CIPMODE=1\r\n";  //透传指令
char SJCS[]  = "AT+CIPSEND\r\n";	//数据传输开始指令
char RESET[] = "AT+RST\r\n";		//重启模块指令
char AT_OK_Flag = 0;				//OK返回值的标志位
char AT_Connect_Net_Flag = 0;		//WIFI GOT IP返回值的标志位
 
void UartInit(void)		//9600bps@11.0592MHz
{
	AUXR = 0x01;
	SCON = 0x50; //配置串口工作方式1,REN使能接收
	TMOD &= 0x0F;
	TMOD |= 0x20;//定时器1工作方式位8位自动重装
	
	TH1 = 0xFD;
	TL1 = 0xFD;//9600波特率的初值
	TR1 = 1;//启动定时器
	
	EA = 1;//开启总中断
	ES = 1;//开启串口中断
}

void Delay1000ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 8;
	j = 1;
	k = 243;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void sendByte(char data_msg)
{
	SBUF = data_msg;
	while(!TI);
	TI = 0;
}

void sendString(char* str)
{
	while( *str != '\0'){
		sendByte(*str);
		str++;
	}
}

void main()
{
	int mark = 0;
	D5 = D6 = 1;//灭状态灯
	//配置C51串口的通信方式
	UartInit();
	Delay1000ms();//给espwifi模块上电时间
	
	//发送联网AT指令并等待成功
	sendString(LJWL);
	//while(!AT_Connect_Net_Flag);
	while(!AT_OK_Flag);
	AT_OK_Flag = 0;
	//发送连服务器指令并等待成功
	sendString(LJFWQ);
	while(!AT_OK_Flag);
	AT_OK_Flag = 0;
	//发送透传模式指令并等待成功
	sendString(TCMS);
	while(!AT_OK_Flag);
	AT_OK_Flag = 0;
	//发送数据传输指令并等待成功
	sendString(SJCS);
	while(!AT_OK_Flag);
	
	if(AT_Connect_Net_Flag){
			D5 = 0;//点亮D5,代表入网成功
	}
	if(AT_OK_Flag){
		D6 = 0;//点亮D6,代表连接服务器并打开透传模式成功
	}
	
	while(1){
		Delay1000ms();
		//“心跳包”
		sendString("chenlichen shuai\r\n");
	}
}

void Uart_Handler() interrupt 4
{
	static int i = 0;//静态变量,被初始化一次
	char tmp;

	if(RI)//中断处理函数中,对于接收中断的响应
	{
			RI = 0;//清除接收中断标志位
			tmp = SBUF;
			if(tmp == 'W' || tmp == 'O' || tmp == 'L' || tmp == 'F'){
				i = 0;
			}
			buffer[i++] = tmp;
			//入网成功的判断依据WIFI GOT IP
			if(buffer[0] == 'W' && buffer[5] == 'G'){
				AT_Connect_Net_Flag	= 1;
				memset(buffer, '\0', SIZE);
			}
			//连接服务器等OK返回值指令的判断
			if(buffer[0] == 'O' && buffer[1] == 'K'){
				AT_OK_Flag	= 1;
				memset(buffer, '\0', SIZE);
			}
			//联网失败出现FAIL字样捕获
			if(buffer[0] == 'F' && buffer[1] == 'A'){
				for(i=0;i<5;i++){
					D5 = 0;
					Delay1000ms();
					D5 = 1;
					Delay1000ms();
				}
				sendString(RESET);
				memset(buffer, '\0', SIZE);
			}
			//灯控指令
			if(buffer[0] == 'L' && buffer[2] == '1'){
				D5 = 0;//点亮D5
				memset(buffer, '\0', SIZE);
			}
			if(buffer[0] == 'L' && buffer[2] == '0'){
				D5 = 1;//熄灭D5
				memset(buffer, '\0', SIZE);
			}
			if(i == 12) i = 0;
	}
		
}

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ESP32 Arduino可以通过WiFi进行数据传输。ESP32 Arduino板可以作为WiFi客户端或服务器来连接到网络并传输数据。使用WiFi库,可以轻松地设置和管理WiFi连接。一旦连接到网络,可以使用TCP或UDP协议在ESP32 Arduino板和其他设备之间传输数据。此外,还可以使用MQTT协议进行数据传输,这是一种轻量级的消息传输协议,适用于物联网应用程序。 ### 回答2: ESP32是一款集成了Wi-Fi和蓝牙功能的开发板,可用于构建智能家居、物联网设备以及其他网络连接应用。在基于Arduino平台进行开发时,ESP32与WiFi数据传输可以通过以下几种方式实现: 1. 使用标准的WiFi库 ESP32基于ESP-IDF(Espressif IoT Development Framework)平台,其中包含了WiFi库,可以通过Arduino IDE访问。该库支持STA(站点)和AP(访问点)模式,可进行TCP和UDP通信。开发者可以使用该库来建立Web服务器、客户端或者获取Wi-Fi网络状态信息等。 2. 使用ESPAsyncWebServer库 该库基于WiFi库,是一个异步Web服务器,它支持JSON响应、WebSocket和服务器推送事件(SSE)。相较于标准WiFi库,ESPAsyncWebServer库的处理速度更快,可在短时间内处理大量请求。这对于需要高效处理数据传输的应用来说是非常重要的。 3. 使用MQTT协议 MQTT是一种轻量级的消息传输协议,可用于发布/订阅模式的通信。它在物联网和智能家居应用中非常流行,因为它可以节省带宽和电量消耗,从而提高传输效率。使用MQTT协议需要一个MQTT服务器,开发者可以使用Eclipse Mosquitto或者其他开源的MQTT服务器。 4. 使用WebSocket协议 WebSocket是一种支持双向通信的协议,与HTTP协议不同的是,它允许服务器主动向客户端发送数据。使用WebSocket可以实现实时通信、即时聊天等应用。在ESP32上开发WebSocket通信,需要使用一些库,比如ArduinoWebSocket、ESPAsyncTCP等。 总的来说,ESP32与WiFi数据传输非常灵活,可按照不同的应用需求,采用不同的通信方式。开发者需要根据具体需求进行选择,从而构建出高性能、高效率的应用。 ### 回答3: ESP32 Arduino 是一款强大的 IoT 开发工具,其具备了丰富的接口、协议以及深度开源社区支持等诸多优势。其中,其 WiFi 功能也是使用非常广泛的一个方面。 ESP32 Arduino WiFi 数据传输可以基于很多不同的协议和接口进行。以下是其中几个比较典型的: 1. TCP/IP 协议:ESP32 可以使用 TCP/IP 协议在 WiFi 网络中进行数据传输。使用 Arduino IDE 来编写代码并上传到 ESP32 上即可进行数据传输。需要注意的是,由于 TCP/IP 协议是基于电子邮件模型的,所以对象取决于邮件的收件人地址。 2. MQTT 协议:MQTT 是一种非常流行的 IoT 通信协议,它是一种基于发布 / 订阅的模型。ESP32 可以使用 MQTT 协议来进行数据传输,需要使用外部MQTT 服务器,例如 mosquitto。Arduino IDE 中有大量的库可用于集成 MQTT 功能。 3. Bluetooth:ESP32 还支持 Bluetooth 通信,也就是蓝牙通信。通过蓝牙模块,可以使用 ESP32 进行无线数据传输到手机或其他蓝牙设备。需要注意的是,由于 BLE(蓝牙低能耗)是一个相对较新的协议,因此不是所有设备都能够支持它。 在 ESP32 Arduino WiFi 数据传输的不同协议和接口之间选择时,需要考虑各种不同的需求和限制因素,例如时延、带宽等。选择正确的协议和接口是关键,可以使 ESP32 可以正常地进行数据传输并发挥其全部潜力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值