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

news2024/9/28 17:35:36

第一章开发环境:

主控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

 本文为作者独立编写

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

特别鸣谢:77

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/730697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

硬件电路设计--运算放大器(二)选型

文章目录 前言一、运算放大器的工艺决定Vos和Ib二、TI放大器的命名规律三、选型总结 前言 一、运算放大器的工艺决定Vos和Ib 运放的设计工艺对其各种指标有非常重要的影响 常常有三种基本工艺: Bipolar: 低输入阻抗,Ib1-100nA:Vos10-100uV,低至0.1uV/o…

惊艳!全网首份“架构师成长笔记”GitHub狂澜9000星

其实架构师是需要一个相对而言对架构师友善的环境。第一,架构师到底需要什么?一个架构师要成长,首先他需要信任,第二他需要授权,第三他需要时间,第四他需要资源,少一样都很难开展工作。如果一个…

NIO-Selector 网络编程

目录 一、阻塞 & 非阻塞 1、阻塞 2、非阻塞 二、selector 1、连接和读取 2、处理客户端断开 3、处理消息的边界 4、ByteBuffer大小分配 三、多线程优化 四、NIO vs BIO 1、stream vs channnel 2、IO模型 阻塞IO 非阻塞IO 多路复用 异步IO模型 一、阻塞 &am…

使用OpenCV检测两张图片的关键点并计算关键点的描述子

#include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/features2d/features2d.hpp> #include <opencv2/highgui/highgui.hpp>

每日一博 - 探索代码世界的地图 code iris

文章目录 地址特性安装 code iris如何使用 地址 https://plugins.jetbrains.com/plugin/7324-code-iris 特性 This plugin visualizes the modules, packages and classes of your project. It’s like a UML based “Google Maps” for your Source Code. Code Iris does…

zabbix代理服务器,高可用,监控java,windows,SNMP

zabbix 一&#xff1a;代理服务器1.设置 zabbix 的下载源&#xff0c;安装 zabbix-proxy2.部署数据库&#xff0c;要求 MySQL 5.7 或 Mariadb 10.5 及以上版本2.1.初始化数据库2.2.创建数据库并指定字符集2.3.创建 zabbix 数据库用户并授权 3.导入数据库信息4.修改 zabbix-prox…

前端项目请求天地图地址报错跨域;报错418

原因是因为转义字符&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 在请求回来的地址中 给他转化一下再次请求就OK了&#xff01;

oracle 使从表中随机取出一行记录数据

select * from (select rownum no, a.* from a where status_code AVAILABLE and id_type MEM and archive_flag N and rownum<1000000 ) where no >1000000-1 for update 随机取一条&#xff0c;锁住记录&#xff0c;操作完archive_flag Y不会再取。 四种解决…

【动态规划算法】第八题:931.下降路径最小和

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法\&#x1f384; 如 果 你…

PqQt实现对数据库的添加,删除,修改(完整过程演示)

在PyQt中设置的如下的窗口&#xff1a; 其中的图标是通过新建Resource File加入的 images里面的图片可以在这里面取&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1gOgBpW7s-ZWn_5aRoaYLkQ 提取码&#xff1a;jyjy 我们把这个文件取名为res.qrc 资源文件的使用可以…

基于matlab显示城市街区场景中配备立体摄像机的无人机开发视觉SLAM算法(附源码)

一、前言 视觉SLAM是计算摄像机相对于周围环境的位置和方向&#xff0c;同时映射环境的过程。开发可视化 SLAM 算法并评估其在不同条件下的性能是一项具有挑战性的任务。最大的挑战之一是生成相机传感器的地面实况&#xff0c;尤其是在户外环境中。使用仿真可以在各种场景和相…

HarmonyOS学习路之开发篇—数据管理(分布式文件服务)

分布式文件服务概述 分布式文件服务能够为用户设备中的应用程序提供多设备之间的文件共享能力&#xff0c;支持相同帐号下同一应用文件的跨设备访问&#xff0c;应用程序可以不感知文件所在的存储设备&#xff0c;能够在多个设备之间无缝获取文件。 基本概念 分布式文件 分布…

WebGIS 信息系统-Element项目实战

WebGIS 信息系统-Element项目实战 Element的安装OpenLayers的安装采用直接引用的方式配置开发环境下载Vue文件下载Element文件下载OpenLayers文件 Element的安装 在项目的根目录中&#xff0c;首先按下 Shift鼠标右键&#xff0c;在弹出的右键菜单中选择“在此处打开命令行窗口…

OpenCV 的 remap 函数改变图像中像素的位置

#include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #

Spring Boot 中的 @Scheduled 注解是什么,如何使用

Spring Boot 中的 Scheduled 注解是什么&#xff0c;如何使用 引言 Spring Boot 是一个非常流行的 Java Web 开发框架&#xff0c;它提供了很多方便的功能&#xff0c;其中就包括了 Scheduled 注解。本文将会介绍 Scheduled 注解的基本用法&#xff0c;并附上代码示例&#x…

2023 最新「阿里」Java 高级工程师面试高频题

7月份快要过去了&#xff0c;也意味着金九银十快到了&#xff0c;不知道大家有没有发现今年的面试比之前的都难&#xff1b;去年因为疫情的原因压抑住程序员跳槽的想法&#xff0c;再加上现在 IT 行业内卷越来越严重&#xff0c;这两点原因导致今年的招聘市场非常难受&#xff…

【模式识别目标检测】——基于机器视觉的无人机避障RP-YOLOv3实例

目录 引入 一、YOLOv3模型 1、实时目标检测YOLOv3简介 2、改进的实时目标检测模型 二、数据集建立&结果分析 1、数据集建立 2、模型结果分析 三、无人机避障实现 参考文献&#xff1a; 引入 目前对于障碍物的检测整体分为&#xff1a;激光、红外线、超声波、雷达、…

使用FAST方法检测特征点,然后计算这些特征点的ORB描述子,并使用暴力匹配方法找到匹配的特征点

这段代码主要做了以下几件事情: 读取两幅图像使用FAST方法找出图像中的特征点手写ORB方法计算特征点的描述子使用汉明距离(Hamming distance)进行描述子的匹配显示匹配的结果下面我们会逐行解释每一句代码: 包含头文件:这一部分包含了所有需要的库。 ComputeORB 函数:该函…

【验证码逆向专栏】某度滑块、点选、旋转验证码 v1、v2 逆向分析

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 本文章未…

SSL密钥算法检测工具-sslciphercheck-SSL/TLS Suffers ‘Bar Mitzvah Attack’漏洞

SSL密钥算法检测工具-sslciphercheck-SSL/TLS Suffers ‘Bar Mitzvah Attack’漏洞 文章目录 sslciphercheck漏洞&#xff1a;SSL/TLS Suffers ‘Bar Mitzvah Attack’漏洞漏洞描述漏洞检测修复建议 sslciphercheck 下载&#xff1a;https://github.com/woanware/woanware.git…