WiFi模块ESP-07s开发过程(学习笔记)

注意事项

  1. 转义字符:“ \ ” :C中定义了一些字母前加""来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。简单来说就是在一些字符前加 “\” 使它具有其他意义。
  2. 分开处理AT指令的程序和发送AT指令的程序,避免在空等WiFi模块返回指令。可以用switch…case函数来写,网上很多例程都是等待返回的,移植到主程序运行会消耗很多时间,而且其他功能还不能用,要等连上网才能用。
  3. &:取地址符号。

获取AT指令

  1. 可以到乐鑫该官网找,链接: 命令集
  2. 或者找模块商城客服要一份PDF,不同固件对指令的支持不一样;

用到的指令

注意:除了退出透传指令,发送其他指令都要在后面添加“\r\n”

  1. 测试AT启动:AT

  2. 退出透传模式:+++

  3. 设置工作模式为WiFi模式:AT+CWMODE=1

  4. 重启:AT+RST

  5. 连接WiFi:AT+CWJAP=“WiFi名称”,“WiFi密码”

  6. 获取信号强度:AT+CWJAP?
    返回的报文中,带负号“-”的数字就是信号强度。
    其范围为零到负一百:0 ~-100
    数字越大,代表信号越强。

  7. 查询MAC地址:AT+CIPSTAMAC?

  8. 查询本地IP、网关和子网掩码:AT+CIPSTA?

  9. 查询DNS地址:AT+CIPDNS_CUR?
    有些固件不支持这条指令。

  10. 禁用多连接:AT+CIPMUX=0

  11. 连接服务器:AT+CIPSTART=“TCP”,“服务器地址”,端口号

  12. 开启透传模式:AT+CIPMODE=1

  13. 透传模式下发送数据:AT+CIPSEND

这样就可以直接发送数据了,发送指令WiFi模块也不会响应,要发送退出透传模式指令才会对AT指令有反应。

通过返回的指令提取自己想要的信息

  1. 提取信号强度
#include "stdlib.h"
char *ESP_RSSI = NULL;//接收字符串
int RSSI = -1;
void Compare_RSSI(void)//比较信号强度
{
	if(RSSI <= 0 && RSSI >= -55)
	{
		m_atrssi = BEST;//信号强度最好
	}
	else if(RSSI < -55 && RSSI >= -70)
	{
		m_atrssi = BETTER;//信号强度较好
	}
	else if(RSSI < -70 && RSSI >= -85)
	{
		m_atrssi = GENERAL;//信号强度一般
	}
	else if(RSSI<-85 && RSSI >=-100)
	{
		m_atrssi = BAD;//信号强度差
	}
}
void RSSI(void)// 提取信号强度
{
	ESP_RSSI = strstr((char *)RX_BUF,"+CWJAP:");
	ESP_RSSI = strstr((char *)ESP_RSSI + 1,",");
	ESP_RSSI = strstr((char *)ESP_RSSI + 1,",");
	ESP_RSSI = strstr((char *)ESP_RSSI + 1,",");
	
	RSSI = atoi(ESP_RSSI + 1);//把字符串转换成整型数
	//判断级别
	Compare_RSSI();//判断信号强度
}

参考博客

  1. 提取MAC地址
#include “stdio.h”
const char s[2] = "\"";//间隔符 ” 一个双引号字符需要转运符号加 “\” 
char *ESP_MAC1;			
char *ESP_MAC2;
uint8_t ESP_MAC[12] = {0};//MAC地址
void MAC(void)//提取MAC地址
{
	int a = 0;
	ESP_MAC1= strtok((char *)Array,s);//分解接收到的字符串,分隔符为 ”
	while(ESP_MAC1!= NULL)//若未分割完成
	{
		a++;
		if(a == 2)//提取MAC地址
		{
			ESP_MAC2= ESP_MAC1;
		}
		ESP_MAC1= strtok(NULL,s);
	}
	sscanf((const char *)ESP_MAC2,"%c%c:%c%c:%c%c:%c%c:%c%c:%c%c",&ESP_MAC[0],&ESP_MAC[1],&ESP_MAC[2],&ESP_MAC[3],&ESP_MAC[4],&ESP_MAC[5],&ESP_MAC[6],&ESP_MAC[7],&ESP_MAC[8],&ESP_MAC[9],&ESP_MAC[10],&ESP_MAC[11]);
}
  1. 提取本地IP、网关和子网掩码
#include “stdio.h”
char *ESP_MAC1;			
char *ESP_IP;
char *ESP_GW;			
char *ESP_NM;
int ESP_Local_IP[4] = {0};//本地IP
int ESP_Gateway[4] = {0};//网关		
int ESP_Netmask[4] = {0};//子网掩码	
int ESP_DNS[4] = {0};//DNS地址		
void Save_IP(void)//存本地IP
{
	int a = 0;
	ESP_MAC1= strtok((char *)RX_BUF,s);//分解接收到的字符串,分隔符为 ”
	while(ESP_MAC1!= NULL)//若未分割完成
	{
		a++;
		if(a == 2)//提取本地IP
		{
			ESP_IP= ESP_MAC1;
		}
		else if(a == 4)//提取网关
		{
			ESP_GW= ESP_MAC1;
		}
		else if(a == 6)//提取子网掩码
		{
			ESP_NM= ESP_MAC1;
		}
		ESP_MAC1= strtok(NULL,s);
	}
	sscanf((const char *)ESP_IP,"%d.%d.%d.%d",&ESP_Local_IP[0],&ESP_Local_IP[1],&ESP_Local_IP[2],&ESP_Local_IP[3]);
	sscanf((const char *)ESP_GW,"%d.%d.%d.%d",&ESP_Gateway[0],&ESP_Gateway[1],&ESP_Gateway[2],&ESP_Gateway[3]);
	sscanf((const char *)ESP_NM,"%d.%d.%d.%d",&ESP_Netmask[0],&ESP_Netmask[1],&ESP_Netmask[2],&ESP_Netmask[3]);
}

参考语法

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值