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
ATOK

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 IPif(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;//点亮D5memset(buffer, '\0', SIZE);}if(buffer[0] == 'L' && buffer[2] == '0'){D5 = 1;//熄灭D5memset(buffer, '\0', SIZE);}if(i == 12) i = 0;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/495944.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

麒麟银河操作系统V10部署ffmpeg

麒麟银河操作系统V10部署ffmpeg 部署ffmpeg用来处理视频的各种操作 想使用ffmpeg&#xff0c;要先安装nasm&#xff0c;yasm&#xff0c;x264之后&#xff0c;否则会报错 nkvers 查看麒麟操作系统版本 cat /proc/version #查看linux版本信息 uname -a #查看linux版本和内核…

基于uniapp框架的古汉语学习考试系统 微信小程序python+java+node.js+php

1、一般用户的功能及权限 所谓一般用户就是指还没有注册的过客,他们可以浏览主页面上的信息。但如果需要其它操作时&#xff0c;要登录注册&#xff0c;只有注册成功才有的权限。 2、管理员的功能及权限 用户信息的添加和管理&#xff0c;古汉语信息加和管理和学习视频添加和管…

Flink动态分区裁剪

1 原理 1.1 静态分区裁剪与动态分区裁剪 静态分区裁剪的原理跟谓词下推是一致的&#xff0c;只是适用的是分区表&#xff0c;通过将where条件中的分区条件下推到数据源达到减少分区扫描的目的   动态分区裁剪应用于Join场景&#xff0c;这种场景下&#xff0c;分区条件在joi…

springboot+vue+mysql+easyexcel实现文件导出+导出的excel单元格添加下拉列表

Excel导出 EasyExcel官方文档 官方文档本身写的非常详细&#xff0c;我就是根据官方文档内的写Excel里web中的写实现的导出 后端 对象 需要写一个实体类 其中涉及到一些用到的EasyExcel的注解 ColumnWidth(20) 列宽设为20&#xff0c;自定义的&#xff0c;放在实体类上面是…

Linux线程(二)----- 线程控制

目录 前言 一、线程资源区 1.1 线程私有资源 1.2 线程共享资源 1.3 原生线程库 二、线程控制接口 2.1 线程创建 2.1.1 创建一批线程 2.2 线程等待 2.3 终止线程 2.4 线程实战 2.5 其他接口 2.5.1 关闭线程 2.5.2 获取线程ID 2.5.3 线程分离 三、深入理解线程 …

NR 2-STEP RA Absolute Timing Advance Command MAC CE的应用场景

3 GPP在 R2-2002413中将2-step RA引入&#xff0c;进而R16 38.321出现了 Absolute TAC MAC CE&#xff0c;在 NR Timing Advance(TA)_ntn rrc-CSDN博客 有提到这个MAC CE&#xff0c;当时以“absolute timing advance command MAC CE 在2-step RA的某个场景下使用”一笔带过&am…

CopyOnWriteArrayList 使用介绍

目录 一、背景1.1 线程安全问题复现1.2 问题跟踪线程安全隐患一&#xff1a;数组越界线程安全隐患二&#xff1a;值为null 二、定义2.1 什么是 CopyOnWriteArrayList&#xff1f;2.2 CopyOnWriteArrayList 的优点2.3 CopyOnWriteArrayList 的缺点 三、解决问题 一、背景 1.1 线…

React回顾

一、基础 1、使用babel解析 2、不直接使用jsx&#xff0c;jsx写起来很繁琐 3、jsx语法规则 4、函数式组件的使用 5、函数式组件渲染 6、类组件渲染 7、类组件中事件调用this指向问题 8、类组件不能直接改变状态 9、props接收数据类型限制 类型限制放到类组件内部&#xff0c;用…

C#区域医院云LIS信息管理系统源码 标本管理、两癌筛查、数据分析、试剂管理

目录 ​编辑 区域医院云LIS系统功能亮点&#xff1a; 云LIS系统功能&#xff1a; 一、 基础管理 二、 前处理&#xff08;实验室&#xff09; 三、 标本处理 四、 样本检验 五、 统计报表 六、 质控管理 七、 基本工作流程 区域LIS系统特点&#xff1…

【mysql】1812 - Tablespace is missing for table `job`.`xxl_job_log`.

打开表提示&#xff1a; 1812 - Tablespace is missing for table job.xxl_job_log. 1812-表“job”缺少表空间xxl_job_log。 尝试删除表重建表 DROP TABLE IF EXISTS job.xxl_job_log; 提示&#xff1a; 1051 - Unknown table job.xxl_job_log 1051-未知表“job.xxl_job_lo…

【Java EE初阶二十六】简单的表白墙(二)

2. 后端服务器部分 2.1 服务器分析 2.2 代码编写 2.2.2 前端发起一个ajax请求 2.2.3 服务器读取上述请求,并计算出响应 服务器需要使用 jackson 读取到前端这里的数据,并且进行解析&#xff1a; 代码运行图&#xff1a; 2.2.4 回到前端代码&#xff0c;处理服务器返回的响应…

leetcode 3.反转链表;

1.题目&#xff1a; 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 2.用例&#xff1a; 3.题目解析&#xff1a; &#xff08;1&#xff09;函数头&#xff1a; 要求返回结点&#xff0c;就 ListNode* reverseList(ListNode* head)&…