上篇,我们已经用上位机控制8266连接wifi并且发送数据到云服务器,这篇我们将用我们的G070的串口直接发送指令至8266发送数据到云服务器我们不再使用串口2发送了,我们将串口2当作打印日志的串口,用串口1控制8266,首先配置串口1,前边已经写过了,现在就简单的上图吧




首先是发送的函数
/*
串口发送函数
*str为指令
len为指令长度
*/
void ESP_SendString(unsigned char *str, unsigned short len)
{
uint8_t i;
for(i=0;i<len;i++)
{
HAL_UART_Transmit(&huart1, str++, 1, 0xFFFF);
}
}然后发送并匹配数据
/*
AT指令发送函数
*cmd为AT指令
*res为需匹配的数据
timeOut未等待时间
匹配成功返回 0
匹配失败返回 1
*/
_Bool ESP8266_SendCmd(char *cmd, char *res,uint16_t timeOut)
{
ESP_SendString((unsigned char *)cmd, strlen((const char *)cmd));//发送AT指令
while(timeOut--)//等待
{
if(usart1_rx.flag) //如果收到数据
{
if(strstr((const char *)usart1_rx.rx_buff, res) != NULL) //如果匹配到数据
{
Clear_Usart(&usart1_rx); //清空缓存
return 0;
}
else{
Clear_Usart(&usart1_rx); //清空缓存
}
}
HAL_Delay(1);
}
return 1;
}根据上篇的例程编写一个初始化过程我们这次直接用网络调试助手来做了

首先我们根据上篇所测试的,把所需发送的指令和返回的指令做个数组
//前边是发送的指令,后边是要确定的回令
char *const esp_inti_cmd[][2] = {
{"AT\r\n", "OK"},
{"ATE0\r\n", "OK"},
{"AT+CWMODE=3\r\n", "OK"},
{"AT+CWJAP=\"shr\",\"12345678\"\r\n", "GOT IP"},
{"AT+CIFSR\r\n", "OK"},
{"AT+CIPSTART=\"TCP\",\"192.168.2.4\",8080\r\n", "CONNECT"},
{"AT+CIPSEND=4\r\n", "OK"},
{"test", "SEND OK"},
{0, 0}
};然后写个函数
_Bool esp_init(void)
{
uint8_t i;
for(i=0;i<100;i++)
{
if(esp_inti_cmd[i][0])
{
//发送数组中的指令,并匹配数组中返回指令
if(ESP8266_SendCmd(esp_inti_cmd[i][0],esp_inti_cmd[i][1],5000))
{
printf("Init:%d error\r\n",i);//失败
}
else
{
printf("Init:%d ok\r\n",i);//成功
}
}
else
{
printf("ESP Init Success\r\n");
return 0;//初始化完成
}
}
return 1;
}然后我们直接可以直接把这个函数放进main函数中
Clear_Usart(&usart1_rx);//初始化串口结构体 __HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);//使能空闲中断 HAL_UART_Receive_DMA(&huart1, (uint8_t*)usart1_rx.rx_buff, RX_BUF_MAX_LEN);//设置DMA传输,串口2的数据搬运到缓存中 esp_init();
###展示

可以说是已经迈进了物联网的门槛了
我要赚赏金
