!!!蓝牙透传
透传就是手机连接上蓝牙,发送文本给蓝牙,蓝牙又传送给电脑。
发送:TX
接收:RX
AT指令时勾选新行,发送数据时去掉新行。
SBUF每次只能存储一个字节,如果是字符串的话,那就一个字符一个字符的去发送,,然后先把接收到的放入缓存,完全发送完毕再进行处理
ESP-01s出厂波特率正常是115200
设置ESP8266为9600波特率:AT+UART=9600,8,1,0,0
AT+CWMODE=3 //1. 是station(设备)模式 2.是AP(路由)模式 3.是双模
以设备模式接入家里路由器:AT+CWJAP=“9527”,“12345678” //指令
查询IP地址:AT+CIFSR
让WIFI作为设备端接入这个服务器AT+CIPSTART=“TCP”,“192.168.10.102”,8888
开启成功则返回WIFI CONNECTED //结果 WIFI GOT IP //结果 OK
AT+CIPMODE=1 //开启透传模式
AT+CIPSEND //带回车 Response: > //这个时候随意发送接收数据
+++退出透传模式
!!!发送数据不带新行,发送指令带新行。
总结:让ESP8266接入家里的设备,分为以下几个步骤:
(1)初始化ESP8266串口波特率为9600。
(2)设置ESP8266为双模工作模式。
(3)让ESP8266以设备模式连接上家里的网络。
(4)在网络调试助手里面设置家里的电脑WIFI为服务器模式(这里电脑和ESP8266均要连接同一个无线网络,都要2.4G),让ESP8266作为设备连接到这个服务器上面。
(5)开始发送数据。

#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=\"9527\",\"12345678\"\r\n"; //入网指令
code char LJFWQ[] = "AT+CIPSTART=\"TCP\",\"192.168.16.102\",6666\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()
{D5 = D6 = 1;//灭状态灯UartInit();//串口初始化Delay1000ms();//给espwifi模块上电时间sendString(LJWL);//发送联网AT指令并等待成功while(!AT_OK_Flag);//!!!注意这里连接网络成功后ESP回复的指令AT_OK_Flag = 0;//每次用完赋值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);//AT_Connect_Net_Flag仅检测网络是否连接成功,//AT_OK_Flag检测所有指令是否执行成功if(AT_Connect_Net_Flag){D5 = 0;//点亮D5,代表入网成功}if(AT_OK_Flag){D6 = 0;//点亮D6,代表连接服务器并打开透传模式成功}while(1){Delay1000ms();//“心跳包”sendString("TWOTHREE23\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 == 'Q' || tmp == 'F'){i = 0;}buffer[i++] = tmp;//每次接受一个字母存入BUFFER寄存器,不断地往这里存数据if(buffer[0] == 'W' && buffer[5] == 'G')//入网成功的判断依据WIFI GOT IP{AT_Connect_Net_Flag = 1;memset(buffer, '\0', SIZE);//字符串用完记得初始化}//连接服务器等OK返回值指令的判断这里只有联网成功返回是WIFI GOT IP,其他都是OKif(buffer[0] == 'O' && buffer[1] == 'K'){AT_OK_Flag    = 1;memset(buffer, '\0', SIZE);}if(buffer[0] == 'F' && buffer[1] == 'A')//联网失败出现FAIL字样捕获{for(i=0;i<5;i++){D5 = 0;Delay1000ms();D5 = 1;Delay1000ms();}sendString(RESET);memset(buffer, '\0', SIZE);}if(buffer[0] == 'Q' && buffer[2] == '1'){D5 = 0;//点亮D5memset(buffer, '\0', SIZE);}if(buffer[0] == 'Q' && buffer[2] == '0'){D5 = 1;//熄灭D5memset(buffer, '\0', SIZE);}if(i == 12) i = 0;//如果最后一直接收指令越界了,就回到数组头    }}


我们通过51单片机控制ESP8266的基本思路是:通过52的TX口给ESP的RX口发出指令,ESP收到指令后会有一个回复指令,我们能通过白盒测试,让ESP的TX口连接USB–TTL的RX口,从而在ESP收到单片机指令后,自身有一个回复指令,这个回复指令发送给电脑端的串口,串口接收,在电脑上实现数据可视化。
二、设置ESP8266为服务器模式
三、通过4G让单片机进行上网
入网步骤:
在测试之前,将电源、天线、SIM 卡、串口线等硬件连接好。

  1. 打开串口连接4G模块,串口出产默认波特率是115200,可以自行根据用户手册修改
  2. 进入AT指令模式,在串口助手内发送+++(不要勾选发送新行),必须在发送+++指令 3s 内发送其
    他任意 AT 指令,比如AT+CPIN
  3. 观察SIM卡灯是否亮起,AT+ICCID获得SIM卡信息,确认SIM卡安装完好 返回数据:
    +OK=89860620240009502942
    检查信号是否正常,通过AT+CSQ指令检查信号值,建议插入信号天线,返回数据:+OK=31
    AT+REBT:重启4G模块
    AT+UART=9600,NONE:设置9600波特率,无校验位
    AT+HEARTM=30//设置心跳包发送时间为30S
    AT+HEARTINFO=1,SGN01//先设置完心跳包发送时间,后设置心跳包发送内容
  4. AT+SOCK=TCPC,103.46.128.53,34207 连接socket服务器,这里的IP地址是花生壳端IP映射地址,端口号是花生壳端生成的端口号,参数之间逗号隔开
  5. AT+LINKSTA查看连接状态,如果第四步没有问题,此时串口返回+OK=Connect
  6. //连接失败时多检查检查天线是否合理
#include <reg52.h>
#include <string.h>char cmd;
char buffer[12];
sbit LED1 = P3^6;
sbit LED2 = P3^7;
sfr AUXR = 0x8E;
void UartInit(void)     //9600bps@11.0592MHz
{PCON &= 0x7F;     //波特率不倍速SCON = 0x50;       //8位数据,可变波特率AUXR &= 0xBF;      //定时器1时钟为Fosc/12,即12TAUXR &= 0xFE;     //串口1选择定时器1为波特率发生器TMOD &= 0x0F;        //清除定时器1模式位TMOD |= 0x20;       //设定定时器1为8位自动重装方式TL1 = 0xFD;       //设定定时初值TH1 = 0xFD;        //设定定时器重装值TR1 = 1;     //启动定时器1EA = 1;//打开总中断ES = 1;//打开串口中断
}
void Delay1000ms()      //@11.0592MHz
{unsigned char i, j, k;i = 8;j = 1;k = 243;do{do{while (--k);} while (--j);} while (--i);
}
void SendChar(char Data_msg)
{SBUF = Data_msg;while(!TI);//发送是主动,的那个要发送东西时,TI为1TI = 0;}
void SendStr(char* Str)
{while(*Str != '\0'){SendChar(*Str);//发送单字符Str++;}
}
void main()
{LED2 = LED1 = 1;UartInit();while(1){Delay1000ms();SendStr("9527 you dian shuai\r\n");}}
void uart_handler() interrupt 4 //串口中断
{static int i=0;cmd=SBUF;if(RI){RI=0;if(cmd == ':'){i = 0;}buffer[i++] = cmd;//每次接受一个字母存入BUFFER寄存器,不断地往这里存数据if(buffer[0]== ':' && buffer[1] == 'o' && buffer[2]=='p')//入网成功的判断依据WIFI GOT IP{LED2 = LED1 = 0;i = 0;memset(buffer, '\0', 12);//字符串用完记得初始化}if(buffer[0]== ':' && buffer[1] == 'c' && buffer[2]=='l')//入网成功的判断依据WIFI GOT IP{LED2 = LED1 = 1;i = 0;memset(buffer, '\0', 12);//字符串用完记得初始化}if(i==12)i = 0;}if(TI);
}

让51单片机进行上网相关推荐

  1. 51单片机怎么学啊?有推荐的线上网课和书籍么?

    51相对比较简单,但是在学习之前需要电路基础的储备. 学不会的原因千奇百怪,快速学会的方法就一种:正确的学习路径+不断实践. 我根据以前带徒弟的经验整理了一份最佳的学习路径,包含教程和工具,详细可以看 ...

  2. 51单片机按键控制数码管0~9_51单片机外部中断

    前面为大家介绍的点亮LED灯.数码管.按键只用到了51单片机的IO资源,我们要是仅仅用单片机点灯.操作数码管,那可真是大才小用了.这些都只是51单片机资源的冰山一角,51单片机还有好多的功能,我后面将 ...

  3. 51单片机智能蓝牙小车

    作为大一电子小趴菜,在和队友学习制作蓝牙小车过程中遇到了许多困难.本文既为大家避坑,也作为团队总结. 这篇文章分为两部分 1,组装篇 2,代码篇 思维导图: 组装篇 先准备好一块电源拓展板,用于为电机 ...

  4. 51单片机控制LCD1602模块

    51单片机控制LCD1602模块 视频播放:LCD1602视频 (1)LCD1602概述 先来看看LCD1602什么意思?Liquid Crystal Display(LCD)表示液晶显示,1602 ...

  5. 51单片机(ESP8266模块)

    前言: 蓝牙,ESP-01s,Zigbee, NB-Iot等通信模块都是基于AT指令的设计 一.AT指令 AT指令集是从终端设备(Terminal Equipment,TE)或数据终端设备(Data ...

  6. 基于8266WIFI模块实现智能手机与51单片机的通信入门

    1  芯片及电路的介绍 1.1  8266WIFI模块 在文章的最开始我们首先要介绍今天的主角,8266WIFI模块.这是一个非常好用的模块,其他的废话不在多说,我们直接上干货. 这是一张我从百度上盗 ...

  7. 4g模块与51单片机通信

    本文硬件选自忆佰特的4g模块和老陈的上官一号 第一步先使用电脑配置4g模块,配置好后再与51单片机进行接线完成通信,需要提前插入SIM卡,接线如下 通电后模块右下角会亮起红灯,并且右上角四颗lcd灯会 ...

  8. 《uCOS51移植心得》---七年前之《快快乐乐跟我学51单片机操作系统和IP栈》

    http://www.amobbs.com/forum.php?mod=viewthread&tid=3396563 <uCOS51移植心得>---七年前之<快快乐乐跟我学5 ...

  9. 利用51单片机实现与RS485通讯,接收数据

    目录 一.研究背景 二.硬件准备 三.软件准备 四.实验原理 五.单片机代码 六.Python读取串口处理数据 七.开发总结 一.研究背景 学院给了14天的时间,一枚专业课紧的大三狗匆忙做出来.探索出 ...

最新文章

  1. 话说文件系统——aufs源码分析(三)【转】
  2. Python 3.9.1 安装教程
  3. android更改menu字体颜色,Android动态修改menu颜色
  4. Python3 多进程共享变量实现方法(亲测)
  5. linux,shell中if else if的写法,if elif
  6. 使用vs2019和pyinstaller将py文件打包成一个exe文件(含图标),pyinstaller安装失败解决方案
  7. 当前仍在编辑文章 - Java Excel处理 - 实操案例与方法手册
  8. SaaS架构设计之高性能的Multi-Tenant最佳实践
  9. linux mint 8812ac网卡,kali虚拟机连接无线网卡comfast cf-812AC(Realtek 8812BU芯片)(不支持wlan0mon)...
  10. 简单网页布局的html代码网站,一个简单的网页布局代码
  11. unity 线渲染器LineRender
  12. 计算机等级考试四级网络工程师真题,计算机等级考试四级网络工程师试题
  13. Python量化交易平台:QMT (日内交易策略示例)
  14. 计算机管理用户组不见了,win7系统计算机管理本地用户和组不见了的解决方法...
  15. oracle大对象的存储,(16 ) Oracle数据库可以存储极大的对象,CLOB表示【16】大对象。...
  16. 如何找到计算机上的画图拦,机子里的画图和计算机没有了
  17. 2021年华为总监知乎1867赞的Java面试题全集解析助我修行,不吃透感觉都对不起他(上)
  18. java操作svg文件
  19. jquery发送put请求_通过 Ajax 发送 PUT、DELETE 请求的两种实现方式
  20. 前序遍历、中序遍历、后序遍历

热门文章

  1. “progtam received signal SIGABRT,Aborted.“错误
  2. CSS系列之连续的字母或数字在Html盒子中不会自动换行,直接溢出
  3. HarmonyOS第三方组件——鸿蒙图片裁剪组件ohos-Image-Cropper
  4. 第55天:三战easy-dex
  5. 滴滴APM工具Dokit
  6. stimulsoft mysql_Stimulsoft Server
  7. c#实现爬虫获取小说(.NET)
  8. ubuntu 轻量级图片编辑软件
  9. 俞优静的“航海”人生-搜狐财经
  10. PCM1863应用笔记