小米标准模组+MCU 快速上手开发(二)——之模组串口调试
小米标准模组+MCU 开发笔记之固件调试
- 背景
- 技术名词简介
- ● 小米IoT开发者平台
- ● 小米IoT 模组
- ● 固件
- ● OTA
- ● CRC32
- 固件双串口调试
- ● MHCWB6S-IB 模组资料下载
- ● MHCWB6S-IB 模组管脚图
- ● 上电调试
背景
小米标准模组+MCU的开发过程中,由于部分官方资料较为古早,踩了很多的坑。
同时发现,网络上能找到的相关开发资料较少,特此进行开发过程记录。
本次开发过程记录,以MHCWB6S-IB为例
【已发布过的开发笔记】
小米标准模组+MCU 快速上手开发(一)——之固件下载
小米标准模组+MCU 快速上手开发(二)——之模组串口调试(本章)
【MHCWB6S-IB 硬件基础信息】
模组类型:Wi-Fi蓝牙双模模组
软件开发方式:小米标准模组+MCU | 基于小米SDK标准接口的独立模块开发
通信标准:802.11b/g/n
芯片平台:ESP32-C3
RAM: 400KB 剩余20KB
FLASH: 4MB 剩余416KB
模组尺寸:1213.52.5mm
感兴趣的宝子,可以点个赞+收藏,便于后期有需要的时候能快速找到~~
技术名词简介
● 小米IoT开发者平台
小米IoT 平台是小米面向消费类智能硬件领域的开放合作平台。
开发者可以借助小米IoT 平台开放的资源、产品,进行智能化解决方案的搭建,从而以极低的成本,和较低的技术门槛,在确保产品智能化水平的情况下,快速将方案落地,从而满足不同用户对智能产品的使用需求和体验要求。
接入小米IoT 平台的产品:
- 能够借助米家APP 变相对设备进行集中管理和控制;
- 能够被具有小爱同学能力的产品,如手机、电视及音箱等控制;
- 能够和其他接入小米IoT平台的智能产品间形成智能联动,实现真正的智慧化生活。
【官方技术平台链接】
小米IoT开发者平台:https://iot.mi.com/
小米模组商城:https://iot.mi.com/moduleBrowser.html
● 小米IoT 模组
模组是一个可以集成到目标电子系统的元器件,小米智能模组集成了小米IoT 平台开放能力,并已获取了主流的认证测试,能够使嵌入式系统连接到网络,并与小米服务进行通信。
小米IoT 模组是集成了小米IoT 平台开放能力的智能模组,智能模组均已获取了主流的认证测试。
使用时,开发者在选择产品接入方案并确定固件开发方式后,需选择使用相应的模组,并根据实际需要选择获取其他开发资源开发产品的智能化功能。
截至2024年2月,模组类型主要有:BLE-Mesh模组
、Wi-Fi蓝牙双模模组
、Wi-Fi单模模组
、透传模组
共四种。
PS:
1、目前,小米IoT 模组仅支持Wi-Fi 2.4GHz,暂不支持5GHz。
2、由于其他平台的模组并没有集成小米IoT 平台开放的能力,因此,未使用小米IoT 模组的设备无法接入小米IoT 平台。
3、小米IoT 平台已停止对新型号待接入产品使用Wi-Fi 单模模组ESP-WROOM-02U 和ESP-WROOM-02D(ESP8266系列)的支持,仅处于开发中或已上线的产品,仍可以继续使用并采购Wi-Fi 单模模组。
● 固件
指写入 EROM(可擦写只读存储器)或 EEPROM(电可擦可编程只读存储器)中的程序,是担任着一个系统最基础最底层工作的软件,是控制硬件产品与小米IoT 平台通信并执行指定功能的基础。
● OTA
OTA 为 Over-the-Air 的缩写,是对设备固件进行迭代升级的方式。
● CRC32
CRC 为 Cyclic Redundancy Check 的缩写,指循环冗余检查,是一种为了保证数据的正确而采用的验错手段,当使用的是 WiFi+BLE 模组,且使用 小米标准模组+MCU 开发模式时,需要在固件尾部添加CRC,小米提供了CRC32开发工具。
固件双串口调试
为使基于小米 IoT 模组/SDK 接入(即“直连接入”)小米 IoT 平台的硬件产品能够符合小米 IoT 平台规范要求,开发者需根据小米 IoT 平台提供的产品接入方案、产品本身功能特性、团队实际的开发水平,选择合适的开发模式开发产品的固件。
● MHCWB6S-IB 模组资料下载
模组资料下载:https://iot.mi.com/moduleBrowser.html
● MHCWB6S-IB 模组管脚图
● 上电调试
如MHCWB6S-IB 模组管脚图,可看出,MHCWB6S-IB 模组共有两个串口。
- Log串口:是用来显示系统输出
- MCU命令串口:主要用来进行命令交互,如model指令下发,模组model设置等等。
● 串口工具:SecureCRT,或者 Putty 等串口调试工具
配置以ESP32-C3为例
• 端口:选择外接串口模块的串口号,如“COM3”。
• 波特率:115200。
• 数据位:8
• 奇偶校验:None
• 停止位:1
• 流控:取消选择“RTS/CTS”。
● Log串口使用方式:即模组开发板的USB接口,直接插入插槽即可交互。
● MCU命令串口使用方式:需要连接串口转接板(如CP1202 串口转 USB 板
,以下简称串口板
),
- 串口板的RXD和TXD 与 开发板的记得要交叉连接(如ESP32-C3为例,串口RXD连接板子GPIO7,串口TXD连接板子GPIO6)
如果无法通信,可以尝试对调一下再试试
- 串口GND连接板子GND
- 串口电源引脚悬空
● 无法正常通信连接,如何排查:
如果无法正常交互,需要进行以下几种尝试:
1、重复以上几个步骤,看是否有波特率等设置错误或者引脚链接错误。
2、查看CP1202串口驱动是否已经安装。
排查方法:插上串口板,在设备驱动里面可以看到 COM 口,如果设备驱动出现感叹号,需要重新安装串口驱动程序
● 正常通信连接,显示的log:
图中左边为Log记录,右边为MCU指令交互记录
注意:MCU发送指令时,一定要记得自动发送"附加位0x0DH"
【官方技术平台链接】
固件开发官方教程
https://iot.mi.com/v2/new/doc/embedded-dev/overview_fw_dev
平台配置——之固件开发指引
https://iot.mi.com/new/doc/accesses/direct-access/productcenter/develop-firmware
相关文章:

小米标准模组+MCU 快速上手开发(二)——之模组串口调试
小米标准模组MCU 开发笔记之固件调试 背景技术名词简介● 小米IoT开发者平台● 小米IoT 模组● 固件● OTA● CRC32 固件双串口调试● MHCWB6S-IB 模组资料下载● MHCWB6S-IB 模组管脚图● 上电调试 背景 小米标准模组MCU的开发过程中,由于部分官方资料较为古早&am…...

Ubuntu22.04和Windows10双系统安装
概要 本篇演示Ubuntu22.04和Windows10双系统的安装。先安装Ubuntu22.04,再安装Windows10。 一、说明 1、电脑 笔者的电脑品牌是acer(宏碁/宏基) 电脑开机按F2进入BIOS 电脑开机按F12进入Boot Manager 2、U盘启动盘 需要用到两个U盘启动盘 (1&a…...

重新安装VSCode后,按住Ctrl(or Command) 点击鼠标左键不跳转问题
重新安装VSCode后,按住Ctrl(or Command) 点击鼠标左键不跳转问题 原因:重新安装一般是因为相应编程语言的插件被删除了或还没有下载。 本次是由于Python相关的插件被删除了,因此导致Python无法跳转。 解决办法 在vs…...

QPaint绘制自定义仪表盘组件01
网上抄别人的,只是放这里自己看一下,看完就删掉 ui Dashboard.pro QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# You can make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomm…...

华为笔记本原厂系统镜像恢复安装教程方法
1.安装方法有两种,一种是用PE安装,一种是华为工厂包安装(安装完成自带F10智能还原) 若没有原装系统文件,请在这里远程恢复安装:https://pan.baidu.com/s/166gtt2okmMmuPUL1Fo3Gpg?pwdm64f 提取码:m64f …...

互联网高科技公司领导AI工业化,MatrixGo加速人工智能落地
作者:吴宁川 AI(人工智能)工业化与AI工程化正在引领人工智能的大趋势。AI工程化主要从企业CIO角度,着眼于在企业生产环境中规模化落地AI应用的工程化举措;而AI工业化则从AI供应商的角度,着眼于以规模化方式…...

Apache服务
目录 引言 一、常见的http服务程序 (一)lls (二)nginx (三)Apache (四)Tomcat 二、Apache特点 三、Apache服务的安装 (一)yum安装及配置文件 1.配置…...
【Spring连载】使用Spring Data访问 MongoDB(二)----Template API
【Spring连载】使用Spring Data访问 MongoDB(二)----Template API 一、方便的方法二、执行回调函数Execute Callbacks三、Fluent API四、异常转换五、域类型映射六、配置6.1 默认读取首选项Read Preference6.2 WriteResultChecking策略6.3 默认写安全Wri…...
手写table表格(一表头多数据)
手写table表格(一表头多数据) <template><div class"table-info"><div class"info-list"><div class"header-wrapper"><div class"columns-title" v-for"(i, k) in columns&q…...

python3 flask 实现对config.yaml文件的内容的增删改查,并重启服务
config.yaml配置文件内容 功能就是userpass下的用户名和密码做增删改查,并重启hy2服务 auth:type: userpassuserpass:csdn: csdnlisten: :443 masquerade:proxy:rewriteHost: trueurl: https://www.bing.com/type: proxy tls:cert: /root/hyst*****马赛克******er…...
ADO世界之“对象”
目录 一、Command 对象 1.Command 对象 2.语法 3.属性 4.方法 5.集合 二、Connection 对象 1.Connection 对象 2.语法 3.属性 4.方法 5.事件 6.集合 三、Error 对象 1.Error 对象 2.语法 3.属性 四、Parameter 对象 1.Field 对象 2.语法 3.属性 4.方法 …...
LeetCode59-螺旋矩阵II
参考链接:代码随想录->螺旋矩阵II 关键是学视频链接里面的编码思想,然后背下来 class Solution { public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> resvector(n,vector<int>(n,0));int sx0,s…...

MySQL 索引原理以及 SQL 优化
索引 索引:一种有序的存储结构,按照单个或者多个列的值进行排序。索引的目的:提升搜索效率。索引分类: 数据结构 B 树索引(映射的是磁盘数据)hash 索引(快速锁定内存数据)全文索引 …...

C++学习Day08之函数模板和普通函数的区别以及调用规则
目录 一、程序及输出1.1 区别1.1.1 自动类型推导,不可以发生隐式类型转换的1.1.2 普通函数 可以发生隐式类型转换 1.2 调用规则 二、分析与总结 一、程序及输出 1.1 区别 1.1.1 自动类型推导,不可以发生隐式类型转换的 1.1.2 普通函数 可以发生隐式类型…...

Kaggle实践之《Home Credit Default Risk》的逐步优化
记录下每一次的改进及其score。 1、只用训练集的特征简单处理 特征只用训练集的特征,把string型的特征全部进行one-hot转化,然后随机1:4分成测试集训练集,模型也调参直接出结果。 最终的score是训练集80.13%、验证集76.33%、线上74.28%。 …...

django rest framework 学习笔记-实战商城2
01收货地址模型类和视图定义_哔哩哔哩_bilibili 本博客借鉴至大佬的视频学习笔记 地址信息的管理:增删改查的实现 # 序列化器配置 class AddrSerializer(serializers.ModelSerializer):"""收货地址的模型序列化器"""class Meta:mo…...

WEB 3D技术 three.js 3D贺卡(4) 添加鼠标滚轮移动屏幕 改变贺卡文字功能
好,上文 WEB 3D技术 three.js 3D贺卡(3) 点光源灯光动画效果 那么 我们来做一下 鼠标滚动相机和滚动时不同文字的切换 首先 我们要设置多个场景 其实也不能完全叫场景 也可以说多个位置 反正简单说就是多个位置 展现多个场景 我们先在代码的最下面 加上一个对象数…...

爬虫在网页抓取的过程中可能会遇到哪些问题?
在网页抓取(爬虫)过程中,开发者可能会遇到多种问题,以下是一些常见问题及其解决方案: 1. IP封锁: 问题:封IP是最常见的问题,抓取的目标网站会识别并封锁频繁请求的IP地址。 解决方案…...
Eclipse中Run As On Server和Run As Java Application
一、名词释义 run java application (作为Java应用程序运行)是运行 java main方法。 run on server是启动一个web 应用服务器。 二、两者的区别 Eclipse中可以创建java project 也可以创建java web poject 。java project是可以直接在命令行运行,或者…...

【MySQL】库的操作——MySQL数据库 、库的操作、表的操作、字符集和校验规则、备份和恢复
文章目录 MySQL1. 库的操作2. 表的操作3. 字符集和校验规则3.1 查看系统默认字符集以及校验规则3.2 查看数据库支持的字符集3.3 查看数据库支持的字符集校验规则 4. 备份和恢复4.1 备份4.2 还原 MySQL 1. 库的操作 连接服务器 mysql -h 127.0.0.1 -P 3306 -u root -pmysql -u…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...

Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...