一、电脑端实现单片机与ESP8266的通信

2023-05-16

#1.准备工具(硬件、软件)

硬件:51单片机开发板、ESP8266无线模块(ESP8266-01)、TTL-USB串口、杜邦线、数据线;

软件:keil uv4单片机软件、STC-ISP烧录软件、串口调试助手:SSCOM或ATK-XCOM、TCP/UDP调试助手:SocketTool或网络调试助手。

#2.实验步骤

(1)先将ESP8266-01和TTL-USB串口连接,再接上电脑,下面是接线图,通过电脑来检测无线模块的通信是否正常。

ESP8266-01

TTL-USB

TXD

RXD

RXD

TXD

CH_PD、VCC

3.3V或5V(会很烫,容易烧坏)

GND

GND

                                 

 (2)AT指令测试

AP模式:1)ESP8266作Server端,电脑作Client端。(本实验方式)

在按上述方式连接电脑后,打开ATK-XCOM调试助手,按照顺序输入以下指令,如果每条指令都返回OK,则证实指令成功。

AT+RST返回OK(这是重启模块,开始执行指令);

AT+CWMODE=3AT+CWMODE=2,返回OK(1-Station模式, 2-AP模式, 3-AP兼Station模式);

AT+CWSAP="wifi_yuan","123456789",11,4,返回OK(该指令在AP模式开启后生效);

AT+CIPMUX=1,返回OK(0-单路连接模式, 1-多路连接模式);

AT+CIPSERVER=1,8080返回OK0-关闭server模式,1-开启server模式);

接着打开SocketTool软件,选择Client,填端口号,模块地址。

2)ESP8266作客户端,电脑端作服务端(补充)

关闭 server 服务 (如果没有开启 server 服务,可免除此步骤)

发送命令: AT+CIPSERVER=0(设置指令)

创建服务器

 

点击 Listening,变成红色就可以了。

发送命令: AT+CIPMUX=1(开启多连接模式)

建立 TCP 连接
发送命令 AT+CIPSTART=2,"TCP","192.168.4.101",8080 (设置指令)

向服务器发送数据
发送命令 AT+CIPSEND=2,8(设置指令) (通过上一条指令 AT+CIPSTART 设置为 ID=2

(3)实验操作。

1)单片机连接ESP8266模块,TXDRXDRXDTXD3.3VCH_PDVCCGNDGNDSTC89C52的引脚图可以百度,也可以用其他芯片。

2)keil uv4软件编译程序,操作用法自己百度,把程序生成hex文件后,用STC-ISP烧入单片机,记得烧写程序时,把ESP8266VCC接口拔下,防止影响程序烧入单片机。当程序烧入单片机后,连接好ESP8266,会在ATK-XCOM助手中生成程序中的AT指令,此时通过AP模式1)方式连接,电脑连接ESP8266wifi,这时在SocketTool或网络调试助手中输入GP  0,红灯亮,接收区为ATK-XCOM,显示红灯亮字样,GP  1,红灯灭,GP  2,绿灯亮,GP  2,绿灯灭,还有黄灯等,根据程序的指令操作LED的灯亮灭。

(4)程序

#include <reg51.h>

#define uint unsigned int

#define uchar unsigned char  

sbit LED0=P1^0;          //红灯

sbit LED1=P1^2;                //绿灯

sbit LED2=P1^4;            //黄灯

 

/*****************相关变量**************/

uchar Receive,i,qj,yz,zz,ht;                             

uint n; 

uchar Recive_table[40];                  //用于接收wifi模块反馈到MCU上的数据 

 

/*******************************************************************

名称:延时函数  作用:毫秒级延时,微妙级延时函数,为数据收发完成作等待....... 

********************************************************************/

void ms_delay(uint t)

        uint i,j; 

        for(i=t;i>0;i--)  

        for(j=110;j>0;j--);

}  

 

void us_delay(uchar t)

        while(t--);

}        

 

void Uart_Init()                                //使用定时器1作为波特率发生器(STC89C52STC89C51AT89C51等均可)

    TMOD = 0x20;

    SCON = 0x50;                                 //设置串行方式

    TH1 = 0xFD;                                         //波特率9600

    TL1 = TH1;

    PCON = 0x00;

    EA = 1;                                                //总中断打开

    ES = 1;                                                //开串口中断 

    TR1 = 1;                                        //启动定时器1

}

 

/********************************************************************

名称:串口发送函数  功能:MCU向无线WIFI模块ESP8266发送数据 

********************************************************************/

void Send_Uart(uchar value)

        ES=0;                                                  //关闭串口中断 

        TI=0;                                           //清发送完毕中断请求标志位  

        SBUF=value;                                 //发送 

        while(TI==0);                                 //等待发送完毕  

        TI=0;                                           //清发送完毕中断请求标志位  

        ES=1;                                                  //允许串口中断  

 

/********************************************************************

名称:WIFI模块设置函数  作用: 启动模块,以便可以实现无线接入和控制 

********************************************************************/

 

void ESP8266_Set(uchar *puf)         // 数组指针*puf指向字符串数组                

{   

        while(*puf!='\0')                    //遇到空格跳出循环 

        {  

                Send_Uart(*puf);                  //WIFI模块发送控制指令。  

                us_delay(5);  

                puf++;   

        } 

        us_delay(5); 

        Send_Uart('\r');                         //回车 

        us_delay(5); 

        Send_Uart('\n');                           //换行 

}

 

/********************************************************************

名称:WIFI模块发送函数  作用: 启动模块,以便可以实现无线接入和控制 

********************************************************************/

void ESP8266_Sent(uchar *puf)      // 数组指针*puf指向字符串数组              

{

      ESP8266_Set("AT+CIPSEND=0,26"); 

      while(*puf!='\0')    //遇到空格跳出循环

      {

           Send_Uart(*puf);   //WIFI模块发送控制指令。

           us_delay(5);

           puf++;     

      }

      us_delay(5);

      Send_Uart('\n');   //换行

      ms_delay(10);

}

/********************************************************************

名称:主函数  作用:程序的执行入口 

********************************************************************/

 

void main()

{         

        Uart_Init();

              ms_delay(2000);

              ESP8266_Set("AT+RST");                                                                                           //波特率发生器

        ms_delay(2000);

        ESP8266_Set("AT+CWMODE=2");                                                         //设置路由器模式1 station,模式2 AP,模式3 station+AP混合模式  

        //ms_delay(2000);

        //ESP8266_Set("AT+RST");                                                                         //重新启动wifi模块           

        ms_delay(2000);

        ESP8266_Set("AT+CWSAP=\"wifi_yuan\",\"123456789\",11,4");          //AT+CWSAP="wifi_yuan","123456789",11,4  设置模块SSID:WIFI, PWD:密码 及安全类型加密模式(WPA2-PSK

        ms_delay(2000);

        ESP8266_Set("AT+CIPMUX=1");                                                                //开启多连接模式,允许多个各客户端接入

        ms_delay(2000);

        ESP8266_Set("AT+CIPSERVER=1,8080");                                          //启动TCP/IP 实现基于网络//控制         ESP8266_Set("AT+CIPSERVER=1,5000"); 

        ms_delay(2000);

        ESP8266_Set("AT+CIPSTO=0");                                                         //永远不超时

        ES=1;                                                                                           //允许串口中断                

        qj=1;

        zz=1;

        yz=1;

        ht=1;

        LED0=1;

        LED1=1;

        LED2=1;

        while(1)  

        {   

                if((Recive_table[0]=='+')&&(Recive_table[1]=='I')&&(Recive_table[2]=='P')&&(Recive_table[3]=='D'))//MCU接收到的数据为+IPD时进入判断控制0\1来使小灯亮与灭   

                {          

                        if((Recive_table[9]=='G')&&(Recive_table[10]=='P'))           

                        {      

                                if(Recive_table[15]=='0')     

                                {      

                                        LED0=0;                         //红灯亮                         

                                    ESP8266_Sent("1号灯开灯miandeng");

//wifi模块向pc端或手机端 发送"灯灭

                                }                               

                                else

                                if (Recive_table[15]=='1')     

                                {              

                                        LED0=1;                         //红灯灭

                                    ESP8266_Sent("1号灯关灯liangdeng");    

//wifi模块向pc端或手机端 发送"灯亮

                                }

                                else

                                if (Recive_table[15]=='2')     

                                {             

                    LED1=0;            //绿灯亮 

                                        ESP8266_Sent("2号灯开灯miandeng");        

                                }

                                else

                                if (Recive_table[15]=='3')     

                                {             

                        LED1=1;                    //绿灯灭

                                        ESP8266_Sent("2号灯关灯miandeng");

                                }

                                else

                                if (Recive_table[15]=='4')     

                                {             

                        LED2=0;                       //黄灯亮

                                        ESP8266_Sent("3号灯开灯miandeng");

                                } 

                                else

                                if (Recive_table[15]=='5')     

                                {             

                        LED2=1;                       //黄灯灭

                                        ESP8266_Sent("3号灯关灯miandeng");

                                }                                                                                                                                                             

                        } 

                }

          }   

}   

 

/********************************************************************* 

名称:串行通讯中断  作用:发送或接收结束后进入该函数,对相应的标志位软件清0,实现模块对数据正常的收发。 

********************************************************************/

 

void Uart_Interrupt() interrupt 4        

{   

        static uchar i=0; 

        if(RI==1) 

        {  

                RI=0;  

                Receive=SBUF;                                                        //MCU接收wifi模块反馈回来的数据      

                Recive_table[i]=Receive;  

                if((Recive_table[i]=='\n'))

                {                    

                        i=0;

                }   

                else i++;                                                                                  //遇到换行 重新装值 

        }  

        else TI=0;  

}

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

一、电脑端实现单片机与ESP8266的通信 的相关文章

  • linux 查看端口占用情况

    1 查看系统端口 netstat anptl显示所有正在监听的端口 2 刷选某个端口 netstat anptl grep 39 3350 39 3 查看占用端口的应用程序 ps lt PID gt 下图中可以看到端口8080 的PID 6
  • eclipse tomcat部署项目开发环境修改访问路径

    eclipse tomcat部署项目开发环境修改访问路径
  • 欢迎使用CSDN-markdown编辑器

    欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来 xff0c 用它写博客 xff0c 将会带来全新的体验哦 xff1a Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传
  • PLSQL 11 注册码

    PLSQL 11 注册码 注册码 xff1a Product Code xff1a 4t46t6vydkvsxekkvf3fjnpzy5wbuhphqz serial Number xff1a 601769 password xff1a x
  • ORA-28000: the account is locked-的解决办法

    ORA 28000 the account is locked 第一步 xff1a 使用PL SQL xff0c 登录名为system 数据库名称不变 xff0c 选择类型的时候把Normal修改为Sysdba 第二步 xff1a 选择my
  • IOS中bootstrap-select 动态加载的下拉框点击不展示(已解决)

    问题描述 bootstrap select 动态加载的option 在安卓浏览器中能点击后展示 但是在ios浏览器中点击没反应 发现原因 在重新渲染方法后加了一行 s e
  • S7-PLCSIM 无法找到STEP 7 V15 许可证(必须在此计算机上安装STEP V15应用程序)。-----(已解决)

    已经安装过step7 并且已经授权过了 xff0c 但是启动时提示下图错误 记得右键已管理员身份运行
  • 新建springboot项目, pom.xml报错 Unkown error 解决思路

    新建项目pom xml 报错 网上解决思路 xff1a 1 大多都是项目右键 Maven Update Project 选中Force Update of Snapshots Releases 进行强制更新 2 1 5 改成了2 1 3 修
  • 嵌入式软件面试总结

    背景 先说说本人的背景 xff0c 我 xff0c 一个大专人 xff0c 从事嵌入式开发两年了 xff0c 之前在一家公司是负责单片机和物联网开发的 2020年年底我选择了裸辞 xff08 主要想出去玩 xff09 直到春节结束后 xff
  • Intel NUC安装ubuntu系统的方法

    使用intel nuc安装ubuntu系统 xff0c 试验了好多次UEFI安装 xff0c 但是结果都是开机时会出现 A bootable device 除了这句话都是黑屏的现象 原因我查了很多 xff0c 也不敢确定 xff0c 现在总
  • 白骑士的树莓派教学(二):镜像烧录

    本期内容让我们来了解一下树莓派操作系统镜像烧录的操作 xff0c 所需的设备 xff1a PC机 xff0c U盘 xff0c 树莓派相关设备 什么是镜像 xff1f 所谓镜像文件其实和ZIP压缩包类似 xff0c 它将特定的一系列文件按照
  • VS Code Remote SSH远程连接异常:Resolver error: Error: Running the contributed command

    VS Code Remote SSH远程连接异常 问题描述原因分析解决方案扩展Remote SSH首次连接插件做了什么Remote SSH对于远程Linux的要求 问题描述 通过VS Code插件Remote SSH连接一台新主机时 xff
  • PHP常用六大设计模式

    单例模式 特点 xff1a 三私一公 xff1a 私有的静态变量 xff08 存放实例 xff09 xff0c 私有的构造方法 xff08 防止创建实例 xff09 xff0c 私有的克隆方法 防止克隆对象 xff0c 公有的静态方法 xf
  • matlab中文乱码的解决(UTF-8不支持的问题)

    1 解决editor中的UTF 8不支持的问题 xff0c 需要加入下面几行 在matlab 安装的目录的bin子文件夹中找到lcdata xml文件 xff1a 打开加入 lt Locale entries example gt lt l
  • FreeRTOS分析

    freertos是一个轻量级的rtos xff0c 它目前实现了一个微内核 xff0c 并且port到arm7 avr pic18 coldfire等众多处理器上 xff1b 目前已经在rtos的市场上占有不少的份额 它当然不是一个与vxw
  • STM32之FreeRTOS

    学习操作系统 xff0c 我并没有一开始就学习UCOS xff0c 而是选择了FreeRTOS FreeRTOS可以方便地搭建在各个平台上 xff0c 因为汇编相关 xff0c 都已经由官方完成 xff0c 我们要做的仅是添加自己的代码 x
  • FrankMocap Fast monocular 3D Hand and Body Motion Capture by Regression and Intergretion

    paper title FrankMocap Fast monocular 3D Hand and Body Motion Capture by Regression and Intergretion paper link https ar
  • 矩阵中的路径(C++)

    题目 xff1a 请设计一个函数 xff0c 用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径 路径可以从矩阵中的任意一个格子开始 xff0c 每一步可以在矩阵中向左 xff0c 向右 xff0c 向上 xff0c 向下移动一个格
  • TensorFlow入门(五)多层 LSTM 通俗易懂版

    欢迎转载 xff0c 但请务必注明原文出处及作者信息 64 author huangyongye 64 creat date 2017 03 09 前言 根据我本人学习 TensorFlow 实现 LSTM 的经历 xff0c 发现网上虽然
  • 程序员面试经历

    现在找工作 已经没有了毕业以后那时候找工作的那种紧张心情 自从在上家公司离职以后 自己进行了一段时间的工作 世界上本来没有面霸 面试的多了 也就成了面霸 不得不承认 一开始自己面试是有些紧张 但是 面试的多了 也就不觉得紧张 反而有些平淡了

随机推荐

  • keil中快速注释一段代码

    方法一 xff1a 在该段代码的前面加 在该段代码的后面加 代码 方法二 xff1a 自行添加快捷键 lt 1 gt 点击configuration lt 2 gt 点击shortcut keys xff0c 选择Edit Advanced
  • java实习两个月总结

    实习两个月总结 刚开始实习的时候激情满满 慢慢的激情也退却了 在杭州月薪3000干了两个月我自己都觉得不可思议 杭州的物价大家有目共睹 先谈谈收获 认识了java8的新特性 了解了开发中常用的工具和工具包 持续集成部署的jenkins sw
  • 一台电脑如何装3个系统操作教程

    很多小伙伴都想安装个三系统试试 xff0c 但是安装三系统需要一些装机基础才能成功安装 xff0c 电脑如何安装三系统 接下来快启动小编带大家了解电脑如何安装三系统的详细操作 xff0c 希望给走入迷途的小伙伴一些正能量 电脑三系统安装准备
  • Modbus的常见问题解答:多台设备如何连接?为什么要加终端电阻?RS485总线可挂接多少个设备?在RS485通讯中,最大传输距离是多少?

    多台RS485设备如何连接呢 xff1f 使用屏蔽双绞线 xff0c 采用手拉手菊花链式拓扑结构将网关和各串行设备节点连接起来 xff0c 并在网络起始端和末尾端设备的RS485 43 和RS485 之间各并接一个120 电阻以减少信号在两
  • ADRC学习|TD微分跟踪器(原理解析和Matlab实现)

    系列文章目录 TD微分跟踪器 原理解析和Matlab实现 状态扩张观测器 目录 系列文章目录前言微分跟踪器作用原理线性TD非线性TDTD的一个定理最速离散控制函数 Matlab实现参考文献 前言 学习韩老师的ADRC xff0c 把学习过程
  • ROS踩坑|warning:clock skew detected. Your build may be incomplete

    报错展示 warning xff1a clock skew detected Your build may be incomplete 问题分析 ROS编译时遇到这个问题95 是因为系统时钟错误了 xff0c 比如说你之前的编译的时间时20
  • ros学习|功能包相关|查找、安装、卸载删除某个功能包

    在运行别人的demo时 xff0c 是不是会出现找不到功能包的情况 所以查找 安装和卸载某个功能包是蛮重要的 查找 查询当前安装完成的所有包文件 rospack list 查询ros的所有功能包 span class token funct
  • Vector数组类型在ROS开发中的用法小结

    目录 前言数组类型在不同消息类型中的定义在ROS消息中的定义在C 43 43 中定义数组 vector数组的一些常用操作基本操作求数组的最值遍历数组排序数组查找数组注意 前言 ROS系统的一个显著优势就是分布式和灵活性 xff0c 用户可以
  • Java 核心技术卷一 随笔

    Java 易混 xff0c 重难点汇总 1 基础篇 整型 浮点 final 一般用于指示常量 xff0c 即变量只能被赋值一次 一旦被赋值 xff0c 就不能更改了 xff08 即没有set方法 xff09 命名规则一般使用全大写及下划线
  • Linux 面试最常问的十个问题

    如果你要去面试一个Linux系统运维工程师的职位 xff0c 下面这十个最常见的问题一定要会 xff0c 否则你的面试可能就危险了 这些都是比较基本的问题 xff0c 大家要理解 xff0c 不能光死记硬背 1 如何查看系统内核的版本 这里
  • 处理iOS开发中的各种警告

    iOS开发中我们会遇到各种警告 包括第三方不再支持更新导致的警告 苹果一些过时方法的警告 其中尤其是ASIHttpRequest的不支持更新导致有很多的警告 所以我在这里做了罗列 Semantic Warnings WarningMessa
  • c#利用虚拟串口工具进行串口通信数据的发送和接收

    原文 xff1a 我的个人博客 串口通信 串口通信 xff08 Serial Communications xff09 的概念非常简单 xff0c 串口按位 xff08 bit xff09 发送和接收字节 尽管比按字节 xff08 byte
  • stm32 移植 FreeRTOS

    1 建立裸机工程 在移植 freeRTOS 之前需要创建一个 stm32f103 的 keil5 裸机工程 所谓裸机工程就是包含 stm32f103 单片机的启动文件 xff0c 外设驱动固件库的文件集合 xff0c 也可以说是支持裸机开发
  • ESP32(Espressif-IDE)添加外部(.c .h)文件 (error:undefined reference to)

    0x00 xff1a 前言 笔记文件 用习惯了keil和iar之类的开发软件 xff0c 一下子转换到ESP32是特别的不习惯 xff0c 这里使用的开发环境是乐鑫官方推出的Espressif IDE xff0c 也是刚学折腾ESP32 x
  • 无人机地面站源码搭建环境(qt版)记录

    最近基于项目需要 xff0c 借鉴无名创新的QT版开源地面站 xff0c 搭建一款测试平台 原本以为比较简单的 但是在搭建过程中还是遇到了很多看不见的坑 xff0c 在这里分享给大家 xff0c 避免别人在开发类似项目时像我这样走弯路 基本
  • 如何才能有论文创新点?idear

    1 看别人是怎么解决问题的 xff0c 别人写的每一篇论文都是在解决问题 2 看自己领域综述性论文 xff0c 对某一问题都是一步步发展出来的 xff0c 某一方法也是一步一步更新完善的 xff0c 这些解决的都是问题 3 看一篇论文的引言
  • 前端图片裁剪cropper.js

    背景 xff1a 我们在项目中常常都会有更换登陆人头像的需求 xff0c 这个很简单直接上传一张图片展示就可以了 xff0c 但是如果上传的图片需要剪裁成正方形的话就需要我们来做一些特殊的处理 xff1b 这里我们会用到一个图片剪裁插件 x
  • 新产品开发之C流程 (C-flow)

    关于新产品开发的C流程 C flow xff0c 是世界上大公司采用的标准开发流程 xff0c 十分基本也十分重要 xff0c 但是网上关于C流程介绍相关的资料很少 xff0c 所以花点时间整理一下相关的资料 下面以软件BSP开发为例 xf
  • Arduino的Stepper库函数及其控制步进电机(ULN2003)调速

    问题来源 最近自学Arduino xff0c 在使用步进电机时开始没能使步进电机转起来 xff0c 转起来后感觉没法调速 xff0c 遂完成此篇笔记供自己后续查阅以及方便遇到相同问题的诸君寻找灵感 对于如何使步进电机转动就不详述 xff0c
  • 一、电脑端实现单片机与ESP8266的通信

    1 准备工具 xff08 硬件 软件 xff09 硬件 xff1a 51单片机开发板 ESP8266无线模块 xff08 ESP8266 01 xff09 TTL USB串口 杜邦线 数据线 xff1b 软件 xff1a keil uv4单