第七天训练

1.TCP改用UDP发送数据 
 //uint16_t data_len = 0;
  uint8_t wifi_data[200] = {0};
  uint8_t rx_data[200] = {0};
  //uint8_t tx_data[200] = "AT\r\n";
  
  // 0.检测是否更新WIFI信息
  Key_Update_WIFI((char *)wifi_data, 2000);
  
  // 1.启动串口2接收(中断方式)
  USART2_StartRx();
  
  // 2.串口2发送AT指令,启动TCP服务
  //USART2_Transmit(tx_data, sizeof(tx_data), 500);
  ESP8266_SendCommand("AT+RST", "OK", 500);
  HAL_Delay(1000);
  ESP8266_SendCommand("AT+CWMODE=1", "OK", 500);
  ESP8266_SendCommand((char *)wifi_data, "OK", 5000);
  ESP8266_SendCommand("AT+CIPSTART=\"UDP\",\"192.168.1.1\",9999,9999,2", "OK", 500);
  ESP8266_SendCommand("AT+CIFSR", "OK", 500);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    // 3.1 按键按下,发送门铃信号
    if (Key_GetFlag() == 1)
    {
        ESP8266_Send_UDP("{\"data\":\"doorbell\",\"status\":\"1\"}");
    }
    
    
    // 3.2 收到数据,控制灯
    if (USART2_Receive(rx_data)) //接收到数据
    {
        if (strstr((char *)rx_data, "\"dev\":\"led\",\"status\":\"0\""))
        {
            printf("led off\n\r");
            HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
            USART2_ClearBuf();
            memset(rx_data, 0, 200);
        }
        else if (strstr((char *)rx_data, "\"dev\":\"led\",\"status\":\"1\""))
        {
            printf("led on\n\r");
            HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
            USART2_ClearBuf();
            memset(rx_data, 0, 200);
        }
    }
  }
2.实现用串口更改WIFI账户密码
// 更新WIFI连接信息
void Key_Update_WIFI(char *cmd, uint16_t time)
{
    char ch = 0;
    char len = 0;
    char ssid_buf[20] = "100ask";
    char pwd_buf[20] = "100ask100ask";
    char wifi_buf[100] = "AT+CWJAP_DEF=\"";
    // 1.设置等待时间
    HAL_Delay(time);
    
    // 2.检测按键是否按下(是否需要更新WIFI)
    if (Key_GetFlag() == 1)
    {
        // 2.1获取WIFI账号
        memset(ssid_buf, 0, 20);
        
        printf("Please enter SSID:");
        while(ch != '\r')
        {
            ch = getchar();
            if(ch > ' ')
            {
                printf("%c",ch);
                ssid_buf[len] = ch;
                len++;
            }
        }
        
        // 2.1获取WIFI密码
        ch = 0;
        len = 0;
        memset(pwd_buf, 0, 20);
        
        printf("\r\nPlease enter Password:");
        while(ch != '\r')
        {
            ch = getchar();
            if(ch > ' ')
            {
                printf("%c",ch);
                pwd_buf[len] = ch;
                len++;
            }
        }
    }
    
    // 3.组合指令
    strcat(wifi_buf, ssid_buf);
    strcat(wifi_buf, "\",\"");
    strcat(wifi_buf, pwd_buf);
    strcat(wifi_buf, "\"");
    
    memcpy(cmd, wifi_buf, strlen(wifi_buf));
}
3.优化IP地址回显
 // 优化IP地址显示
                ip_offset = strstr(buf, "STAIP"); //获取字符串偏移
                if(ip_offset)
                {
                    memcpy(buf, ip_offset+6, strlen(ip_offset)); //拷贝开始部分字符串
                    while(buf[len] != '\r') //拷贝改行数据
                    {
                        ip_buf[len] = buf[len]; //保存IP地址
                        len++;
                    }
                    printf("ESP8266 IP: %s \r\n", ip_buf); //打印IP地址
                }
                return 0;
            }
            else
            {
                timeout--;
                HAL_Delay(1);
            }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值