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