C51--WiFi模块ESP8266--AT指令

ESP8266
面向物联网应用的,高性价比、高度集成的WiFi MCU

简介:

高度集成: ESP8266EX集成了32位Tensilica 处理器、标准数字外设接口、天线开关、射频balun、功率放大器、底噪放大器、过滤器和电源管理模块,可将所占的PCB空间降低。
32位Tensilica 处理器: 内置低功耗Tensilica L106 32位 RISC处理器、cpu时钟最高达160MHz、支持实时操作系统(RTOS)和wifi协议栈,可将高达80%的处理能力留给应用编程和开发。

WiFi模块–ESP-01s ,通信模块是通过串口调试助手发送AT指令实现联网

AT指令

AT指令集是从终端设备或数字终端设备向终端适配器或数据电路终端设备发送的。

其对传输的数据包大小有定义:即对于AT指令的发送,除AT字符外,最多可接收1056字符长度(包含最后的空字符)

每个AT命令行中只能包含一条AT指令;对于由终端设备主动向pc端报告的URC指示或者response响应,也要求一行最多有1个,不允许上报的一行中有多条指示或响应。AT指令以回车作为结尾,响应或上报以回车换行为结尾。

ESP-01s出场波特率正常是115200,注意:AT指令,控制类都要加回车,数据传输时不加回车。

AT指令实操:

(波特率要选择9600,115200不通信)
①初始化设置:
AT指令基本都要勾选发送新行
AT+RST:重启指令,响应ready结束
AT+UART=9600,8,1,0,0:配置9600波特率(8个数据位1个停止位)响应OK结束
②入网设置:
设置工作模式:

    AT+CWMODE=3
    	模式设置1、station(设备)模式
               2、AP(路由)模式
               3、是双模
       响应OK结束,错误为ERROR

以设备模式借入家中路由器配置:

    AT+CWJAP="wifi名","wifi密码"
       响应:WIFI CONNECTED	//连接过会先断开
            WIFI GOT IP
       OK结束

查询ip地址:

    AT+CIFSR
    +CIFSR:APIP,"192.168.4.1"		//ESP-01S作为路由器的时候的网关
	+CIFSR:APMAC,"2e:3a:e8:17:5e:57"
	+CIFSR:STAIP,"0.0.0.0"
	+CIFSR:STAMAC,"2c:3a:e8:17:5e:57"

        响应OK结束

③连接到TCP server(网络调试助手)
打开网络助手,设立TCP服务器
(1)协议类型,选择TCP server
(2)本地ip地址,自己电脑ip地址(cmd中ipconfig查询电脑ip地址)
(3)本地端口号,通信端口号(尽量不用8080)

④连接服务器

    AT+CIPSTART="TCP","10.0.22.249",8880
         响应CONNECT
         OK结束

⑤发送数据
方法一

AT+CIPSEND=4		
 //设置即将发送数据的长度为4字节
    出现>:输入要发送的4个字节的数据(不勾选发送新行)
    网络助手不显示字符,显示代码,去掉16进制显示
    响应SEND OK结束

方法二、透传模式

        AT+CIPMODE=1
    响应OK结束,开启CIPMODE模式
        AT+CIPSEND
    响应>  开始发送模式

退出透传模式:

(不勾选发送新行)发送+++两遍退出,回到AT指令模式

在这里插入图片描述

单片机发送AT指令

定义指令信息:

    // 网络连接
code char LJWL[]="AT+CWJAP=\"WiFi名\",\"WiFi密码\"\r\n";
//转义字符,\"保留原本的引号字符意义,否则出错
	//服务器连接
code char LJFWQ[]="AT+CIPSTART=\"TCP\",\"192.168.43.112\",8880\r\n";
	//开启透传模式
char KQTCMS[]="AT+CIPMODE=1\r\n";
	//开始数据传输
char KSSJCS[]="AT+CIPSEND\r\n";

**code**专门存储比较大的数据的空间,否则报错

main函数中执行信息,每项操作之后延时5s

使用白盒测试,检验是否能执行。
电脑用过串口助手查看ESP8266的执行结果。
接线方式:

			 	  连接				         连接
C51 \VCC\GND / TX  ←  VCC\GND\RX/ESP8266 /TX  → RX \ PC串口调试助手
#include "reg52.h"
#include "intrins.h"
#include <string.h>

#define SIZE 12

sfr AUXR = 0x8E;
sbit D5 = P3^7;

char cmd[SIZE];				//数组操作发送字符串

    // 网络连接
code char LJWL[]="AT+CWJAP=\"123456\",\"wbr0729@\"\r\n";
//转义字符,\"保留原本的引号字符意义,否则出错
		//服务器连接
code char LJFWQ[]="AT+CIPSTART=\"TCP\",\"192.168.43.112\",8880\r\n";
		//开启透传模式
char KQTCMS[]="AT+CIPMODE=1\r\n";
		//开始数据传输
char KSSJCS[]="AT+CIPSEND\r\n";

//串口初始化
void UartInit(void)		//9600bps@11.0592MHz
{
	PCON &= 0x7F;		//波特率不倍速
	SCON = 0x50;		//8位数据,可变波特率
	AUXR &= 0xBF;		//定时器1时钟为Fosc/12,即12T
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//清除定时器1模式位
	TMOD |= 0x20;		//设定定时器1为8位自动重装方式
	TL1 = 0xFD;		//设定定时初值
	TH1 = 0xFD;		//设定定时器重装值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器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);		//超声波中,用while等待,发送成功后T1 == 1
	
	TI = 0;		
}

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

void main()
{

	D5 = 1;		//D5通电以后为灭的状态
	//配置c51串口的通信方式 
	UartInit();
	while(1){
		Delay1000ms();
		
		sendString("laowang lihai!\r\n");
		sendString(LJWL);				// 网络连接
		Delay1000ms();
		Delay1000ms();
		Delay1000ms();
		Delay1000ms();
		Delay1000ms();
		sendString(LJFWQ);			//服务器连接
		Delay1000ms();
		Delay1000ms();
		Delay1000ms();
		Delay1000ms();
		Delay1000ms();
		sendString(KQTCMS);			//开启透传模式
		Delay1000ms();
		Delay1000ms();
		Delay1000ms();
		Delay1000ms();
		Delay1000ms();
		sendString(KSSJCS);			//开始数据传输
		Delay1000ms();
		Delay1000ms();
		Delay1000ms();
		Delay1000ms();
		Delay1000ms();
	}
	
}

//中断函数
void UART_Rountine(void) interrupt 4
{
	static int i = 0;		//静态的局部变量,被初始化一次
	
	if(RI){			//接收中断
		RI = 0;		//软件复位
		cmd[i] = SBUF;		//读数据
		i++;
		if(i == SIZE){
			i = 0;
		}
		
		if(strstr(cmd,"en")){							//strcmp函数,比较函数,两个函数都为open,向下执行
			//查找子串,获得的字符串中间有没有en
			D5 = 0;		//D5点亮
			i = 0;
			memset(cmd,'\0',SIZE);		//清空数组,\0没有任何东西,大小12
		}
		if(strstr(cmd,"se")){
			D5 = 1;		//D5熄灭
			i = 0;
			memset(cmd,'\0',SIZE);
		}
	}
	if(TI);			//发送中断
}

优化:通过TCP通信点亮led

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

#define SIZE 12

sfr AUXR = 0x8E;
sbit D5 = P3^7;

char cmd[SIZE];				//数组操作发送字符串


    // 网络连接
code char LJWL[]="AT+CWJAP=\"123456\",\"wbr0729@\"\r\n";
//转义字符,\"保留原本的引号字符意义,否则出错
		//服务器连接
code char LJFWQ[]="AT+CIPSTART=\"TCP\",\"192.168.43.112\",8880\r\n";
		//开启透传模式
char KQTCMS[]="AT+CIPMODE=1\r\n";
		//开始数据传输
char KSSJCS[]="AT+CIPSEND\r\n";

//串口初始化
void UartInit(void)		//9600bps@11.0592MHz
{
	PCON &= 0x7F;		//波特率不倍速
	SCON = 0x50;		//8位数据,可变波特率
	AUXR &= 0xBF;		//定时器1时钟为Fosc/12,即12T
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//清除定时器1模式位
	TMOD |= 0x20;		//设定定时器1为8位自动重装方式
	TL1 = 0xFD;		//设定定时初值
	TH1 = 0xFD;		//设定定时器重装值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器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);		//超声波中,用while等待,发送成功后T1 == 1
	
	TI = 0;		
}

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

void main()
{
	int mark = 0;
	
	D5 = 1;		//D5通电以后为灭的状态
	//配置c51串口的通信方式 
	UartInit();
	
	while(1){
		//Delay1000ms();
		
		//sendString("laowang lihai!\r\n");
		if(mark == 0){
			sendString(LJWL);				// 网络连接
			Delay1000ms();
			sendString(LJFWQ);			//服务器连接
			Delay1000ms();
			sendString(KQTCMS);			//开启透传模式
			Delay1000ms();
			sendString(KSSJCS);			//开始数据传输
			Delay1000ms();
			mark = 1;
		}else{
				sendString("laowang lihai!\r\n");
				Delay1000ms();
			}
	}
	
}

//中断函数
void UART_Rountine(void) interrupt 4
{
	static int i = 0;		//静态的局部变量,被初始化一次
	
	if(RI){			//接收中断
		RI = 0;		//软件复位
		cmd[0] = SBUF;		//读数据

		if(cmd[0] == '1'){			
			D5 = 0;		//D5点亮
			i = 0;		
		}
		if(cmd[0] == '0'){
			D5 = 1;		//D5熄灭
		}
	}
	if(TI);			//发送中断
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Jetson orin nano配置深度学习环境

Jetson orin nano是一块比较新的板子&#xff0c;装的是Ubuntu20.04系统&#xff0c;与普通x86_64不同&#xff0c;它是ARM64平台&#xff0c;网上的教程不是很多。 一、Jeston Orin Nano介绍 2022年GTC&#xff0c;NVIDIA 宣布Jetson Orin Nano系列系统模块&#xff08;SoM&a…

【教3妹学编程-算法题】最大化数组末位元素的最少操作次数

3妹&#xff1a;“太阳当空照&#xff0c;花儿对我笑&#xff0c;小鸟说早早早&#xff0c;你为什么背上炸药包” 2哥 :3妹&#xff0c;什么事呀这么开发。 3妹&#xff1a;2哥你看今天的天气多好啊&#xff0c;阳光明媚、万里无云、秋高气爽&#xff0c;适合秋游。 2哥&#x…

SpringMVC调用流程

SpringMVC的调用流程 SpringMVC涉及组件理解&#xff1a; DispatcherServlet : SpringMVC提供&#xff0c;我们需要使用web.xml配置使其生效&#xff0c;它是整个流程处理的核心&#xff0c;所有请求都经过它的处理和分发&#xff01;[ CEO ] HandlerMapping : SpringMVC提供&…

yolo改进替换VanillaNet backbone

论文地址&#xff1a;https://arxiv.org/pdf/2305.12972.pdf 代码地址&#xff1a;GitHub - huawei-noah/VanillaNet VanillaNet简介 基础模型的核心是“更多不同”的哲学&#xff0c;计算机视觉和自然语言处理的惊人成功就是例证。 然而&#xff0c;优化的挑战和Transformer模…

pycharm2023关闭项目后一直显示正在关闭项目-解决办法

网上的很多教程都试了不行&#xff0c;直接用下面的方法有效解决。 点击 帮助--查找操作--输入Registry--点注册表&#xff0c;取消ide.await.scope.completion后的勾选即可。

rabbitMQ的扇出模式(fanout发布订阅)的生产者与消费者使用案例

扇出模式 fanout 发布订阅模式 生产者 生产者发送消息到交换机&#xff08;logs&#xff09;,控制台输入消息作为生产者的消息发送 package com.esint.rabbitmq.work03;import com.esint.rabbitmq.RabbitMQUtils; import com.rabbitmq.client.Channel;import java.util.Scanne…

面向配电网韧性提升的移动储能预布局与动态调度策略(matlab代码)

欢迎关注威♥“电击小子程高兴的MATLAB小屋”获取更多资料 该程序复现《面向配电网韧性提升的移动储能预布局与动态调度策略》&#xff0c;具体摘要内容见下图&#xff0c;程序主要分为两大模块&#xff0c;第一部分是灾前预防代码&#xff0c;该部分采用两阶段优化算法&#…

持久化存储

RDB&#xff08;速度快&#xff0c;实时性差&#xff0c;恢复i/o影响性能&#xff09; RDB&#xff1a;快照文件*.rdb&#xff0c;redis database简写 redis6.016一下快照默认配置 ################################ SNAPSHOTTING ################################ # # Save…

Spring Boot 项目部署方案!打包 + Shell 脚本部署详解

文章目录 概要一 、profiles指定不同环境的配置二、maven-assembly-plugin打发布压缩包三、 分享shenniu_publish.sh程序启动工具四、linux上使用shenniu_publish.sh启动程序 概要 本篇和大家分享的是springboot打包并结合shell脚本命令部署&#xff0c;重点在分享一个shell程…

GitHub加速配置

1. 找到要加速的域名 GitHub&#xff1a;github.com&#xff08;这只是加载主页面的&#xff09;GitHub下载&#xff1a;codeload.github.com&#xff08;不唯一&#xff0c;自己去下载链接看&#xff09; 2. 用域名到DNS解析服务器地址 ITDOG 3. 修改 Hosts 文件 依据解…

卷积神经网络(CNN)mnist手写数字分类识别的实现

文章目录 前期工作1. 设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;我的环境&#xff1a; 2. 导入数据3.归一化4.可视化5.调整图片格式 二、构建CNN网络模型三、编译模型四、训练模型五、预测六、知识点详解1. MNIST手写数字数据集介绍2. 神经网络程序说明3. 网…

python接口自动化-参数关联

前言 我们用自动化发帖之后&#xff0c;要想接着对这篇帖子操作&#xff0c;那就需要用参数关联了&#xff0c;发帖之后会有一个帖子的id&#xff0c;获取到这个id&#xff0c;继续操作传这个帖子id就可以了 &#xff08;博客园的登录机制已经变了&#xff0c;不能用账号和密…

静态共享代理和静态独享有哪些区别?怎么选择?

在软件开发中&#xff0c;静态共享代理&#xff08;Static Proxy&#xff09;和静态独享&#xff08;Monostatic&#xff09;是两种常见的软件设计模式。这两种模式在实现方式、使用场景以及优缺点上存在一定的差异&#xff0c;下面将详细介绍它们的区别以及如何进行选择。 一、…

Python长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析、生物量估算与趋势分析

植被是陆地生态系统中最重要的组分之一&#xff0c;也是对气候变化最敏感的组分&#xff0c;其在全球变化过程中起着重要作用&#xff0c;能够指示自然环境中的大气、水、土壤等成分的变化&#xff0c;其年际和季节性变化可以作为地球气候变化的重要指标。此外&#xff0c;由于…

【你哥电力电子】从耦合电感到变压器

从耦合电感到变压器 2023年7月12日 dk 文章目录 从耦合电感到变压器1. 耦合电感1.1 一个等效1.2 自感、互感与漏感1.3 耦合系数2. 变压器3. 其他模型的推导方法3.1 T型等效电路3.2 其他等效电路4. 小结下链1. 耦合电感 1.1 一个等效 通电导线的周围会产生磁场,磁场可以通过…

开源微信小程序源码/校园综合服务平台小程序源码+数据库/包括校园跑腿 快递代取 打印服务等功能

源码简介&#xff1a; 校园综合服务小程序源码&#xff0c;它是基于微信小程序开发&#xff0c;包括快递代取 打印服务 校园跑腿 代替服务 上门维修和其他帮助等功能。它是开源微信小程序源码。 校园综合服务小程序开源源码是一款功能强大的小程序&#xff0c;可用于搭建校园…

GPON、XG(S)-PON基础

前言 本文主要介绍了GPON、XG(S)-PON中数据复用技术、协议、关键技术、组网保护等内容&#xff0c;希望对你有帮助。 一&#xff1a;GPON数据复用技术 下行波长&#xff1a;1490nm&#xff0c;上行波长&#xff1a;1310nm 1&#xff1a;单线双向传输&#xff08;WDM技术&am…

Docker启动SRS流媒体服务器

一、安装Docker 1.1、下载windows桌面版Windows 1.2、配置镜像 镜像加速器镜像加速器地址Docker 中国官方镜像https://registry.docker-cn.comDaoCloud 镜像站http://f1361db2.m.daocloud.ioAzure 中国镜像https://dockerhub.azk8s.cn科大镜像站https://docker.mirrors.ustc…

STM32中断看这一篇就够了

&#x1f64c;秋名山码民的主页 &#x1f602;oi退役选手&#xff0c;Java、大数据、单片机、IoT均有所涉猎&#xff0c;热爱技术&#xff0c;技术无罪 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 获取源码&#xff0c;添加WX 目录 1. 前言…