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

一、准备

  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设备文件,恢复原先参数--------  
 
  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,获取网页输入信息可以通过ESP8266WebServer库中的`arg`方法实现。该方法可以获取客户端发送的带有参数的请求,并返回指定参数的值。 以下是一个简单的示例代码,用于获取网页输入的值并将其打印到串口监视器中: ```c++ #include <ESP8266WiFi.h> #include <ESP8266WebServer.h> ESP8266WebServer server(80); void handleRoot() { String html = "<html><body>"; html += "<form action='/result' method='get'>"; html += "Please enter a value:<input type='text' name='input'><br>"; html += "<input type='submit' value='Submit'></form>"; html += "</body></html>"; server.send(200, "text/html", html); } void handleResult() { String input = server.arg("input"); Serial.println("Input value is: " + input); server.send(200, "text/plain", "Received input value"); } void setup() { Serial.begin(115200); WiFi.begin("SSID", "password"); while (WiFi.status() != WL_CONNECTED) { delay(1000); } server.on("/", handleRoot); server.on("/result", handleResult); server.begin(); } void loop() { server.handleClient(); } ``` 在以上代码中,`handleResult`函数使用`server.arg`方法获取名为"input"的参数的值,并使用`Serial.println`将其输出到串口监视器中。 请将"SSID"和"password"替换为你的WiFi SSID和密码。上传代码后,打开串口监视器,然后在浏览器中输入ESP8266的IP地址,即可访问网页。在输入框中输入任意值并点击"Submit"按钮,即可在串口监视器中看到输出结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值