让51单片机进行上网
!!!蓝牙透传
透传就是手机连接上蓝牙,发送文本给蓝牙,蓝牙又传送给电脑。
发送: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 卡、串口线等硬件连接好。
- 打开串口连接4G模块,串口出产默认波特率是115200,可以自行根据用户手册修改
- 进入AT指令模式,在串口助手内发送+++(不要勾选发送新行),必须在发送+++指令 3s 内发送其
他任意 AT 指令,比如AT+CPIN - 观察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//先设置完心跳包发送时间,后设置心跳包发送内容 - AT+SOCK=TCPC,103.46.128.53,34207 连接socket服务器,这里的IP地址是花生壳端IP映射地址,端口号是花生壳端生成的端口号,参数之间逗号隔开
- AT+LINKSTA查看连接状态,如果第四步没有问题,此时串口返回+OK=Connect
- //连接失败时多检查检查天线是否合理
#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单片机进行上网相关推荐
- 51单片机怎么学啊?有推荐的线上网课和书籍么?
51相对比较简单,但是在学习之前需要电路基础的储备. 学不会的原因千奇百怪,快速学会的方法就一种:正确的学习路径+不断实践. 我根据以前带徒弟的经验整理了一份最佳的学习路径,包含教程和工具,详细可以看 ...
- 51单片机按键控制数码管0~9_51单片机外部中断
前面为大家介绍的点亮LED灯.数码管.按键只用到了51单片机的IO资源,我们要是仅仅用单片机点灯.操作数码管,那可真是大才小用了.这些都只是51单片机资源的冰山一角,51单片机还有好多的功能,我后面将 ...
- 51单片机智能蓝牙小车
作为大一电子小趴菜,在和队友学习制作蓝牙小车过程中遇到了许多困难.本文既为大家避坑,也作为团队总结. 这篇文章分为两部分 1,组装篇 2,代码篇 思维导图: 组装篇 先准备好一块电源拓展板,用于为电机 ...
- 51单片机控制LCD1602模块
51单片机控制LCD1602模块 视频播放:LCD1602视频 (1)LCD1602概述 先来看看LCD1602什么意思?Liquid Crystal Display(LCD)表示液晶显示,1602 ...
- 51单片机(ESP8266模块)
前言: 蓝牙,ESP-01s,Zigbee, NB-Iot等通信模块都是基于AT指令的设计 一.AT指令 AT指令集是从终端设备(Terminal Equipment,TE)或数据终端设备(Data ...
- 基于8266WIFI模块实现智能手机与51单片机的通信入门
1 芯片及电路的介绍 1.1 8266WIFI模块 在文章的最开始我们首先要介绍今天的主角,8266WIFI模块.这是一个非常好用的模块,其他的废话不在多说,我们直接上干货. 这是一张我从百度上盗 ...
- 4g模块与51单片机通信
本文硬件选自忆佰特的4g模块和老陈的上官一号 第一步先使用电脑配置4g模块,配置好后再与51单片机进行接线完成通信,需要提前插入SIM卡,接线如下 通电后模块右下角会亮起红灯,并且右上角四颗lcd灯会 ...
- 《uCOS51移植心得》---七年前之《快快乐乐跟我学51单片机操作系统和IP栈》
http://www.amobbs.com/forum.php?mod=viewthread&tid=3396563 <uCOS51移植心得>---七年前之<快快乐乐跟我学5 ...
- 利用51单片机实现与RS485通讯,接收数据
目录 一.研究背景 二.硬件准备 三.软件准备 四.实验原理 五.单片机代码 六.Python读取串口处理数据 七.开发总结 一.研究背景 学院给了14天的时间,一枚专业课紧的大三狗匆忙做出来.探索出 ...
最新文章
- 话说文件系统——aufs源码分析(三)【转】
- Python 3.9.1 安装教程
- android更改menu字体颜色,Android动态修改menu颜色
- Python3 多进程共享变量实现方法(亲测)
- linux,shell中if else if的写法,if elif
- 使用vs2019和pyinstaller将py文件打包成一个exe文件(含图标),pyinstaller安装失败解决方案
- 当前仍在编辑文章 - Java Excel处理 - 实操案例与方法手册
- SaaS架构设计之高性能的Multi-Tenant最佳实践
- linux mint 8812ac网卡,kali虚拟机连接无线网卡comfast cf-812AC(Realtek 8812BU芯片)(不支持wlan0mon)...
- 简单网页布局的html代码网站,一个简单的网页布局代码
- unity 线渲染器LineRender
- 计算机等级考试四级网络工程师真题,计算机等级考试四级网络工程师试题
- Python量化交易平台:QMT (日内交易策略示例)
- 计算机管理用户组不见了,win7系统计算机管理本地用户和组不见了的解决方法...
- oracle大对象的存储,(16 ) Oracle数据库可以存储极大的对象,CLOB表示【16】大对象。...
- 如何找到计算机上的画图拦,机子里的画图和计算机没有了
- 2021年华为总监知乎1867赞的Java面试题全集解析助我修行,不吃透感觉都对不起他(上)
- java操作svg文件
- jquery发送put请求_通过 Ajax 发送 PUT、DELETE 请求的两种实现方式
- 前序遍历、中序遍历、后序遍历
热门文章
- “progtam received signal SIGABRT,Aborted.“错误
- CSS系列之连续的字母或数字在Html盒子中不会自动换行,直接溢出
- HarmonyOS第三方组件——鸿蒙图片裁剪组件ohos-Image-Cropper
- 第55天:三战easy-dex
- 滴滴APM工具Dokit
- stimulsoft mysql_Stimulsoft Server
- c#实现爬虫获取小说(.NET)
- ubuntu 轻量级图片编辑软件
- 俞优静的“航海”人生-搜狐财经
- PCM1863应用笔记