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); ?? ??? ??? ?}
|