使用ESP32做一个实时语音对讲机
最近突发奇想,制作一个数字式的音频通信系统,顺便学习一下I2S与ESP-NOW协议刚开始查阅资料,发现油管上的已经有人做过了,但是使用的C++,并用了数据流的处理流程,比较晦涩难懂,代码量也很大,属于是炫技的作品,我这篇文章使用C重新写一遍,并且代码量大大降低,也很容易理解,let's get started!上一篇博客中已经详细讲解了I2S通信协议,在ESP32中有两个硬件I2S,我们可以通过简
最近突发奇想,制作一个数字式的音频通信系统,顺便学习一下I2S与ESP-NOW协议刚开始查阅资料,发现油管上的已经有人做过了,但是使用的C++,并用了数据流的处理流程,比较晦涩难懂,代码量也很大,属于是炫技的作品,我这篇文章使用C重新写一遍,并且代码量大大降低,也很容易理解,let's get started!上一篇博客中已经详细讲解了I2S通信协议,在ESP32中有两个硬件I2S,我们可以通过简
最近在做一个验证性的东西,使用无线完成语音通信首先需要大概了解一下音频信号,音频信号主要有以下几个概念点:采样率:一秒钟采集多少个音频信号,常见的有8K、16K、44.1K等,采样率越高,声音的细节都越好。数据深度:数据的深度,一个数据有多少位,常见的有8bit、16bit、24bit、32bit等,位数越高,声音的线性度越好。音频声道:单声道、双声道,带耳机打游戏时,可以听到敌人的脚步声吗,就是
愉快的一周又结束了,趁着最后这几分钟总结一下本周工作学习的内容本周的工作主要是研究一个lwmesh协议栈,并且提高通信速率,这是一种类似于zigbee的东西,但是比zigee要简单些,结构层次只有物理层、网络层和应用层,但是比较适合于我们公司的需求,仔细看了看底层代码发现也不是很难,基本上就是用最简单的方式实现了mesh协议,在提高广播速率方面也很无脑,只是降低了发射的超时时间,将速率提升了几倍。
在嵌入式工作中,在某些情况下查看单片机打印输出不是很方便,比如狭小的空间,室外测试等情况,为此,利用LVGL的各个控件,设计了一个便携式的串口助手。lvgl移植使用也很简单,只需要配置对应的显示接口和输入接口,一般来讲,使用在屏幕上开窗的方式,比画点的方式帧速率提高很多倍,触摸输入方面,根据相应的端口配置相应的硬件层输出就可以啦!lvgl使用C语言编写,因此可以运行在多个平台上,嵌入式,win、l
将手册翻译成中文并做记录,网页版布局莫名其妙,笔记word放在文档末尾MiWi是一种类似于ZigBee的网络协议,也可以用来Mesh组网,本篇博客仅仅翻译了微芯手册的第五章Mesh部分MiWi组建mesh网络1、MiWiMesh设备类型MiWiMesh协议支持以下设备类型:1.1局域网协调员1.1开始建立一个网络1.2分配和维护协调器及其终端设备地址1.3作为路由帧的协调器1.4通过调试控制可纳入
在某些情况下调试中,我们希望输出更详细的信息,可以通过C语言给出的宏定义来简单实现,具体可以打印出当前的文件与代码行数,示例如下:#include <stdio.h> #define DEBUG_ENABLE #ifdef DEBUG_ENABLE #define DEBUG(format,...) printf("File: "__FILE__", Li
STM32cubeide在使用时不是很方便,一般都是用外部编辑器进行编程,在必要时才才使用这个ide。自己写了一个批处理脚本,调用的是cubeide的无头编译模式,下载使用的stm32programmer的命令行模式,具体脚本在这里:@echo off echo ----------welcome to tsk tool--------- %设定临时环境变量% set PATH=C:\Prog
什么是QP?上一个博客我提到了在复杂程序中使用状态机的好处,可以使复杂的逻辑在编程时更加清晰,上文中时用到的是FSM有限状态机框架,但是在更加复杂的情况下,可以使用层次状态机,说白了就是状态机中的状态机,最近这两天都在看这个框架,但是以后估计不会用到了,写一篇博客来记录一下学习过程。使用在STM32上可以使用QPC或者是QPN(QP-nano),这篇博客主要是讲一下怎样移植到STM32上,其中QP
1、串口重定向问题,在MDK与STM32cubeide中,存在编译器不同的问题,因此MDK上使用的串口重定向在cubeide上不能正常工作,使用这个代码可以实现全兼容。#ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) PUTCHAR_PROTOTYPE { HAL_UART_Transmit(&
今天使用STM32L432开启多路ADC采集,本以为很简单结果还是遇到了大坑,一直卡死在HAL_ADC_Start_DMA函数,需要注意以下问题:1、DMA开启循环采集模式,字节选择半字,ADC中断关掉。2、在cubemx中,DMA中断无法关闭,在MX_DMA_Init()函数中关掉DMA的中断://HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);