m0_57879949 2021-07-21 13:25 采纳率: 0%
浏览 214

ESP8266wifi模块产生了WiFi局域网,为什么笔记本电脑却感应不到这个wifi?

安信可IDE1.5编程环境
我试了很久都没有让电脑感应到wifi模块产生的局域网。
还有一个问题,就是我的esp8266作为设备端,烧入程序让其去连接别的路由器WiFi,怎么修改程序啊,安信可串口调试助手一直反馈说找不到JI-XIN-TEC,我想把这个WiFi改成连接别的WiFi,那个程序应该怎么改?(我只改了宏定义的WiFi名称和密码,但是没用)
以下是我的代码



//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                                        //                                                    //
// 工程:    AP_Mode                                        // 验证:    ①:找到名为“ESP8266_JX”的WIFI        //
//                                                        //                                                    //
// 平台:    【技新电子】物联网开发板 ESP8266 V1.0        //            ②:输入密码“jixiaoxin”,接入WIFI        //
//                                                        //                                                    //
// 功能:    ①:ESP8266设置为AP模式,建立WIFI局域网        //            ③:查看电脑/手机的IP地址                //
//                                                        //                                                    //
//            ②:定时打印ESP8266_softAP模式下的IP地址    //            ④:STA的IP地址应为:192.168.4.X段内    //
//                                                        //                                                    //
//            ③:定时查询并打印连接此WIFI的设备数量        //////////////////////////////////////////////////////
//                                                        //                                                    //
//            ④:用手机/电脑接入此WIFI                    //        AP(ESP8266)    = 192.168.4.1    默认开启DHCP    //
//                                                        //                                                    //
//            ⑤:查看电脑的IP地址:192,.168.4.1            //         STA(主机①)    = 192.168.4.2    默认开启DHCP    //
//                                                        //                                                    //
// 版本:    V1.0                                        //        STA(主机②)    = 192.168.4.3    默认开启DHCP    //
//                                                        //                                                    //
//////////////////////////////////////////////////////////////////////////////////////////////////////////////


// 头文件引用
//==================================================================================
#include "user_config.h"        // 用户配置
#include "driver/uart.h"          // 串口
#include "driver/oled.h"          // OLED

//#include "at_custom.h"
#include "c_types.h"            // 变量类型
#include "eagle_soc.h"            // GPIO函数、宏定义
//#include "espconn.h"
//#include "espnow.h"
#include "ets_sys.h"            // 回调函数
//#include "gpio.h"
//#include "ip_addr.h"
//#include "mem.h"
#include "os_type.h"            // os_XXX
#include "osapi.h"              // os_XXX、软件定时器
//#include "ping.h"
//#include "pwm.h"
//#include "queue.h"
//#include "smartconfig.h"
//#include "sntp.h"
//#include "spi_flash.h"
//#include "upgrade.h"
#include "user_interface.h"     // 系统接口、system_param_xxx接口、WIFI、RateContro
//==================================================================================


// 宏定义
//==================================================================================
#define        ProjectName            "AP_Mode"            // 工程名宏定义

#define        ESP8266_AP_SSID        "ESP8266_JX"        // 创建的WIFI名
#define        ESP8266_AP_PASS        "jixiaoxin"            // 创建的WIFI密码
//==================================================================================


// 全局变量
//==================================================================================
os_timer_t OS_Timer_1;        // 软件定时器
//==================================================================================


// 毫秒延时函数
//===========================================
void ICACHE_FLASH_ATTR delay_ms(u32 C_time)
{    for(;C_time>0;C_time--)
        os_delay_us(1000);
}
//===========================================


// 初始化ESP8266_AP模式
//============================================================================================
void ICACHE_FLASH_ATTR ESP8266_AP_Init_JX()
{
    struct softap_config AP_Config;                // AP参数结构体

    wifi_set_opmode(0x02);                        // 设置为AP模式,并保存到Flash

    // 结构体赋值(注意:【服务集标识符/密码】须设为字符串形式)
    //--------------------------------------------------------------------------------------
    os_memset(&AP_Config, 0, sizeof(struct softap_config));    // AP参数结构体 = 0
    os_strcpy(AP_Config.ssid,ESP8266_AP_SSID);        // 设置SSID(将字符串复制到ssid数组)
    os_strcpy(AP_Config.password,ESP8266_AP_PASS);    // 设置密码(将字符串复制到password数组)
    AP_Config.ssid_len=os_strlen(ESP8266_AP_SSID);    // 设置ssid长度(和SSID的长度一致)
    AP_Config.channel=1;                              // 通道号113
    AP_Config.authmode=AUTH_WPA2_PSK;               // 设置加密模式
    AP_Config.ssid_hidden=0;                          // 不隐藏SSID
    AP_Config.max_connection=4;                       // 最大连接数
    AP_Config.beacon_interval=100;                    // 信标间隔时槽10060000 ms

    wifi_softap_set_config(&AP_Config);                // 设置soft-AP,并保存到Flash
}
//============================================================================================


// 定时的回调函数
//=====================================================================================================
void ICACHE_FLASH_ATTR OS_Timer_1_cb(void)
{
    struct ip_info ST_ESP8266_IP;    // IP信息结构体

    u8  ESP8266_IP[4];        // 点分十进制形式保存IP


    // 查询并打印ESP8266的工作模式
    //---------------------------------------------------------------------
    switch(wifi_get_opmode())    // 输出工作模式
    {
        case 0x01:    os_printf("\nESP8266_Mode = Station\n");        break;
        case 0x02:    os_printf("\nESP8266_Mode = SoftAP\n");            break;
        case 0x03:    os_printf("\nESP8266_Mode = Station+SoftAP\n");    break;
    }


    // 获取ESP8266_AP模式下的IP地址
    //【AP模式下,如果开启DHCP(默认),并且未设置IP相关参数,ESP8266的IP地址=192.168.4.1】
    //-----------------------------------------------------------------------------------
    wifi_get_ip_info(SOFTAP_IF,&ST_ESP8266_IP);    // 参数2:IP信息结构体指针

    // ESP8266_AP_IP.ip.addr==32位二进制IP地址,将它转换为点分十进制的形式
    //------------------------------------------------------------------------------------------
    ESP8266_IP[0] = ST_ESP8266_IP.ip.addr;            // 点分十进制IP的第一个数 <==> addr低八位
    ESP8266_IP[1] = ST_ESP8266_IP.ip.addr>>8;        // 点分十进制IP的第二个数 <==> addr次低八位
    ESP8266_IP[2] = ST_ESP8266_IP.ip.addr>>16;        // 点分十进制IP的第三个数 <==> addr次高八位
    ESP8266_IP[3] = ST_ESP8266_IP.ip.addr>>24;        // 点分十进制IP的第四个数 <==> addr高八位

    // 打印ESP8266的IP地址
    //-----------------------------------------------------------------------------------------------
    os_printf("ESP8266_IP = %d.%d.%d.%d\n",ESP8266_IP[0],ESP8266_IP[1],ESP8266_IP[2],ESP8266_IP[3]);
    OLED_ShowIP(24,2,ESP8266_IP);            // 显示ESP8266的IP地址


    // 查询并打印接入此WIFI的设备数量
    //-----------------------------------------------------------------------------------------
    os_printf("Number of devices connected to this WIFI = %d\n",wifi_softap_get_station_num());
}
//=====================================================================================================


// 软件定时器初始化(ms毫秒)
//=====================================================================================
void ICACHE_FLASH_ATTR OS_Timer_1_Init_JX(u32 time_ms, u8 time_repetitive)
{

    os_timer_disarm(&OS_Timer_1);    // 关闭定时器
    os_timer_setfn(&OS_Timer_1,(os_timer_func_t *)OS_Timer_1_cb, NULL);    // 设置定时器
    os_timer_arm(&OS_Timer_1, time_ms, time_repetitive);  // 使能定时器
}
//=====================================================================================


// user_init:entry of user application, init user function here
//==================================================================================
void ICACHE_FLASH_ATTR user_init(void)
{
    uart_init(115200,115200);    // 初始化串口波特率
    os_delay_us(10000);            // 等待串口稳定
    os_printf("\r\n=================================================\r\n");
    os_printf("\t Project:\t%s\r\n", ProjectName);
    os_printf("\t SDK version:\t%s", system_get_sdk_version());
    os_printf("\r\n=================================================\r\n");


    // OLED初始化
    //---------------------
    OLED_Init();                            // |
    OLED_ShowString(0,0,"ESP8266 = AP");    // |
    OLED_ShowString(0,2,"IP:");                // |
    //---------------------


    ESP8266_AP_Init_JX();            // 设置ESP8266_AP模式相关参数

    OS_Timer_1_Init_JX(1000,1);        // 1秒软件定时


//    while(1) system_soft_wdt_feed();    // 死循环,测试用

    os_printf("\r\n-------------------- user_init OVER --------------------\r\n");
}
//==================================================================================


/******************************************************************************
 * FunctionName : user_rf_cal_sector_set
 * Description  : SDK just reversed 4 sectors, used for rf init data and paramters.
 *                We add this function to force users to set rf cal sector, since
 *                we don't know which sector is free in user's application.
 *                sector map for last several sectors : ABCCC
 *                A : rf cal
 *                B : rf init data
 *                C : sdk parameters
 * Parameters   : none
 * Returns      : rf cal sector
*******************************************************************************/
uint32 ICACHE_FLASH_ATTR user_rf_cal_sector_set(void)
{
    enum flash_size_map size_map = system_get_flash_size_map();
    uint32 rf_cal_sec = 0;

    switch (size_map) {
        case FLASH_SIZE_4M_MAP_256_256:
            rf_cal_sec = 128 - 5;
            break;

        case FLASH_SIZE_8M_MAP_512_512:
            rf_cal_sec = 256 - 5;
            break;

        case FLASH_SIZE_16M_MAP_512_512:
        case FLASH_SIZE_16M_MAP_1024_1024:
            rf_cal_sec = 512 - 5;
            break;

        case FLASH_SIZE_32M_MAP_512_512:
        case FLASH_SIZE_32M_MAP_1024_1024:
            rf_cal_sec = 1024 - 5;
            break;

        case FLASH_SIZE_64M_MAP_1024_1024:
            rf_cal_sec = 2048 - 5;
            break;
        case FLASH_SIZE_128M_MAP_1024_1024:
            rf_cal_sec = 4096 - 5;
            break;
        default:
            rf_cal_sec = 0;
            break;
    }

    return rf_cal_sec;
}

void ICACHE_FLASH_ATTR user_rf_pre_init(void)

 工程:    STA_Mode                                    //
//                                                        //
// 平台:    【技新电子】物联网开发板 ESP8266 V1.0        //
//                                                        //
// 功能:    ①:8266设置为STA模式,接入WIFI热点            //
//                                                        //
//            ②:每秒查询ESP8266接入WIFI的状态            //
//                                                        //
//            ③:串口打印接入状态/IP地址                    //
//                                                        //
//    版本:    V1.0                                        //
//                                                        //
//////////////////////////////////////////////////////////



// 头文件引用
//==================================================================================
#include "user_config.h"        // 用户配置
#include "driver/uart.h"          // 串口
#include "driver/oled.h"          // OLED

//#include "at_custom.h"
#include "c_types.h"            // 变量类型
#include "eagle_soc.h"            // GPIO函数、宏定义
#include "ip_addr.h"            // 被"espconn.h"使用。在"espconn.h"开头#include"ip_addr.h"或#include"ip_addr.h"放在"espconn.h"之前
#include "espconn.h"            // TCP/UDP接口
//#include "espnow.h"
#include "ets_sys.h"            // 回调函数
//#include "gpio.h"
#include "mem.h"                // 内存申请等函数
#include "os_type.h"            // os_XXX
#include "osapi.h"              // os_XXX、软件定时器
//#include "ping.h"
//#include "pwm.h"
//#include "queue.h"
//#include "smartconfig.h"
//#include "sntp.h"
//#include "spi_flash.h"
//#include "upgrade.h"
#include "user_interface.h"     // 系统接口、system_param_xxx接口、WIFI、RateContro
//==================================================================================


// 宏定义
//==================================================================================
#define        ProjectName            "STA_Mode"                // 工程名宏定义

#define        ESP8266_STA_SSID    "JI-XIN-TEC"            // 接入的WIFI名
#define        ESP8266_STA_PASS    "JIXINDIANZI78963"        // 接入的WIFI密码

#define        LED_ON                GPIO_OUTPUT_SET(GPIO_ID_PIN(4),0)        // LED亮
#define        LED_OFF                GPIO_OUTPUT_SET(GPIO_ID_PIN(4),1)        // LED灭
//==================================================================================

// 全局变量
//==================================================================================
os_timer_t OS_Timer_1;        // 软件定时器
//==================================================================================

// 毫秒延时函数
//===========================================
void ICACHE_FLASH_ATTR delay_ms(u32 C_time)
{    for(;C_time>0;C_time--)
        os_delay_us(1000);
}
//===========================================


// ESP8266_STA初始化
//==============================================================================
void ICACHE_FLASH_ATTR ESP8266_STA_Init_JX()
{
    struct station_config STA_Config;    // STA参数结构体

    struct ip_info ST_ESP8266_IP;        // STA信息结构体

    // 设置ESP8266的工作模式
    //------------------------------------------------------------------------
    wifi_set_opmode(0x01);                // 设置为STA模式,并保存到Flash

    /*
    // 设置STA模式下的IP地址【ESP8266默认开启DHCP Client,接入WIFI时会自动分配IP地址】
    //--------------------------------------------------------------------------------
    wifi_station_dhcpc_stop();                        // 关闭 DHCP Client
    IP4_ADDR(&ST_ESP8266_IP.ip,192,168,8,88);        // 配置IP地址
    IP4_ADDR(&ST_ESP8266_IP.netmask,255,255,255,0);    // 配置子网掩码
    IP4_ADDR(&ST_ESP8266_IP.gw,192,168,8,1);        // 配置网关地址
    wifi_set_ip_info(STATION_IF,&ST_ESP8266_IP);    // 设置STA模式下的IP地址
    */

    // 结构体赋值,配置STA模式参数
    //-------------------------------------------------------------------------------
    os_memset(&STA_Config, 0, sizeof(struct station_config));    // STA参数结构体 = 0
    os_strcpy(STA_Config.ssid,ESP8266_STA_SSID);                // 设置WIFI名
    os_strcpy(STA_Config.password,ESP8266_STA_PASS);            // 设置WIFI密码

    wifi_station_set_config(&STA_Config);    // 设置STA参数,并保存到Flash


    // 此API不能在user_init初始化中调用
    // 如果user_init中调用wifi_station_set_config(...)的话,内核会自动将ESP8266接入WIFI
    //----------------------------------------------------------------------------------
    // wifi_station_connect();        // ESP8266连接WIFI
}
//=========================================================================================


// 软件定时的回调函数
//========================================================================================================
void ICACHE_FLASH_ATTR OS_Timer_1_cb(void)
{
    u8 C_LED_Flash = 0;                // LED闪烁计次

    u8 S_WIFI_STA_Connect;            // WIFI接入状态标志

    struct ip_info ST_ESP8266_IP;    // ESP8266的IP信息
    u8 ESP8266_IP[4];                // ESP8266的IP地址

    // 查询STA接入WIFI状态
    //-----------------------------------------------------
    S_WIFI_STA_Connect = wifi_station_get_connect_status();
    //---------------------------------------------------
    // Station连接状态表
    // 0 == STATION_IDLE -------------- STATION闲置
    // 1 == STATION_CONNECTING -------- 正在连接WIFI
    // 2 == STATION_WRONG_PASSWORD ---- WIFI密码错误
    // 3 == STATION_NO_AP_FOUND ------- 未发现指定WIFI
    // 4 == STATION_CONNECT_FAIL ------ 连接失败
    // 5 == STATION_GOT_IP ------------ 获得IP,连接成功
    //---------------------------------------------------

    switch(S_WIFI_STA_Connect)
    {
        case 0 :     os_printf("\nSTATION_IDLE\n");                break;
        case 1 :     os_printf("\nSTATION_CONNECTING\n");        break;
        case 2 :     os_printf("\nSTATION_WRONG_PASSWORD\n");    break;
        case 3 :     os_printf("\nSTATION_NO_AP_FOUND\n");        break;
        case 4 :     os_printf("\nSTATION_CONNECT_FAIL\n");        break;
        case 5 :     os_printf("\nSTATION_GOT_IP\n");            break;
    }

    // 成功接入WIFI【STA模式下,如果开启DHCP(默认),则ESO8266的IP地址由WIFI路由器自动分配】
    //----------------------------------------------------------------------------------------
    if( S_WIFI_STA_Connect == STATION_GOT_IP )    // 判断是否获取IP
    {
        // 获取ESP8266_Station模式下的IP地址
        // DHCP-Client默认开启,ESP8266接入WIFI后,由路由器分配IP地址,IP地址不确定
        //--------------------------------------------------------------------------
        wifi_get_ip_info(STATION_IF,&ST_ESP8266_IP);    // 参数2:IP信息结构体指针

        // ESP8266_AP_IP.ip.addr是32位二进制代码,转换为点分十进制形式
        //----------------------------------------------------------------------------
        ESP8266_IP[0] = ST_ESP8266_IP.ip.addr;        // IP地址高八位 == addr低八位
        ESP8266_IP[1] = ST_ESP8266_IP.ip.addr>>8;    // IP地址次高八位 == addr次低八位
        ESP8266_IP[2] = ST_ESP8266_IP.ip.addr>>16;    // IP地址次低八位 == addr次高八位
        ESP8266_IP[3] = ST_ESP8266_IP.ip.addr>>24;    // IP地址低八位 == addr高八位

        // 显示ESP8266的IP地址
        //-----------------------------------------------------------------------------------------------
        os_printf("ESP8266_IP = %d.%d.%d.%d\n",ESP8266_IP[0],ESP8266_IP[1],ESP8266_IP[2],ESP8266_IP[3]);
        OLED_ShowIP(24,2,ESP8266_IP);    // OLED显示ESP8266的IP地址
        //-----------------------------------------------------------------------------------------------

        // 接入WIFI成功后,LED快闪3次
        //----------------------------------------------------
        for(; C_LED_Flash<=5; C_LED_Flash++)
        {
            GPIO_OUTPUT_SET(GPIO_ID_PIN(4),(C_LED_Flash%2));
            delay_ms(100);
        }

        os_timer_disarm(&OS_Timer_1);    // 关闭定时器
    }
}
//========================================================================================================

// 软件定时器初始化(ms毫秒)
//=====================================================================================
void ICACHE_FLASH_ATTR OS_Timer_1_Init_JX(u32 time_ms, u8 time_repetitive)
{

    os_timer_disarm(&OS_Timer_1);    // 关闭定时器
    os_timer_setfn(&OS_Timer_1,(os_timer_func_t *)OS_Timer_1_cb, NULL);    // 设置定时器
    os_timer_arm(&OS_Timer_1, time_ms, time_repetitive);  // 使能定时器
}
//=====================================================================================

// LED初始化
//=============================================================================
void ICACHE_FLASH_ATTR LED_Init_JX(void)
{
    PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U,    FUNC_GPIO4);    // GPIO4设为IO口

    GPIO_OUTPUT_SET(GPIO_ID_PIN(4),1);                        // IO4 = 1
}
//=============================================================================

// user_init:entry of user application, init user function here
//==================================================================================
void ICACHE_FLASH_ATTR user_init(void)
{
    uart_init(115200,115200);    // 初始化串口波特率
    os_delay_us(10000);            // 等待串口稳定
    os_printf("\r\n=================================================\r\n");
    os_printf("\t Project:\t%s\r\n", ProjectName);
    os_printf("\t SDK version:\t%s", system_get_sdk_version());
    os_printf("\r\n=================================================\r\n");

    // OLED初始化
    //---------------------
    OLED_Init();                            // |
    OLED_ShowString(0,0,"ESP8266 = STA");    // |
    OLED_ShowString(0,2,"IP:");                // |
    //---------------------

    LED_Init_JX();        // LED初始化


    ESP8266_STA_Init_JX();            // ESP8266_STA初始化

    OS_Timer_1_Init_JX(1000,1);        // 定时查询WIFI接入状态
}
//==================================================================================


/******************************************************************************
 * FunctionName : user_rf_cal_sector_set
 * Description  : SDK just reversed 4 sectors, used for rf init data and paramters.
 *                We add this function to force users to set rf cal sector, since
 *                we don't know which sector is free in user's application.
 *                sector map for last several sectors : ABCCC
 *                A : rf cal
 *                B : rf init data
 *                C : sdk parameters
 * Parameters   : none
 * Returns      : rf cal sector
*******************************************************************************/
uint32 ICACHE_FLASH_ATTR user_rf_cal_sector_set(void)
{
    enum flash_size_map size_map = system_get_flash_size_map();
    uint32 rf_cal_sec = 0;

    switch (size_map) {
        case FLASH_SIZE_4M_MAP_256_256:
            rf_cal_sec = 128 - 5;
            break;

        case FLASH_SIZE_8M_MAP_512_512:
            rf_cal_sec = 256 - 5;
            break;

        case FLASH_SIZE_16M_MAP_512_512:
        case FLASH_SIZE_16M_MAP_1024_1024:
            rf_cal_sec = 512 - 5;
            break;

        case FLASH_SIZE_32M_MAP_512_512:
        case FLASH_SIZE_32M_MAP_1024_1024:
            rf_cal_sec = 1024 - 5;
            break;

        case FLASH_SIZE_64M_MAP_1024_1024:
            rf_cal_sec = 2048 - 5;
            break;
        case FLASH_SIZE_128M_MAP_1024_1024:
            rf_cal_sec = 4096 - 5;
            break;
        default:
            rf_cal_sec = 0;
            break;
    }

    return rf_cal_sec;
}

void ICACHE_FLASH_ATTR user_rf_pre_init(void){}


  • 写回答

1条回答 默认 最新

  • 有问必答小助手 2021-07-22 14:00
    关注

    你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答

    本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。

    ​​​​因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。

    评论

报告相同问题?

问题事件

  • 创建了问题 7月21日

悬赏问题

  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误