这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » STM32G070RB探测13-ESP8266(ESP01S)发送数据至连接云服

共8条 1/1 1 跳转至

STM32G070RB探测13-ESP8266(ESP01S)发送数据至连接云服务器(单片机控制)

高工
2020-12-31 00:21:44     打赏
上篇,我们已经用上位机控制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();

###展示

可以说是已经迈进了物联网的门槛了



高工
2020-12-31 14:38:22     打赏
2楼

元旦假期,停止更新三天


工程师
2020-12-31 17:41:07     打赏
3楼

学习一下


工程师
2021-01-01 13:52:53     打赏
4楼

教程写的还是非常详细的


专家
2021-01-04 09:04:19     打赏
5楼

继续,加油,受益匪浅!


工程师
2021-01-05 21:35:53     打赏
6楼

学到了


工程师
2021-01-06 23:41:20     打赏
7楼

学到了


工程师
2021-03-04 17:54:05     打赏
8楼

usart1_rx为什么会显示未定义呢·?


共8条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]