MQTT常见连接方式MQTT(Message Queuing Telemetry Transport)支持多种不同的连接方式,主要体现在传输层协议和安全特性的选择上。下面分别介绍常见的几种连接方式及其区别和适用场景。
明文TCP连接(tcp)
URI格式:mqtt://<broker-address>:1883
端口:1883(默认)
安全性:无加密,明文传输
客户端认证:常为用户名/密码(可选)
适用场景:
内网环境/本地测试
对安全性要求不高的应用
缺点:
数据易被窃听/篡改,不建议在公网环境使用
备注:
AWS IoT Core等云服务不允许明文MQTT
单向TLS加密(ssl/tls)
URI格式:ssl://<broker-address>:8883
端口:8883(默认)
安全性:TLS加密,客户端校验服务端证书CA根证书
客户端认证:通常为用户名/密码,也可仅凭CA根证书
适用场景:
需要加密传输但不强制客户端证书认证的应用
缺点:
客户端未被服务端验证,安全性一般
备注: ...
物联网
未读TLS介绍什么是TLS?TLS(Transport Layer Security,传输层安全协议) 是一种广泛应用于网络通信中的加密协议。它的主要作用是保障数据在网络上传输时的机密性、完整性和身份认证。
TLS的主要作用为什么需要TLS?
为了保障数据传输安全,防止中间人攻击、数据泄露和伪造。
TLS作用:
加密通信:防止数据被窃听,保障内容隐私。
数据完整性:防止数据在传输过程中被篡改。
身份认证:确认通信双方的身份(如服务器/客户端证书)。
TLS的应用场景
安全MQTT:如mqtts://或ssl://,用于物联网设备与云服务器通信。
HTTPS:浏览器访问网站时的安全通信(https://)。
安全邮件:如SMTPS、IMAPS等。
VPN、SSH等其它安全协议的基础。
TLS的工作原理简述
握手阶段
客户端与服务器协商加密算法、交换证书等。
完成密钥协商,生成会话密钥。
数据传输阶段
双方用协商好的密钥加密和校验数据。
关闭阶段
安全地断开连接。
TLS与SSL的关系
SSL(Secure Sockets Layer) 是TL ...
以下所有内容在文档中均有描述,建议观看文档学习:
AWS IoT 能做什么 - AWS IoT Core
什么是 AWS?AWS 是 Amazon(亚马逊) 提供的全球领先的云计算平台,涵盖了计算、存储、数据库、网络、安全等众多云服务,帮助开发者构建和部署高效的云端解决方案。
AWS 提供了强大的 IoT 服务生态,支持从设备连接到数据分析的全流程开发。通过学习和动手实践,你可以快速掌握这些工具并构建实际物联网项目。
IAMIAM 作用IAM(Identity and Access Management)是 AWS(亚马逊云)中的身份与访问管理服务。它是 AWS 安全体系的核心组件之一,主要目的就是让你可以安全地控制谁可以访问你的 AWS 资源,以及可以访问什么资源、能做哪些操作。
身份管理:为人(用户)、系统(服务)、应用等分配身份(Identity),每个身份可以有唯一的认证信息(如用户名、密码、访问密钥等)。
权限控制:通过权限策略(Policy)精细控制每个身份可以访问哪些 AWS 服务和资源,以及能做什么操作(如读、写、删除等)。
IAM主要概念用户组(Group)
用 ...
嵌入式硬件
未读PCB介绍简介PCB(Printed Circuit Board,印刷电路板) 是电子设备中的核心部件之一,用于支撑和连接电子元件。它通常由非导电材料(如玻璃纤维或塑料)制成,表面覆盖有导电线路,这些线路通过铜层与其他组件相连。PCB为电子元件提供了物理支撑,同时通过电路连接它们,确保电流能按照设计的路径流动。
PCB的基本组成
基板(Substrate):通常由绝缘材料如FR4(玻璃纤维和环氧树脂)构成,提供PCB的结构支持。
铜层(Copper Layer):电路板上表面覆盖的铜层,形成电路路径。它可以是单面、双面或多层的,具体取决于PCB的设计需求。
焊盘(Pads):用于焊接电子元件引脚的金属区域。
阻焊层(Soldermask):通常为绿色或其他颜色的涂层,覆盖在铜线路的表面,防止短路和避免焊接时的错误。
丝网层(Silkscreen):用于在PCB表面打印标记、文字或符号,帮助安装和维护。
PCB的分类
单面PCB:只有一层导电铜箔,适用于简单的电子产品。
双面PCB:具有两面铜箔层,可以更紧凑地布局,常用于复杂的电路。
多层PCB:有多层导电铜箔和绝缘层,适用于高密度、 ...
RSARSA介绍什么是RSARSA是一种非对称加密算法,加密和解密使用的是使用的是一对密钥:公钥和私钥,主要用于数据加密/解密、数字签名/验证,密钥交换。
密钥长度RSA密钥长度有1024位(128Byte)、2048位(256Byte)、3072位(384Byte)、4096位(512Byte)。
密钥越长,运算越慢。
RSA数学基础RSA数学基础:
基于大数质因数分解困难问题。即:如果选取两个非常大的素数相乘,得到的结果很难被分解回原来的两个素数。
密钥生成过程:随机选取两个大素数,计算它们的乘积和一些相关参数,得到公钥和私钥。
RSA几种使用方式1.数据加密/解密
加密:用公钥加密数据,只有持有私钥的人能解密。
解密:只能使用私钥才能解密别人用公钥加密的数据
示例:
Alice公布自己的公钥,Bob用Alice的公钥加密消息,然后发送给Alice,只有Alice用自己的私钥解密才能看到数据内容
2.数字签名/验签
签名:用私钥对数据生成签名,证明数据确实由私钥拥有者发出
验证:任何人用公钥验证签名,确保数据未被篡改
示例:
...
方案介绍该方案是我在北京联盛德微电子实习的时候,对于水表量产项目的防拷贝程序的加密方案,确保即使烧写文件被获取,也无法在其他芯片上直接运行。保证程序的安全性。
属于MCU SecureBoot方案
流程介绍主要分为三端:
1.批量烧录工具(PC Tool):负责固件烧录,证书申请,证书烧录等
2.Server端:部署在服务器中,主要负责处理用户登录、证书申请请求。包含RSA公钥和私钥,AES密钥等
3.MCU端:从flash获取证书,做启动校验
在产线批量烧录端,会通过批量烧录工具先烧录AT RAM固件,然后向MCU端发送AT命令,MCU返回flash unique id和wifi mac地址
批量烧录工具通过TCP协议将flash unique id和wifi mac发送给Server端,Server端对内容进行构造后,进行哈希(SHA256), Server使用生成的RSA私钥对内容进行签名,得到证书。然后对证书使用AES密钥进行加密,添加CRC32校验后,将加密证书通过TCP协议返回给批量烧录工具。 并将证书申请日志录入数据库(包括username、ip、证书内容等)
批量烧录工 ...
CRC什么是CRC? CRC(循环冗余校验)是一种常用的数据校验算法,主要用于检测数据在传输或存储过程中是否发生了错误。它通过对数据内容进行特定数学处理(多项式除法),生成一个短小的校验码(CRC码),附加在数据后面一起发送。
CRC在数据传输中的作用检测数据错误
数据在传输过程中(如串口、网络、存储介质等)可能由于噪声、干扰、硬件故障等原因发生比特翻转、丢失或插入。
CRC能检测绝大多数常见的传输错误,尤其擅长发现突发错误(连续的多个比特发生错误)。
提高数据可靠性
发送方:对原始数据使用CRC算法生成校验码,将其和数据一起发送。
接收方:收到数据后,用相同算法计算CRC码,与接收到的CRC码对比。
如果一致,说明数据很可能没有出错;如果不一致,说明数据被破坏,接收方可以丢弃数据或请求重发。
应用场景 各类串口通信(如UART、CAN、Modbus等)、网络协议(如以太网帧)以及闪存、硬盘等存储设备都广泛使用CRC作为数据完整性校验手段。
以及我们的固件升级与启动安全也会使用CRC校验
CRC原理与实现百度
嵌入式UI
未读看文档使用
docs.nxp.com/bundle/GUIGUIDERUG_1.9.1/page/topics/welcome.html
代码结构使用GUI Guider生成的代码目录如下:接下来对其进行介绍
Custom/自定义代码和LVGL扩展配置(custom.c/h为自定义事件实现,lv_conf_ext.h为扩展配置,custom.mk为Makefile片段)。
Generated/
GUI Guider自动生成的所有核心代码和资源,包括:
字体文件夹(guider_customer_fonts/、guider_fonts/)
图片资源文件夹(images/)
事件处理(events_init.c/h)
界面创建和入口(gui_guider.c/h)
主界面/布局(setup_scr_screen.c)
控件初始化(widgets_init.c/h)
generated.mk为Makefile片段
LV ...
嵌入式UI
未读前言我们在使用LVGL进行UI设计的时候,每次都需要烧录到MCU上才能看到结果,这样效率太低下了,所以这里使用VScode实现在PC上模拟LVGL
以下是基于LVGL v9.x在windows下实现的vscode搭建模拟器,老版本的模拟方法略有却别,具体请百度
准备工作mingw64下载由于官网更新后,导致官网直接下载的都是源码,现在下载需要前往github获取编译后的bin
github:Releases · niXman/mingw-builds-binaries
下载这个即可
CMake下载CMake官网:Download CMake
SDL2下载 SDL2,全称为Simple DirectMedia Layer,是一个跨平台的多媒体开发库。SDL2提供了一系列函数,用于访问音频、键盘、鼠标、游戏杆和图形硬件,允许开发者编写一套代码即可在不同平台上运行。它的主要应用之一是游戏开发,许多知名游戏都是基于SDL2构建的。此外,SDL2也用于游戏开发工具、模拟器、样本演示和多媒体应用等。
在这里的LVGL就是使用了SDL2模拟一个显示触摸屏操作。
SDL2 github: ...
嵌入式UI
未读SquareLine的使用软件介绍SequareLine Studio 是由 LVGL 官方推出的嵌入式 UI 设计工具,专注于为嵌入式设备(如 MCU、Linux 网关、智能手表等)提供高效的可视化界面开发方案。
支持 C 语言和 Python 语言。
对于个人用户,是免费的,不过限制了单个工程组件使用个数和页面个数(不够就直接多创几个工程)
官方例程使用SquareLine官方有一些例程Example,我们可以打开学习他是怎么进行绘制的,以便于我们自己进行绘制
深入学习可以参考官方Example+LVGL官方文档+AI的方式学习
工程创建选择Create 选择LVGL版本,分辨率,像素格式,主题等
进去后主页面如下:
基础控件使用如何添加控件左侧是对应的控件,使用时直接拖动到页面上即可
右边可以就可以对控件的名称、属性、样式进行修改了
如何使用自定义字体首先下载一个你喜欢的字体.ttf/.otf格式的,将文件放到项目下的assets文件夹,然后就可以访问该素材了
然后到我们创建的项目中,右边选择Font:
Fontname:通常以字体+大小形式规范字体命名
Selec ...