除了产品设计,M5Stack吸引我的还有它的产品布局和资料生态

除了产品设计,M5Stack吸引我的还有它的产品布局和资料生态

网站入口(中文):https://m5stack.com/zh-cn/

网站入口(英文):https://m5stack.com/

关于

M5Stack是一款基于ESP32开发板的模块化、可编程的物联网(IoT)开发平台。它具有集成的屏幕、按键、扬声器、电池以及丰富的传感器和外设模块,可以实现快速原型设计和开发各种应用。M5Stack通过简单易用的堆积式构建方式,使用户能够方便地选择和组合不同的模块以满足项目需求。同时,它支持Arduino开发环境,提供了丰富的库和示例代码,使开发者能够快速上手并进行开发。M5Stack适用于物联网、智能家居、机器人、嵌入式系统等领域的开发者和爱好者。

产品布局

现阶段M5Stack的产品覆盖面已经很广了。按照官方分类(可以从产品文档页面进入),大致包括如下几大类:

  1. 核心控制器:包括流行的CORE、STICK、ATOM和STAMP等系列,它们的主控芯片基本都是乐鑫的主流产品。
  2. 传感器和执行器:传感器(超声波、TOF、压力、颜色、热红外、IMU、指纹等等,非常全面)、显示屏执行器(包括其驱动如H桥、舵机驱动等)、通信单元(常见协议均包括在内,NB-IoT、Zigbee、MQTT、CAN、GPS等)。
  3. 功能模块:通讯、驱动、拓展、底座、FACE套件、测量、STAMP嵌入型模块。
  4. 摄像头:WIFI摄像头、AI摄像头、POE摄像头。
  5. 套装:机器人套装、应用套装。
  6. 其他配件:舵机、线材、铝型材等。

资料和文档

快捷找到产品对应资料页面的方法,就是直接从主页的开发文档菜单进入产品文档页面。通常文档页面的资料会包括产品性能参数原理图Github链接使用实例固件等。当你希望熟悉一种型号器件的设计和开发(包括驱动编写)方法时,你会发现这些资料已经非常全面且有用!我个人最喜欢的就是可以通过Github上各个模块SDK的src目录快速熟悉器件的驱动代码编写思路。其次就是在需要做类似设计的时候参考它们的原理图。

M5Stack的代码示例可操作性比较强,基本上只需要简单配置环境后就可以直接编译运行,很少出现官方示例无法使用的情况。

以我在M5Core2-ChatGLM2上的开发历程为例。这次因为需要用到舵机,因此我便选择了自带16340锂电池(700mAh)的8Servos HAT v1.18通道舵机驱动板,8通道同时工作下最大负载可达1.3A,但由于只有一节锂电池因此电压最高为4.2V。它使用IIC通讯(地址0x36),内嵌由MOS管组成的舵机电源控制电路, 支持编程动态控制电机释放/锁定。

图1 产品结构

hat_8servos_1.1_01

我们可以进入该产品的文档页面。获取原理图、通讯协议以及案例程序固件等资料。从原理图可以看出,该驱动板使用了STM32F030F4P6主控芯片(立创链接),因此是在开发前需要保证芯片已烧录了固件。

图2 原理图

hat_8servos_1.1_sch_01

我们可以简单了解下主控芯片的产品参数:

  • 内核和处理能力:基于ARM Cortex-M0内核,运行频率可达48MHz
  • 存储器:具有16KB的Flash存储器和4KB的SRAM,可用于存储代码和数据。
  • 外设接口:包括多个通用IO引脚(GPIO)用于外部设备连接、UART串口通信接口、SPI和I2C总线通信接口、定时器和计数器、模拟和数字转换器(ADC和DAC)、看门狗定时器等。
  • 低功耗特性:支持多种低功耗模式,包括待机模式、睡眠模式、停止模式等,以实现能源高效利用。
  • 工作电压和封装:工作电压范围为2.0V至3.6V,支持多种外围设备供电电压。芯片封装为20引脚TSSOP,方便焊接和布局。
  • 开发工具和软件支持:针对STM32F系列MCU,ST提供了一套完整的开发工具和软件支持,包括STM32Cube软件包、HAL库、开发板和调试器等。开发者可以使用这些工具进行原型设计、编程和调试。

图3 TSSOP-20封装

TSSOP-20

下面是我最喜欢的环节,探索SDK代码(包括示例代码)。在此之前,我们需要明白一点:底层的驱动代码(STM32程序)是写在驱动板的主控芯片里的,而我们用户应该知道的,是如何用我们的主控(例如Core2)来与驱动板的主控芯片通讯,进而间接驱动舵机运动。我们已经知道,通讯方式是IIC,那么可以猜测SDK代码的逻辑应该就是对IIC的读写进行封装,即封装为业务层逻辑(如控制舵机角度 -> 往STM32F030F4P6的寄存器写入数据)。

SDK工程代码结构如下:

M5Hat-8Servos
├── LICENSE
├── README.md
├── examples
│   ├── Hat_8Servos1.1_M5StickC
│   │   └── Hat_8Servos1.1_M5StickC.ino
│   └── Hat_8Servos1.1_M5StickCPlus
│       └── Hat_8Servos1.1_M5StickCPlus.ino
├── library.json
├── library.properties
├── protocol.jpg
└── src
    ├── Hat_8Servos.cpp
    └── Hat_8Servos.h

主要的功能实现在Hat_8Servos.cpp脚本:

  • begin(TwoWire *wire, uint8_t sda, uint8_t scl, uint8_t addr):初始化硬件。
  • writeBytes(uint8_t addr, uint8_t reg, uint8_t *buffer, uint8_t length):向指定的寄存器地址写入一定长度的数据,是后面业务代码基础,会被舵机调用。
  • readBytes(uint8_t addr, uint8_t reg, uint8_t *buffer, uint8_t length):从指定的寄存器地址读取一定长度的数据,是后面业务代码基础,会被舵机调用。
  • setServoAngle(uint8_t index, uint8_t deg):设置特定舵机的角度。
  • setAllServoAngle(uint8_t deg):设置所有舵机角度。
  • setServoPulse(uint8_t index, uint16_t pulse):设置特定舵机的脉冲宽度。
  • setAllServoPulse(uint16_t pulse):设置所有舵机的脉冲宽度。
  • getServoAngle(uint8_t index):获取特定舵机的角度值。
  • getServoPulse(uint8_t index):获取特定舵机的脉冲宽度值。
  • enableServoPower(uint8_t state):打开或关闭所有舵机的电源。

结语

M5Stack的产品也有个【缺点】,那就是价格相对其他同类型产品偏贵,这也是目前经常被吐槽的地方。我和大家一样,也希望M5Stack能出一些不那么贵的产品,或者多做活动,让更多学生和打工人能够参与到M5Stack产品的嵌入式开发和生态里来。当然,从M5Stack的产品质量和提供的资料、生态来看,如果你能充分利用这些资源,我觉得也是值得的!

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    请登录后查看评论内容