发帖
7 0 0

WB2-01S蓝牙配网不能够自动连接?

xbxdbd
注册会员

3

主题

2

回帖

134

积分

注册会员

积分
134
Ai-WB2系列 153 7 2025-3-4 13:31:29

我用小程序给设备蓝牙配网,但是每一次我都要需要进行配网,然后我看AT指令,有一个自动连接指令,但是还是不行,需要每次手动配网?有什么办法可以首次配网成功后,不需要再次进行配网?是我代码逻辑的问题?

void ai_wb2_01s_init(void)
{
	  int timeout = 0;
    char mqtt_cfg[256];
    char conn_cmd[128];
    char sub_cmd[128];
//	  int wifi_state = ai_wb2_check_wifi_state();
	__HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE);           											//打开串口2接收中断

	printf("1.SETTING STATION MODE\r\n");
	while(ai_wb2_01s_send_cmd((uint8_t *)"AT+CWMODE=1,1\r\n",strlen("AT+CWMODE=1,1\r\n"),"OK")!=0)
	{
		HAL_Delay(1000);
	}
	printf("2.CLOSE ai_wb2_01s ECHO\r\n");        //关闭回显的指令,就是串口发送会返回上一个指令并返回OK值,不要这个功能就叫关闭回显指令
	while(ai_wb2_01s_send_cmd((uint8_t *)"ATE0\r\n",strlen("ATE0\r\n"),"OK")!=0)
	{
		HAL_Delay(1000);
	}

	// 新增的判断WiFi是否联网的代码
{
    int check_timeout = 0;
    while (1)
    {
        if (strstr((const char*)receive_buf, "WIFI GOT IP"))
        {
            // 如果找到 "WIFI GOT IP",说明WiFi已联网
            printf("WiFi is already connected.\n");
            uart2_receiver_clear(receive_count);
            goto MQTT_INIT;
        }
        if (check_timeout++ > 10)
        {
            // 如果多次检查都没有找到,认为未联网,进入蓝牙配网
            printf("WiFi is not connected, enter BLUFI mode.\n");
            uart2_receiver_clear(receive_count);
            goto BLUFI_INIT;
        }
        HAL_Delay(1000);
    }
}


BLUFI_INIT:

    // 进入蓝牙配网模式(原有逻辑)
    printf("Starting BLUFI provisioning...\n");
  
    // 配置蓝牙名称
    while(ai_wb2_01s_send_cmd((uint8_t *)"AT+BLUFINAME=\"040\"\r\n", 
                            strlen("AT+BLUFINAME=\"040\"\r\n"), "OK") != 0) {
        HAL_Delay(2000);
    }
  
    // 开启蓝牙配网
    while(ai_wb2_01s_send_cmd((uint8_t *)"AT+BLUFI=1\r\n", 
                            strlen("AT+BLUFI=1\r\n"), "OK") != 0) {
        HAL_Delay(1000);
    }

    printf("Waiting for provisioning...\n");
    timeout = 0;
    // 等待配网(带超时)
    while(1) {
        if(strstr((const char*)receive_buf, "WIFI CONNECTED")) {
            printf("Provisioning Success! Credentials saved in module.\n");
					  uart2_receiver_clear(receive_count);
                break;
        }
        if(timeout++ > 120) {
            printf("Timeout! Rebooting...\n");
            NVIC_SystemReset();
        }
        HAL_Delay(5000);
    }


	printf("3. AUTO CONNECT WIFI\r\n"); //需要自动连接wifi
	while(ai_wb2_01s_send_cmd((uint8_t *)"AT+CWAUTOCONN=1\r\n",strlen("AT+CWAUTOCONN=1\r\n"),"OK")!=0)
	{
		HAL_Delay(1000);
	}

MQTT_INIT:
    // 3. MQTT初始化 
    printf("Configuring MQTT...\n");
    // MQTT用户配置

    sprintf(mqtt_cfg, "AT+MQTTUSERCFG=0,1,\"%s\",\"%s\",\"%s\",0,0,\"\"\r\n", 
           MQTT_CLIENT_ID, MQTT_USER_NAME, MQTT_PASSWD);
    while(ai_wb2_01s_send_cmd((uint8_t*)mqtt_cfg, strlen(mqtt_cfg), "OK") != 0) {
        HAL_Delay(2000);
    }
──── 0人觉得很赞 ────

使用道具 举报

2025-3-4 13:51:20
断电联网就丢失了,建议将配网后的用户名密码写入flash,然后用别的方式连接,做一个逻辑判断,多次连接不上在重新调用蓝牙配网
2025-3-4 14:01:10
WildboarG 发表于 2025-3-4 13:51
断电联网就丢失了,建议将配网后的用户名密码写入flash,然后用别的方式连接,做一个逻辑判断,多次连接不上 ...

请问有类似于这样的案例吗?还有你说的别的方式连接是指直接发送AT+CWJAP?
2025-3-4 14:03:23
你把代码发给黄工,让他给你调。
2025-3-4 14:54:23
xbxdbd 发表于 2025-3-4 14:01
请问有类似于这样的案例吗?还有你说的别的方式连接是指直接发送AT+CWJAP? ...

没用过AT,直接写程序进去
2025-3-5 09:02:14
学习
2025-3-7 14:14:05
请问你用的是什么app蓝牙配网的,你现在成功了吗,现在我这个项目正需要这个,感谢
2025-3-10 11:43:35
diao 发表于 2025-3-7 14:14
请问你用的是什么app蓝牙配网的,你现在成功了吗,现在我这个项目正需要这个,感谢 ...

你这边是公司项目调试吗?
您需要登录后才可以回帖 立即登录
高级模式
返回
统计信息
  • 会员数: 28580 个
  • 话题数: 40691 篇