网站入口(中文):https://m5stack.com/zh-cn/
网站入口(英文):https://m5stack.com/
关于
M5Stack是一款基于ESP32开发板的模块化、可编程的物联网(IoT)开发平台。它具有集成的屏幕、按键、扬声器、电池以及丰富的传感器和外设模块,可以实现快速原型设计和开发各种应用。M5Stack通过简单易用的堆积式构建方式,使用户能够方便地选择和组合不同的模块以满足项目需求。同时,它支持Arduino开发环境,提供了丰富的库和示例代码,使开发者能够快速上手并进行开发。M5Stack适用于物联网、智能家居、机器人、嵌入式系统等领域的开发者和爱好者。
产品布局
现阶段M5Stack的产品覆盖面已经很广了。按照官方分类(可以从产品文档页面进入),大致包括如下几大类:
- 核心控制器:包括流行的CORE、STICK、ATOM和STAMP等系列,它们的主控芯片基本都是乐鑫的主流产品。
- 传感器和执行器:传感器(超声波、TOF、压力、颜色、热红外、IMU、指纹等等,非常全面)、显示屏、执行器(包括其驱动如H桥、舵机驱动等)、通信单元(常见协议均包括在内,NB-IoT、Zigbee、MQTT、CAN、GPS等)。
- 功能模块:通讯、驱动、拓展、底座、FACE套件、测量、STAMP嵌入型模块。
- 摄像头:WIFI摄像头、AI摄像头、POE摄像头。
- 套装:机器人套装、应用套装。
- 其他配件:舵机、线材、铝型材等。
资料和文档
快捷找到产品对应资料页面的方法,就是直接从主页的开发文档菜单进入产品文档页面。通常文档页面的资料会包括产品性能参数、原理图、Github链接、使用实例、固件等。当你希望熟悉一种型号器件的设计和开发(包括驱动编写)方法时,你会发现这些资料已经非常全面且有用!我个人最喜欢的就是可以通过Github上各个模块SDK的src目录快速熟悉器件的驱动代码编写思路。其次就是在需要做类似设计的时候参考它们的原理图。
M5Stack的代码示例可操作性比较强,基本上只需要简单配置环境后就可以直接编译运行,很少出现官方示例无法使用的情况。
以我在M5Core2-ChatGLM2上的开发历程为例。这次因为需要用到舵机,因此我便选择了自带16340锂电池(700mAh)的8Servos HAT v1.18通道舵机驱动板,8通道同时工作下最大负载可达1.3A,但由于只有一节锂电池因此电压最高为4.2V。它使用IIC通讯(地址0x36),内嵌由MOS管组成的舵机电源控制电路, 支持编程动态控制电机释放/锁定。
图1 产品结构
我们可以进入该产品的文档页面。获取原理图、通讯协议以及案例程序和固件等资料。从原理图可以看出,该驱动板使用了STM32F030F4P6主控芯片(立创链接),因此是在开发前需要保证芯片已烧录了固件。
图2 原理图
我们可以简单了解下主控芯片的产品参数:
- 内核和处理能力:基于
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封装
下面是我最喜欢的环节,探索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的产品质量和提供的资料、生态来看,如果你能充分利用这些资源,我觉得也是值得的!
请登录后查看评论内容