STM32cubeMX【Hal库】实现wifi无线通讯【利用ESP8266模块】—

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

如果你需要这些资料,可以戳这里获取

AT+CWMODE=1:设置工作模式(STA模式)
AT+RST:模块重启(生效工作模式)
AT+CWJAP=“111”,“11111111”:连接当前环境的WIFI热点(热点名,密码)
AT+CIPMUX=0:设置单路连接模式
AT+CIPSTART=“TCP”,“xxx.xxx.xxx.xxx”,xxxx:建立TCP连接
AT+CIPMODE=1:开启透传模式
AT+CIPSEND:透传模式下,传输数据
+++:退出透传模式

1.3mqtt协议

普通的socket连接对服务器的消耗太大,所以出现了类似MQTT这种轻量级、低消耗的协议来维护长连接。维护长连接需要采用心跳机制…

这篇博客写的比较简练——感谢博主.

2.云平台部分【阿里云】

我之前博客的连接.

tips:点灯的产品流转规则~没必要用json格式,二进制就行。
所谓的产品流转规则就是数据的流转规则,而数据又依托存放在topic中。
故:产品流转规则就是设计A设备使用的topic数据传送到B设备使用的topic.

3.上位机部分【安卓app】

我之前的android studio 开发app博客专题合集——mqtt.jar包.
在这里插入图片描述

4.下位机部分【stm32+AT指令】

库移植操作:
在这里插入图片描述

4.1mqtt协议库

在这里插入图片描述
这个库有6个函数,作用如函数名所示

4.2esp8266at指令库

在这里插入图片描述
这个库有12个函数,对at指令做了封装,直接调用相应函数(不用死记at指令)

4.3main.c

4.3.1 宏定义
在这里插入图片描述
4.3.2 main函数
在这里插入图片描述在这里插入图片描述

4.3.3 自定义函数

USART1接收中断代码

/\*\*\*\*\*\* USART1接收中断代码 \*\*\*\*\*/

// ES8266驱动串口接收中断处理函数
void HAL\_UART\_RxCpltCallback(UART_HandleTypeDef \*huart)
{
	if(huart->Instance == USART1)	// 判断是由哪个串口触发的中断
	{
		//将接收到的数据放入接收usart1接收数组
		usart1_rxbuf[usart1_rxcounter] = usart1_rxone[0];
		usart1_rxcounter++;	//接收数量+1
		
		//重新使能串口1接收中断
		
		/\*\*【易错~~接受回调函数中别忘再次使能】\*/
		HAL\_UART\_Receive\_IT(&huart1,usart1_rxone,1);		
	}
}

进入错误模式代码

/\*\*\*\*\*\*\*\*\*\*\*\* 进入错误模式代码 \*\*\*\*\*\*\*\*\*\*\*\*/

//进入错误模式等待手动重启
void Enter\_ErrorMode(uint8_t mode)
{
	HAL\_GPIO\_WritePin(LED_G_GPIO_Port,LED_G_Pin,GPIO_PIN_SET);
	while(1)
	{
		switch(mode){
			case 0:user\_main\_error("ESP8266初始化失败!\r\n");break;
			case 1:user\_main\_error("ESP8266连接热点失败!\r\n");break;
			case 2:user\_main\_error("ESP8266连接阿里云服务器失败!\r\n");break;
			case 3:user\_main\_error("ESP8266阿里云MQTT登陆失败!\r\n");break;
			case 4:user\_main\_error("ESP8266阿里云MQTT订阅主题失败!\r\n");break;
			default:user\_main\_info("Nothing\r\n");break;
		}
		user\_main\_info("请重启开发板");
		//HAL\_GPIO\_TogglePin(LED\_R\_GPIO\_Port,LED\_R\_Pin);
		HAL\_Delay(200);
	}
}

初始化函数

/\*\*\*\*\*\*\*\*\*\*\*\*\* STM32 MQTT业务代码 \*\*\*\*\*\*\*\*\*\*/

//MQTT初始化函数
void ES8266\_MQTT\_Init(void)
{
	uint8_t status=0;

	//初始化|检查esp8266好坏
	if(ESP8266\_Init())
	{
		user\_main\_info("ESP8266初始化成功!\r\n");
		status++;
	}
	else Enter\_ErrorMode(0);

	//连接手机热点|家庭wifi
	if(status==1)
	{
		if(ESP8266\_ConnectAP(WIFI_NAME,WIFI_PASSWD))
		{
			user\_main\_info("ESP8266连接热点成功!\r\n");
			status++;
		}
		else Enter\_ErrorMode(1);
	}
	
	//连接阿里云IOT服务器
	if(status==2)
	{
		if(ESP8266\_ConnectServer("TCP",MQTT_BROKERADDRESS,1883)!=0)
		{
			user\_main\_info("ESP8266连接阿里云服务器成功!\r\n");
			status++;
		}
		else Enter\_ErrorMode(2);
	}
	
	//登陆MQTT
	if(status==3)
	{
		if(MQTT\_Connect(MQTT_CLIENTID, MQTT_USARNAME, MQTT_PASSWD) != 0)
		{
			user\_main\_info("ESP8266阿里云MQTT登陆成功!\r\n");
			status++;
		}
		else Enter\_ErrorMode(3);
	}

	//订阅主题
	if(status==4)
	{
		if(MQTT\_SubscribeTopic(MQTT_SUBSCRIBE_TOPIC,0,1) != 0)
		{
			user\_main\_info("ESP8266阿里云MQTT订阅主题成功!\r\n");
		}
		else Enter\_ErrorMode(4);
	}
}


单片机状态上报——————依据项目修改

/\*\*\*\*\*\*\* 单片机状态上报 \*\*\*\*\*\*\*\*\*\*\*\*\*/

//单片机状态上报
void STM32DHT11\_StatusReport(void)
{
	//获取温湿度信息
	uint8\_t temperature;
	uint8\_t humidity;
	uint8\_t get_times;
	
	// 获取温湿度信息并用串口打印,获取十次,直到成功跳出
	for(get_times=0;get_times<10;get_times++)
	{
		if(!dht11Read(&temperature, &humidity))//Read DHT11 Value
		{
			user\_main\_info("temperature=%d,humidity=%d \n",temperature,humidity);
			break;
		}
	}
	
	//上报一次数据
	uint8\_t led_r_status = HAL\_GPIO\_ReadPin(LED_R_GPIO_Port,LED_R_Pin) ? 0:1;
	uint8\_t led_g_status = HAL\_GPIO\_ReadPin(LED_G_GPIO_Port,LED_G_Pin) ? 0:1;
	uint8\_t led_b_status = HAL\_GPIO\_ReadPin(LED_B_GPIO_Port,LED_B_Pin) ? 0:1;
	sprintf(mqtt_message,
	"{\"method\":\"thing.service.property.set\",\"id\":\"181454577\",\"params\":{\
 \"DHT11\_Temperature\":%.1f,\
 \"DHT11\_Humidity\":%.1f,\
 \"Switch\_LEDR\":%d,\
 \"Switch\_LEDG\":%d,\
 \"Switch\_LEDB\":%d\
 },\"version\":\"1.0.0\"}",
	(float)temperature,
	(float)humidity,
	led_r_status,
	led_g_status,
	led_b_status
	);                        //阿里云数据上报格式~

	MQTT\_PublishData(MQTT_PUBLISH_TOPIC,mqtt_message,0);   //
}

字符串处理函数*2

/\*\*\*\*\*\*\*\*\*\*\* 自定义函数~方便处理str \*\*\*\*\*\*\*/

char temp_str[30];    // 临时子串

/\*\*从母串中获取与子串长度相等的临时子串\*/

void ReadStrUnit(char \* str,char \*temp_str,int idx,int len)  // 从母串中获取与子串长度相等的临时子串
{


![img](https://img-blog.csdnimg.cn/img_convert/1654d0eaa1e71d9ed381e255699f3c4c.png)
![img](https://img-blog.csdnimg.cn/img_convert/002772528d37dfa99353d53031e18fa1.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新**

**需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618679757)**

715908219128)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新**

**需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618679757)**

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值