【嵌入式开发】利用ESP8266获取附近WIFI信息

本文详细介绍了如何利用ESP8266芯片进行WIFI信息扫描,包括发送AT+CWLAP命令获取AP信息,通过UART通信处理返回数据,将RSSI值转换为距离,并提供了完整的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、准备

  1. 一块块装好AT固件的8266芯片
  2. 一台装了linux的嵌入式开发板
  3. 将芯片与开发板进行连接

二、AT+CWLAP——扫描当前可用的 AP

通过发送AT+CWLAP,可捕获周围的AP信息,下面是查看官方AT文档后得到的信息:
这里写图片描述
这里写图片描述
这里写图片描述

在超级终端中尝试,其中新刷入的固件要启动WIFI模式,启动指令:AT+CWMODE_DEF=3
这里写图片描述

三、在主程序中实现UART通信

由于我用的是改造过的固件,波特率和官方的不一样,所以在使用的时候请改一下波特率,在代码的宏定义部分。

int main(int argc, char *argv[])  
{  

    int    fd, res;  
    struct termios  oldtio, newtio;  
    char  ch;  
    char buf[256] = {
  
  0};  

    printf("Start...\n");   
//-----------打开uart设备文件------------------  
    fd = open(UART_DEVICE, O_RDWR|O_NOCTTY);//没有设置O_NONBLOCK,所以这里read和write是阻塞操作  
    if (fd < 0) {  
        perror(UART_DEVICE);  
        exit(1);  
    }  
    else  
        printf("Open %s successfully\n", UART_DEVICE);  

//-----------设置操作参数-----------------------    
    tcgetattr(fd, &oldtio);//获取当前操作模式参数  
    memset(&newtio, 0, sizeof(newtio));  

    //波特率 数据位=8 使能数据接收   
    newtio.c_cflag = BAUDRATE|CS8|CLOCAL|CREAD;  
    newtio.c_iflag = IGNPAR;   
    //newtio.c_oflag = OPOST | OLCUC; //  
    /* 设定为正规模式 */  
    //newtio.c_lflag = ICANON;  

    tcflush(fd, TCIFLUSH);//清空输入缓冲区和输出缓冲区  
    tcsetattr(fd, TCSANOW, &newtio);//设置新的操作参数  

//------------向urat发送数据------------------- 
    char writeBuf[32] = "AT+CWLAP\r\n"; 
    res = write(fd, writeBuf, 32);  
    printf("Writing: %s\n", writeBuf); 

//-------------从uart接收数据-------------------
    string allReturnBuf = "";
    string s_buf;
    printf("Reading...\n"); 
    while(1) {  
        res = read(fd, buf, 64);//程序将在这里挂起,直到从uart接收到数据(阻塞操作)  
        if (res == 0)   
            continue;  
        buf[res] = '\0'; 

        // printf("res = %d, buf = %s\n", res, buf);//将uart接收到的字符打印出来
        // 由于每次最多只能拿32位数据,所以要一直获取直到指令返回信息全部取回
        s_buf = buf;
        allReturnBuf += s_buf;

        // 判断AT返回命令是否到头
        if (isEnd(allReturnBuf)) {
            // for (int i = 0; i < allReturnBuf.size(); i++) {
   
   
            //     if ('\n' == allReturnBuf[i]) cout << "\\n";
            //     else if ('\0' == allReturnBuf[i]) cout << "\\0";
            //     else if ('\r' == allReturnBuf[i]) cout << "\\r";
            //     else cout << allReturnBuf[i];
            // }
            cout << "response:\n" << allReturnBuf;
            cout << endl;

            displayRes(selectWifiInfo(allReturnBuf));
            break; 
        }
    }  
//------------关闭uart设备文件,恢复原先参数--------  
    close(fd);  
    printf("Close %s\n", UAR
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值