STM32 物联网智能家居 (一) 方案设计STM32+ESP8266+TCP/UDP/MQTT

news/2025/1/13 12:53:55/

STM32 物联网智能家居 (一) 方案设计STM32+ESP8266+TCP/UDP/MQTT

下面我们要开展物联网智能家居的博客专栏,该专栏我们会将STM32各种外设模块I2c、Usart、Wifi、ESP8266、分层编程思想以及调试的方法融入到整个专栏中,让你从一个单片机小白,进化到一个能独立编写出具有软件框架思维的初级单片机爱好者。整个专栏我借鉴了韦东山老师的双RTOS课程中内容。下面让我们一起来学习一下。下面展示三张系统设计框图,具体内容我会在后面详细介绍,这三张图放到前面开宗明义,让大家一看就系统设计、硬件设计和软件设计的思路。

下面是我们的系统设计:

image-20250112093518200

下面是将整个系统抽象出来的硬件框图。image-20250111163512488

软件设计思路:

image-20250112100047593

一、怎样高效入门物联网?

首先我们要明白什么是物联网,物联网(IoT,Internet of Things)是一个庞大且复杂的系统,涉及多个领域的知识。从整体架构来看,物联网的构建可以分为三个主要层面:设备层、网络层和应用层。对于初学者而言,理解这些层次的结构以及每一层的功能和技术,对于高效入门物联网至关重要。接下来,我们将逐层解析物联网的体系结构,并帮助你理解如何掌握这些关键知识。

物联网概念

1. 设备层:硬件设备与传感器的世界

物联网的设备层是物理世界和数字世界的连接点,包含了所有的硬件组件。这个层面主要包括两大类设备:传感器执行器

  • 传感器:这些设备负责采集环境中的各种信息,如温度、湿度、气压、光照强度等。例如,一款温度传感器可以实时测量并传送温度数据,供后续分析处理。
  • 执行器:这些设备则根据接收到的命令,执行具体的物理动作。如继电器可以控制电路的开关,马达可以实现物体的移动。

除此之外,物联网设备还涉及到一些传统嵌入式系统的开发工作。你需要了解如何选择合适的硬件平台,如何编写固件来控制这些设备的工作,同时还要掌握物联网设备的通信技术。常见的通信方式包括:

  • Wi-Fi:适用于家庭或办公室环境,带宽大,适合数据传输频繁的应用。
  • 蓝牙(Bluetooth):适合短距离设备间的低功耗通信,广泛应用于个人设备或智能家居中。
  • 蜂窝网络(如4G/5G):适用于远距离的设备,通常用于车联网、远程监控等场景。

掌握这些通信技术的特点,可以帮助你在实践中做出合理的选择,确保物联网设备之间的有效协作。

2. 网络层:设备与平台的桥梁

物联网的网络层,主要负责设备和物联网平台之间的通信。与传统互联网一样,物联网的通信也是基于TCP/IP协议,但在此基础上,还涉及到一些专门针对物联网场景优化的网络协议。

常见的协议有:

  • HTTP:一种简单的请求-响应协议,通常用于客户端与服务器之间的通信,适合大部分普通应用场景。
  • MQTT:一种轻量级的消息发布/订阅协议,特别适用于低带宽、高延迟的网络环境,广泛用于远程监控和控制设备。
  • AMQP:一种面向消息队列的协议,适合需要可靠消息传递的场景,通常用于工业自动化和金融等高要求的领域。

了解这些协议的工作原理以及它们的优缺点,将有助于你在设计物联网系统时,根据具体需求选择合适的协议。比如,对于数据量小但需要实时性的应用,MQTT可能更合适;而对于需要保证消息可靠性的应用,AMQP则是更好的选择。

3. 应用层:实现业务逻辑与数据处理

物联网的应用层主要负责实现具体的业务逻辑和数据分析。在这一层,你不仅要处理常见的互联网后台开发问题,如服务器架构、数据库选择、消息队列管理等,还需要面对物联网特有的数据处理挑战,尤其是海量数据的存储和处理

物联网设备会产生大量的数据,如何高效地存储、处理和分析这些数据,是设计系统时需要特别注意的问题。

  • 数据存储:由于物联网数据通常是高频次、非结构化或半结构化的,传统的关系型数据库可能并不适用。此时,NoSQL数据库(如MongoDB、Cassandra)和时序数据库(如InfluxDB)成为更合适的选择。时序数据库特别适合存储时间序列数据,如温度、湿度变化等。
  • 数据处理:物联网生成的数据量庞大,往往需要使用分布式大数据处理框架来进行高效计算。像Apache SparkApache Flink这样的框架,支持大规模的数据处理,可以选择批处理(适用于较为静态的数据分析)和流处理(适用于实时数据处理)两种方式。你需要根据具体应用场景来选择合适的处理方式。
  • 数据分析:通过数据分析,我们可以从物联网中提取出有价值的信息,甚至通过机器学习和**人工智能(AI)**进行智能决策。比如,通过传感器数据预测设备故障,或通过分析环境数据优化能源使用效率。

在应用层的设计中,除了技术层面的挑战,还需要考虑如何将业务需求与技术实现有效结合,确保系统不仅能高效运作,还能满足实际的应用需求。

4. 数据隐私与安全:贯穿始终的关键

在整个物联网系统的设计与实施过程中,数据隐私和系统安全始终是不可忽视的问题。随着数据量的激增,如何保护用户隐私和确保系统安全变得尤为重要。数据的存储、传输和处理每个环节都可能成为攻击的目标。

  • 加密技术:确保数据在传输过程中的安全性,避免数据泄露。
  • 认证与授权:确保只有经过授权的用户和设备能够访问物联网系统。
  • 安全协议:采用安全的网络协议(如TLS/SSL)保障网络通信的安全。

数据隐私和安全不仅仅是技术问题,它还涉及到法律法规的合规性,因此,在设计物联网系统时,必须始终把安全放在首位。

掌握全局,循序渐进

物联网的体系结构涵盖了从硬件设备、通信协议到数据处理和分析的方方面面。对于初学者而言,掌握这些知识需要时间,但通过分层次学习和实践,你可以逐渐理解物联网的整体框架。设备层、网络层和应用层这三个层面是物联网系统的核心组成部分,每一层都需要深入理解其工作原理、技术特点和应用场景。除了技术层面,数据安全与隐私保护也是构建成功物联网系统不可忽视的环节。

随着你对这些知识的掌握和实践经验的积累,你将能够设计和实现更高效、智能的物联网系统,并在这一新兴领域中找到属于自己的发展机会。

二、方案设计

下面我们展开的物联网智能家居项目,设备层、网络层和应用层的这些内容我们都会涉及到,下面让我们来介绍整个项目的方案。

整个项目我们会分为系统设计、硬件设计和软件设计。

2.1 系统设计

系统设计如下图所示,从宏观上设计了一下智能家居的使用场景:

  1. 中控屏启动后,自动连接家里的路由器,在中控屏上显示出路由器的IP地址;

  2. 用户用手机上启动微信小程序,输入中控屏显示的IP,连接到家里的中控屏上;

  3. 用户在微信小程序里,点击图标控制家中的灯、风扇、空调、窗帘、除湿器等,并读取屋内温湿度;

  4. 并且中控屏每隔60s向微信小程序传输一次家中温度和湿度值进行更新;

image-20250112093518200

2.2 硬件设计

为了方便我们的学习,我将上面宏观上的系统设计需求,转化为低成本的Demo示例,将系统设计路由器的右半部分抽象成开发板上的Demo,并通过开发板将上面的所有功能汇总到一起,方便大家开发和学习,具体硬件设计如下图所示:

image-20250111163512488

这里面面我们会学习用I2c通信控制OLED屏幕显示字符,其中包括时间,温度,湿度,路由器Ip地址,控制信息等;用Usart控制Wifi模块ESP8266和路由器、微信小程序进行信息交互;通过GPIO控制/读取温湿度传感器、风扇、LED等外设。除此之外,我们通过ST-LINK 或USB串口解决代码开发过程中遇到的问题等等。我相信这个物联网智能家居项目会让大家迈入单片机开发的大门的。

开发板大家可以跟着我用的这个韦东山老师的STM32F103ZET6开发板,也可以自己用其他开发板进行开发,这些外设比较简单,也不涉及什么硬件设计,用现成的就可以。下面我将韦东山老师的开发板链接放到下面:STM32F103-PRO全套开发板

image-20250112095756188

2.3 软件设计

软件设计可以说是嵌入式领域中的精髓,大家的硬件可以是一样的,但是最终呈现出的效果千差万别,主要是软件编写的逻辑和软件设计方法,好的编程思想和抽象设计,可以极大的设备的扩展,提高软件的兼容性,本项目软件设计的重点:

  • 设计出优秀的程序框架:容易扩展、容易维护
  • 教会大家:
    • 把项目拆分为各个子系统
    • 使用面向对象的思想,把子系统抽象为结构体
    • 编写函数时,封装细节:看函数名就知道怎么用,不需要深入函数内部看它的实现

下面我将介绍本项目的软件设计思路,如下图所示:

image-20250112100047593

在本项目中,可以分为6个子系统:

  1. 设备子系统:比如实现LED控制、风扇控制
  2. 显示子系统:在OLED上显示信息
  3. 输入子系统:可以接收按键数据、网络数据
  4. 网络子系统:负责网络连接、数据收发
  5. 字体子系统:获得字符的字库
  6. 业务子系统:起综合作用,根据输入值(网络数据),控制设备

上面软件设计的思路来自《代码大全》中的第五章,其中提到把程序设计分为以下几个层次:

  • 第1层:软件系统,就是整个系统、整个程序
  • 第2层:分解为子系统或包。比如我们可以拆分为:输入子系统、显示子系统、业务系统
  • 第3层:分解为类。在C语言里没有类,可以使用结构体来描述子系统。
  • 第4层:分解成子程序:实现那些结构体(结构体中有函数指针)。

为了使软件能够兼容更多的芯片、更多的操作系统,进行软硬件解耦,我们将软件进行了分层设计。

整个软件分为下面几层内容,Microcontroller、HAL、CAL、KAL和APPL层。

APPL层是最上层的应用层,与硬件和操作系统无关,专注于应用层的逻辑。KAL层是内核抽象层(Kernel Abstraction Layer),这一层可以将整个软件分为不同的操作系统平台,通过简单的切换,可以让系统跑在裸机、FreeRTOS或者RT-Thread上面。CAL层是芯片抽象层(Chip Abstraction Layer)这一层来区分不同的芯片,来解决移植到不同的问题。HAL层(Hardware Abstraction Layer)是硬件抽象层,是决定是调用Hal库、寄存器还是库函数来操作底层硬件。以上就是为本项目设计的分层架构的逻辑,借由此软件框架做到容易扩展、容易维护的目的。

image-20250112111213095

三、专栏更新内容

以上就是我们STM32 物联网智能家居项目的方案设计,从系统设计、硬件设计以及软件设计三个方面讲解了我们整个项目的设计思路、流程和方法。下面我们将安装以下六个系统的内容,进行每一个系统的讲解和介绍,逐一搭建起来我们的物联网智能家居项目,最终完成项目的交付。

  1. 设备子系统:比如实现LED控制、风扇控制
  2. 显示子系统:在OLED上显示信息
  3. 输入子系统:可以接收按键数据、网络数据
  4. 网络子系统:负责网络连接、数据收发
  5. 字体子系统:获得字符的字库
  6. 业务子系统:起综合作用,根据输入值(网络数据),控制设备

让我们敬请期待后面的内容,请大家多多支持,关注公众号“艾格北峰汽车电子”。

下面是所有文章合集:

STM32 BootLoader 刷新项目 (一) STM32CubeMX UART串口通信工程搭建

STM32 BootLoader 刷新项目 (二) 方案介绍

STM32 BootLoader 刷新项目 (三) 程序框架搭建及刷新演示

STM32 BootLoader 刷新项目 (四) 通信协议

STM32 BootLoader 刷新项目 (五) 获取软件版本号-命令0x51

STM32 BootLoader 刷新项目 (六) 获取帮助-命令0x52

STM32 BootLoader 刷新项目 (七) 获取芯片ID-0x53

STM32 BootLoader 刷新项目 (八) 读取Flash保护ROP-0x54

STM32 BootLoader 刷新项目 (九) 跳转指定地址-命令0x55

STM32 BootLoader 刷新项目 (十) Flash擦除-命令0x56-CSDN博客)

STM32 BootLoader 刷新项目 (十一) Flash写操作-命令0x57

STM32 BootLoader 刷新项目 (十二) Option Byte之FLASH_OPTCR-命令0x58

STM32 BootLoader 刷新项目 (十三) Python上位机介绍

STM32 BootLoader 刷新项目 (十四) 所有源代码获取


http://www.ppmy.cn/news/1562810.html

相关文章

浅聊MySQL中的LBCC和MVCC

MySQL中的LBCC(Lock-Based Concurrency Control,基于锁的并发控制)和MVCC(Multi-Version Concurrency Control,多版本并发控制)是两种不同的并发控制机制,它们在实现方式、作用以及应用场景上存…

MySQL教程之:获取有关数据库和表的信息

如果您忘记了数据库或表的名称,或者给定表的结构是什么(例如,它的列叫什么)怎么办?MySQL通过几个语句来解决这个问题,这些语句提供了有关它支持的数据库和表的信息。 您之前看过SHOW DATABASES&#xff0c…

隐私计算,构建安全的未来数据空间

大数据产业创新服务媒体 ——聚焦数据 改变商业 在医疗领域,不同医院之间需要共享患者数据,以提供更全面准确的诊断和治疗方案。 传统的数据处理方式通常是数据经过转换隐藏重要数据后再进行分析,虽然可以保护数据隐私,但在数据源…

Guilite字库工具

目录 前言 使用方法 离线字库解析 工具链接 前言 最近通过Qt写了一个Guilite字库工具,相比原始工具,主要有以下几个优点: (1)支持同时生成多套字库 (2)支持离线字库生成 (3&a…

Hive SQL必刷练习题:连续问题 间断连续

问题描述: 1) 连续问题:找出连续三天(或者连续几天的啥啥啥)。 2) 间断连续:统计各用户连续登录最长天数,间断一天也算连续,比如1、3、4、6也算登陆了6天 问题分析&am…

(长期更新)《零基础入门 ArcGIS(ArcScene) 》实验七----城市三维建模与分析(超超超详细!!!)

城市三维建模与分析 三维城市模型已经成为一种非常普遍的地理空间数据资源,成为城市的必需品,对城市能化管理至关重要。语义信息丰富的三维城市模型可以有效实现不同领域数据与IS相信息的高层次集成及互操作,从而在城市规划、环境模拟、应急响应和辅助决策等众多领域公挥作用、…

使用Cilium/eBPF实现大规模云原生网络和安全

大家读完觉得有帮助记得关注和点赞!!! 目录 抽象 1 Trip.com 云基础设施 1.1 分层架构 1.2 更多细节 2 纤毛在 Trip.com 2.1 推出时间表 2.2 自定义 2.3 优化和调整 2.3.1 解耦安装 2.3.2 避免重试/重启风暴 2.3.3 稳定性优先 2…

CentOS 7.9 通过 yum 安装 Docker

文章目录 前言一、删除已安装的 Docker二、网络设置三、设置 yum 源,并安装依赖四、设置 Docker 仓库五、安装及使用 Docker六、镜像仓库总结 前言 CentOS 7.9 过了维护期,Docker 官方文档没有了相关的安装文档。记录一下,备用! …