基于阿里云HaaS的ESP32声音监测报警系统设计


前言

最近 MicroPython 火热,恰逢有个项目,于是上手初体验了一下MicroPython,本文是基于阿里云的HaaS开发框架实现的一个应用实践,总之如果有嵌入式开发经验的,HaaS上手非常容易,10分钟入门轻轻松松~

HaaS 是什么?

   Python在PC端取得的巨大成功是众所周知的。IoT场景如何借力Python生态,如何通过Python这种简单、高效的脚本化语言赋能硬件资源受限的IoT设备研发?这两个问题被IoT行业的头部玩家持续关注,但始终都未能找到一个完美的解决方案。

   2014年MicroPython诞生,MicroPython是Python3编程语言的精简高效实现,包含了Python基础语法特性和部分最常用的Python库,可以满足IoT应用开发的基本需求。MicroPython最低内存占用只有16K,具备了广泛应用在硬件资源受限的IoT设备上的条件。基于MicroPython使用各种复杂的外设功能只需要少量的代码。正因如此,MicroPython诞生之后,意法半导体、TI、乐鑫等物联网芯片方案的头部厂商积极跟进,完成了芯片层的适配。自此 ,MicroPython硬件生态初具雏形。到现如今,越来越多的芯片原生支持MicroPython,随着树莓派、荔枝派、HaaS等国内外知名开发板宣布全面支持MicroPython,数以十万计的开发者开始学习和使用MicroPython。

   MicroPython开源项目中主要包含四部分内容:轻量级的Python解释器、开发应用必备的基础库、设备基础能力的适配接口标准以及MicroPython在各种芯片上的硬件适配实现,这四块内容基本可以覆盖大多数IoT设备的最基础开发的需要。但是,IoT场景的需求复杂多样,想要真正实现快速定制和零门槛开发,还需要基于MicroPython官方版本做更多的扩展。HaaS Python轻应用(简称Python轻应用)对MicroPython 做了大量易用性的改造和高级能力的补齐,是目前MicroPython相关开源工程中很受行业认可的长期维护项目。

   HaaS Python是阿里云IoT团队最新研发的一套低代码编程框架,兼容MicroPython编程规范,依托HaaS平台软硬件积木提供AI、支付、蓝牙配网、云连接、UI等物联网场景常用的能力,从而解决了物联网应用开发难的问题。有了Python轻应用框架,物联网编程不再局限于专业软件开发人员,一般的技术员也可以快速实现复杂的物联网需求。

环境配置

这没有什么好说的,官方文档很详细了,给了Windows/Linux都有,还贴心的提供了MacOS的环境指南,虽然不多,但是足够啦。
阿里云官方是基于VsCode开发了一个Haas-Studio的开发插件,上手也比较容易,参考下历程可以直接开干。

Haas-Studio的工具链:

齐全
  • 工程/历程管理: 创建
  • 串口工具: 终端环境下使用
  • 烧录工具

Hello, World!

ESP32-Devkit 集成了CP2102,串口也有啦,就不点灯了~
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@File       :    main.py
@Author     :    ethan.lcz
@version    :    1.0
@Description:    helloworld案例 - 周期性打印"helloworld"到console中
                 board.json - 硬件资源配置文件,详情请参考:https://haas.iot.aliyun.com/haasapi/index.html#/Python/docs/zh-CN/haas_extended_api/driver/driver
'''


import utime   # 延时函数在utime库中

if __name__ == '__main__':
    while True:             # 无限循环
        print("hello, Suroy!")  # 打印"helloworld"字串到console中
        utime.sleep(1)      # 打印完之后休眠1秒

正文

STM32 经过咪头实时ADC采样进行处理,若需要生成可以播放的音频格式文件也是可以的,需要配置多项参数,采样率、音频数据包格式等,可以参考下数字麦克风PDM信号采集与STM32 I2S接口应用(二)

WAV音频文件解析

每个WAV文件的头四个字节便是“RIFF”。
WAV文件由文件头和数据体两大部分组成。其中文件头又分为RIFF/WAV文件标识段和声音数据格式说明段两部分。
常见的声音文件主要有两种,分别对应于单声道(11.025KHz采样率、8Bit的采样值)和双声道(44.1KHz采样率、16Bit的采样值)。
单声道声音文件,采样数据为八位的短整数(short int 00H-FFH); 而对于双声道立体声声音文件,每次采样数据为一个16位的整数(int),高八位和低八位分别代表左右两个声道。
WAV文件数据块包含以脉冲编码调制(PCM)格式表示的样本
在单声道WAV文件中,声道0代表左声道,声道1代表右声道。在多声道WAV文件中,样本是交替出现的。
以后用到PCM录音存储功能直接拿TP79的代码移植,对应WAV的数据结构和初始化代码对比此文档应用

PCM格式

PCM(Pulse Code Modulation)也被称为 脉码编码调制。

PCM中的声音数据没有被压缩,如果是单声道的文件,采样数据按时间的先后顺序依次存入。(它的基本组织单位是BYTE(8bit)或WORD(16bit))

推荐学习: STM32F1 ADC采集录音存SD卡

效果图

参考资料

HaaS开发框架官网

HaaS Python快速开始

ESP32 快速开始

HaaS开源地址

安信可ESP32-Devkit开发文档

ESP32-DevKitC-V4 参考设计 r2.1

ESP32­WROOM­32D & ESP32­WROOM­32U 技术规格书

声明:Grows towards sunlight |版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 基于阿里云HaaS的ESP32声音监测报警系统设计


Grows towards sunlight and Carpe Diem