基于STM32的homeassistant(采用FreeRTOS操作系统)【第一章:设备配网、连接服务器、断网重连、断服务器重接】

 

第一章开发环境:

主控STM32F103C8T6
WIFI模块ESP01S
开发语言C
开发编译器·

KEIL

组网方式WIFI
服务器协议MQTT

本章要点:

  • ESP01S的AT指令配网以及服务器连接
  • STM32与ESP01S的usart协议通信
  • 断网重连以及断服务器重连
  • STM32向服务器端口发送对应指令

抽象理解:

1、ESP01S1的AT指令配网

        ESP01S的配网方式为AT指令集,通过识别对对应的AT指令实现对应的操作。

具体ESP01S AT指令集合参考以下文章(84条消息) STM32+ESP-01s+EMQX实现单片机MQTT协议传输数据上云(一)ESP-01s的AP-MQTT bin文件安装以及指令使用_esp01 mqtt_JASON丶LI的博客-CSDNA

AT指令总合AT 命令集 - ESP32 - — ESP-AT 用户指南 latest 文档 (espressif.com)

2、STM32与ESP01S通信

        STM32本身是不具备连接wifi的能力的,它主要是通过与ESP01S进行USART通信,将上述的AT指令集传输到ESP01S,以此来触发其实现对应的操作。

3、重连

断网重连

AT+CWRECONNCFG=3,100
//设置wifi自动重连,间隔为3s一次,持续100次

断服务器重连

AT+MQTTCONN=0,"127.0.0.1",1883,1

4、指令发送

printf("AT+RESTODE\r\n");	//模块初始化
delay_ms(5000);
printf("AT+CWMODE=1\r\n");	//设置wifi模式为Station模式
delay_ms(5000);
printf("AT+CWJAP=\"Xiaomi_2\",\"84961994\"\r\n");	//连接wifi
delay_ms(5000);
printf("AT+CWRECONNCFG=3,100\r\n");	//设置wifi自动重连,间隔为3s一次,持续100次
delay_ms(5000);
printf("AT+MQTTUSERCFG=0,1,\"ESP01SHomeAssistant\",\"admin\",\"84961994\",0,0,\"\"\r\n");	//设置用户属性
delay_ms(5000);
printf("AT+MQTTCONN=0,\"43.139.72.253\",1883,1\r\n");	//连接mqtt服务器
delay_ms(5000);
printf("AT+MQTTSUB=0,\"TOESP01S\",0\r\n");	//订阅TOESP01S
delay_ms(5000);

记住这里的指令每条之间都要delay5s左右,因为需要给予其足够的时间处理上一条指令。

代码

这里代码我就只给出主函数以及对应的输出指令函数了,应该我的代码是基于FreeRTOS系统写的,要是不太懂的话可以到我之前的博客去简单入门一下(而且printf重定义也不放在这里面了)

main.c

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "FreeRTOS.h"
#include "task.h"
#include "sys.h"
#include "Wifi.h"
/***************
Jason:
STM32F103C8T6
FreeRTOS
2023/7/6
***************/

#define START_TASK_PRIO			1
#define START_STK_SIZE			128
TaskHandle_t StartTask_Handler;
void start_task(void *pvParameters);

#define Send_TASK_PRIO			2
#define Send_STK_SIZE				50
TaskHandle_t SendTask_Handler;
void Send_task(void *pvParameters);


int main(void)
{
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
	delay_init();
	uart_init(115200);
	Wifi_Init();
	xTaskCreate((TaskFunction_t		)start_task,
							(const char*			)"start_task",
							(uint16_t					)START_STK_SIZE,
							(void*						)NULL,
							(UBaseType_t			)START_TASK_PRIO,
							(TaskHandle_t*		)&StartTask_Handler);
	vTaskStartScheduler();
}

void start_task(void *pvParameters)
{
	taskENTER_CRITICAL();
	
	xTaskCreate((TaskFunction_t		)Send_task,
							(const char*			)"Send_task",
							(uint16_t					)Send_STK_SIZE,
							(void*						)NULL,
							(UBaseType_t			)SendTask_Handler,
							(TaskHandle_t*		)&SendTask_Handler);
	vTaskDelete(StartTask_Handler);
	taskEXIT_CRITICAL();

}

void Send_task(void *pvParameters)
{
	printf("AT+MQTTPUB=0,\"FROMESP01S\",\"ESP01S-OK\",0,0");//发送对应指令
}

Wifi.c

#include "usart.h"
#include "FreeRTOS.h"
#include "task.h"
#include "Wifi.h"
#include "delay.h"

void Wifi_Init(void)
{
	printf("AT+RESTODE\r\n");	//模块初始化
	delay_ms(5000);
	printf("AT+CWMODE=1\r\n");	//设置wifi模式为Station模式
	delay_ms(5000);
	printf("AT+CWJAP=\"Xiaomi_2\",\"84961994\"\r\n");	//连接wifi
	delay_ms(5000);
	printf("AT+CWRECONNCFG=3,100\r\n");	//设置wifi自动重连,间隔为3s一次,持续100次
	delay_ms(5000);
	printf("AT+MQTTUSERCFG=0,1,\"ESP01SHomeAssistant\",\"admin\",\"84961994\",0,0,\"\"\r\n");	//设置用户属性
	delay_ms(5000);
	printf("AT+MQTTCONN=0,\"43.139.72.253\",1883,1\r\n");	//连接mqtt服务器
	delay_ms(5000);
	printf("AT+MQTTSUB=0,\"TOESP01S\",0\r\n");	//订阅TOESP01S
	delay_ms(5000);
}

如果要整个项目的工程文件,可以直接到百度网盘提取(解压密码同下)

链接:https://pan.baidu.com/s/1_nRoSaMWo67tFVc15L4oHg?pwd=1016 
提取码:1016

jason的HA学习交流裙:640172597

 本文为作者独立编写

 本BLOG上所有的原创文章未经本人许可,不得用于商业用途及传统媒体。网络媒体转载请注明出处,否则属于侵权行为。

特别鸣谢:77

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JASON丶LI

作者码力不足了,卑微的求个打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值