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

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

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

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

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

在这里插入图片描述
在这里插入图片描述

【对于穿透的理解】

顾名思义,开启穿透就是不用管wifi协议怎么实现的~
我们只用专注于在A设备和B设备间使用串口收发数据,
就好像A和B直接用导线相连~ 就好像穿透了~

+++可推出穿透模式

【ESP8266的一般使用顺序】
这里的“一般”指的是:ESP8266连接当前环境的热点,与服务器建立TCP连接,传输数据。

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
	);                        //阿里云数据上报格式~


![img](https://img-blog.csdnimg.cn/img_convert/29af2c838d06836ef540611189b19468.png)
![img](https://img-blog.csdnimg.cn/img_convert/d587919f78c7ac731942ee1ad8b4d44b.png)

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

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

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

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

1715908185164)]

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

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

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值