- 2024-10-31
-
加入了学习《【2024DigiKey创意大赛】基于AIOT的智能家居设备开发演示视频》,观看 【2024DigiKey创意大赛】基于AIOT的智能家居设备开发
-
发表了主题帖:
【2024DigiKey创意大赛】基于AIOT的智能家居设备开发,作品提交贴
本帖最后由 cszzlsw 于 2024-10-31 21:17 编辑
【2024DigiKey创意大赛】基于AIOT的智能家居设备开发
作者:cszzlsw
一、作品简介
本项目为基于AIOT的智能家居设备开发,其中系统一个主控板为RaspberryPi5,作为整个系统的网关,同时兼具家用智能门锁的用途,支持用语音指令开门。
ESP32-S3-DEVKITC-1-N8R8作为智能灯光,门锁设备的主控,充当家用电器的角色,可以接收树莓派主控发出的命令,达到开门和开灯的效果。
本作品发布前有两篇文档在本站,可移步观看:
https://bbs.eeworld.com.cn/thread-1294391-1-1.html 【2024 DigiKey创意大赛】1.树莓派5驱动ILI9488图像显示
https://bbs.eeworld.com.cn/thread-1296597-1-1.html 【2024 DigiKey创意大赛】第二弹,树莓派驱动6+1micArray的LED灯
智能语音网关产品设备展示:
智能家居门锁设备展示:
该产品所使用的物料如下:
物料名称
型号
功能
备注
树莓派5
Raspberry Pi 5
智能网关,智能语音识别主控
MicArray
Sipeed 6+1 MicArray
麦克风阵列
收集声音,酷炫彩灯
音频模块
WM8960 Audio HAT
音频编解码
负责声音收集以及语音播放
ESP32模组
ESP32-S3-WROOM-1
智能家电设备主控
主控带一颗SK型号的RGB灯光,可实现彩灯效果
OLED显示屏
SSD1306
显示设备的名称和时间等信息
门锁舵机
SG90
调整舵机转向角实现开关门的效果
蜂鸣器
MH-FDM
发出音乐,提醒已开锁或关锁
二、系统框图
该系统对应的功能流程图如下:
各元器件最终组成的产品场景及工作逻辑如下图:
三、各部分功能说明
本产品分为智能网关部分和智能门锁灯光部分
智能网关的代码架构
智能网关代码采用python编写,整体为了更高的效率和灵活性,全部采用多线程模型,将每个环节的工作任务抽象成对应的线程,然后线程之前用消息队列和事件的方式来进行数据的传递和多线程的线程同步.
采用这种架构的好处是比较灵活,可以通过事件和队列实现整体线程的运行把控,比如语音听写之后,发现是智能家居指令的话,直接往语音tts队列发送数据即可,相比传统的单线程瀑布式流程更加方便.劣势的地方在于线程比较多的话,对于线程的时序把控需要非常精细,因为讯飞的tts语音听写采用的webSocket的方式,要求在有消息时再建立连接,如果连接上之后10s没有数据传输会被强制断开,所以实现webSocket的按需创建也是比较关键的.
智能门锁的代码架构
智能门锁主要管理网络,屏幕以及开关锁就开关灯,采用MicroPython的方式编写代码,整体流程如下:
智能门锁的程序相对简单,采用MicroPython对于开发项目也有一定的优势,包括代码简单,开发迅速,调试也方便,不需要不停地去烧录系统然后查看日志,同时MicroPython也有相当多的第三方驱动库可以使用。同时MicroPython还有可移植性好的特性,可以很方便的将程序迁移到其他的开发板上去。
硬件连接方式:
关连接线示意图:
RPI5是整体系统的主控,连接WM8960扩展HAT可以完成语音的录音以及播放,基于树莓派而设计的音频模块,采用WM8960低功耗立体声编解码器,通过I2C接口控制,I2S接口传输音频。板载标准3.5mm耳机接口,可通过外接耳机播放音乐,同时也可通过双通道喇叭接口外接喇叭播放。板子左右两边有一个高质量MEMS硅麦克风,可以立体声录音。
麦克风阵列模块是 Sipeed 基于 MSM261S4030H0 数字麦克风芯片设计的,模块声音识别灵敏度、信噪比高,由沿板的六个麦克风和一个中心的麦克风组成,阵列板上的 12 颗 LED 可以用来可视化识别声源方位,基于 GCC-PHAT 算法实现声源定位、语音识别、波束成形等需求场合。
完成接线之后,可以点亮阵列的灯光:
智能家居设备产品硬件连接示意:
ESP32-S3-DevKitC-1是一款入门级开发板,搭载Wi-Fi+Bluetooth® LE模组,板上模组的大部分管脚均已引出至开发板两侧排针,开发人员可根据实际需求,轻松通过跳线连接多种外围设备,也可将开发板插在面包板上使用。
关于ssd1306的OLED屏幕:
ssd1306的参数如下:
关于舵机:
在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口。舵机是一种位置伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。其工作原理是:控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为 20ms,宽度为 1.5ms 的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为 0,电机停止转动。
关于蜂鸣器,无源蜂鸣器特点:
无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。
声音频率可控,可以做出“多来米发索拉西的效果。必须用2K~5K的方波去驱动它3在一些特例中,可以和LED复用一个控制口
四、作品源码
源码已上传到下载中心:https://download.eeworld.com.cn/detail/cszzlsw/634858
源码说明:
smartAI.py和xfcommon.py为树莓派的代码
其他为ESP32的MicroPython代码
五、作品功能演示视频
以下为我的作品演示:
六、项目总结
非常感谢主办方提供参加活动的机会,通过本次活动,学习了树莓派的一些操作和音视频的操作方式,特别是掌握了录音和播放录音的方式,以及如果通过讯飞开发平台进行语音听写,语音转写以及调用讯飞星火大模型的方式。同时ESP32-S3也为智能家居小家电产品提供了产品开发思路,学习了如何烧录MicroPython系统,以及使用MicroPython方式开发产品固件。
本次实验由于时间仓促,尚未解决以下几个问题:1.树莓派产品的功能界面显示 2.讯飞语音系统的语音唤醒功能 3.ESP32门锁增加输入密码的功能。希望在以后能够有多的时间完善以上几个问题。
七、其他
附件为word版文档:
-
上传了资料:
2024DigiKey创意大赛-基于AIOT的智能家居设备开发项目源码
- 2024-10-21
-
发表了主题帖:
【2024 DigiKey创意大赛】第二弹,树莓派驱动6+1micArray的LED灯
1.前言
此次大赛有一个套件是sipeed的6+1MicArray 麦克风阵列,用来检测声音和显示灯光,就是下面这个:
麦克风阵列模块是 Sipeed 基于 MSM261S4030H0 数字麦克风芯片设计的,模块声音识别灵敏度、信噪比高,由沿板的六个麦克风和一个中心的麦克风组成,阵列板上的 12 颗 LED 可以用来可视化识别声源方位,基于 GCC-PHAT 算法实现声源定位、语音识别、波束成形等需求场合。这个外设挺有意思的,今天先把LED灯珠驱动起来,玩一玩酷炫的氛围灯.
2. 接线
外设的官方介绍网址是:
https://wiki.sipeed.com/hardware/zh/modules/micarray.html,
相关参数#
功能特点
参数
声压级
140 dB SPL
灵敏度
-26(dB,dBFS [url=home.php?mod=space&uid=1013604]@1KHZ[/url] 1Pa)
信噪比
57 dB (20kHz bandwidth,A-weighted)
THD<1% (100dB SPL @1kHz S=Nom,Rload>2k )
时钟频率
1.0-4.0Mhz(正常模式)
150-800khz(低功耗模式)
MEMS 麦克风
7 个 MSM261S4030H0 组成阵列
连接器
支持 2*5P 2.54mm 端子和 10P 0.5mm FPC 连接器
灯光
12 个 SK9822 LED 组成一个环形 LED 阵列
多个 LED 通过双信号线级联 / 8 Bit(256 级)可调颜色 / 5 Bit(32 级)亮度调节
尺寸
78.1*88.8mm
看了介绍,知道LED灯珠是SK9822,比我们常见的WS2812更好,颜色是RGB格式的24位,非常艳丽.
首先是看看接线方式,端口介绍:
引脚序号
引脚名称
类型
引脚说明
1
VIN
VCC
模块电源输入正
2
GND
GND
模块电源地
3
MIC_D0
I/O
0 号麦克风和1号麦克风的 I²S 接口的串行数据输出
4
MIC_D1
I/O
2 号麦克风和3号麦克风的 I²S 接口的串行数据输出
5
MIC_D2
I/O
4 号麦克风和5号麦克风的 I²S 接口的串行数据输出
6
MIC_D3
I/O
中心麦克风的 I²S 接口的串行数据输出
7
MIC_WS
I/O
I²S 接口的串行数据字选择
8
MIC_CK
I/O
I²S 接口的串行数据时钟
9
LED_CK
I/O
LED 的串行数据时钟
10
LED_DA
I/O
LED 的的串行数据输出
所以用杜邦线跟树莓派5连接起来:
在我的接线中,LED_CK和LED_DA接入的是BRCM的26和19脚,VCC和GND正常接3.3V和GND上就行.
3. 下载python的驱动包
这里采用Python来完成LED的驱动显示,主要是Python编程比较简单,而且有很多实用的库可以使用.
经过搜索知道有一个apa102-pi库可以使用,库的地址是:https://github.com/tinue/apa102-pi
文章链接:https://blog.csdn.net/gitblog_01171/article/details/142078725
使用python下载该库:`pip install apa102-pi`
由于官方镜像python版本为3.11,所以会出现如下报错:
所以我们要创建python的虚拟环境:
root@raspberrypi:~# python3 -m venv my-virtual-environment
root@raspberrypi:~# python3 -m venv my-virtual-environment
``
然后再使用pip指令安装apa102-pi库
安装成功之后即可开始编辑demo代码进行测试
4.编写测试demo代码
代码如下:
#!/usr/bin/env python3
"""Ultra simple sample on how to use the library"""
from apa102_pi.driver import apa102
import time
import random
# 24位颜色值的常量定义
COLORS = [
0xFF0000, # COLOR_RED
0x00FF00, # COLOR_GREEN
0x0000FF, # COLOR_BLUE
0xFFFF00, # COLOR_YELLOW
0x00FFFF, # COLOR_CYAN
0xFF00FF, # COLOR_MAGENTA
0xFFFFFF, # COLOR_WHITE
0x808080, # COLOR_GRAY
0xD3D3D3, # COLOR_LIGHT_GRAY
0x404040 # COLOR_DARK_GRAY
]
# 生成一个长度为240的列表,随机填充颜色值
random_colors = [random.choice(COLORS) for _ in range(240)]
def main():
# Initialize the library and the strip. This defaults to SPI bus 0, order 'rgb' and a very low brightness
strip = apa102.APA102(num_led=12, order='rgb', bus_method='bitbang', mosi=19, sclk=26, ce=None,
bus_speed_hz=30000000, global_brightness=4)
# Turn off all pixels (sometimes a few light up when the strip gets power)
strip.clear_strip()
# Prepare a few individual pixels
for index,color in enumerate(random_colors):
strip.set_pixel_rgb(index%12,color,bright_percent=index%4)
strip.show()
# Wait a few Seconds, to check the result
time.sleep(0.1)
# Clear the strip and shut down
strip.clear_strip()
strip.cleanup()
if __name__ == '__main__':
main()
此代码会产生一个随机的颜色列表,然后通过遍历列表的方式来形成一个不段追逐的灯光效果,更多的灯光效果可以自行探索.
运行方式为:
(my-virtual-environment) root@raspberrypi:~# python led_light.py
此时会报错:
经过2个小时的探索,发现是rpi的gpio库太老了,在这篇文章上查到原因和解决办法:https://blog.csdn.net/qq_41918983/article/details/142111052
然后依照教程修复一下:
紧接着就可以继续运行程序了:
5.总结
本文记录了使用树莓派驱动6+1MicArray上的led灯珠SK9822的方式,其中有一些小坑需要踩,不过好在解决了,希望能帮到大家
- 2024-09-22
-
回复了主题帖:
【2024 DigiKey创意大赛】1.树莓派5驱动ILI9488图像显示
视频传了 但是不知道为什么没显示
- 2024-09-20
-
回复了主题帖:
【2024 DigiKey创意大赛】1.树莓派5驱动ILI9488图像显示
视频呢?
-
发表了主题帖:
【2024 DigiKey创意大赛】1.树莓派5驱动ILI9488图像显示
本帖最后由 cszzlsw 于 2024-9-22 00:33 编辑
1. 前言
其实早就收到了RaspberryPi5的套件,8G版本,拿到手真是欣喜啊.自此开始了折腾之路。其实一直也在想从哪里入手呢,后面发现自己有一块之前做的兼容树莓派引脚的屏幕,那就先点亮屏幕吧。
2. 准备工作
要实现点亮屏,先要准备好:树莓派(使用官方电源,有条件再上一个散热器比较好),SD卡(推荐32G或以上,方便后期存储数据),触摸屏(采用ILI9488驱动芯片,SPI协议,320*480分辨率,ft6236触摸芯片,I2C协议),选配树莓派5专用串口线及适当的转接线。组装之后就像下面:
这里的散热器是从淘宝买的官方的,可以根据芯片温度自动调节转速,主打一个节能减排吧。
3. 下载,烧录系统
这一步骤其实没什么好讲的,无非就参考一些网上的帖子,用官方的工具(RapberryPi Imager)下载官方的系统将固件烧录到SD卡中。
在官方工具中可以配置需要连接的WIFI名称,密码,以及账户名称和密码等,还是很方便的。
然后在系统启动之后,会自动连接对应的wifi(或者采用网线方式亦可,)可以使用raspi-config指令将系统日志引到串口上,这样就不用每次都等系统连接网络之后。同时需要在网上买一条树莓派5的官方接口兼容的串口线,然后就可以愉快的玩耍了。
4. 触摸屏引脚定义:
首先查看树莓派的引脚图:
我的屏幕型号:ILI9488,触摸芯片为FT6236,接线为:
BCM编码 功能
10 MOSI
9 MISO
11 SCLK
24 DC
25 BL
16 RESET
2 SDA
3 SCL
11 CTP_INT
5. 操作步骤
5.1 使能SPI
向向文件/boot/firmware/config.txt文件添加:(旧系统为/boot/config.txt,新系统已修改)
dtparam=spi=on
5.2 添加对应驱动并编译固件
下载树莓派的linux系统,移植fb_ili9488.c文件
网址:https://github.com/raspberrypi/linux/tree/rpi-6.6.y
下载完之后,传到树莓派的文件系统中,解压,然后进入对应目录
make bcm2712_defconfig
make menuconfig
选择fb置true
make -j4 zImage :可编译出系统固件,已弃用,直接make产生所有内容
make -j4 modules :编译模块
make dtbs :编译设备树
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules_install INSTALL_MOD_PATH=/opt/install/rpi-4.9 编译内核镜像
fbtft中ili9488代码修改
复制linux-stable_20240529/drivers/staging/fbtft/中的fb_ili9486.c文件成fb_ili9488.c,添加相关代码
还需修改fbtft.h文件和fbtft-core.c文件
同步修改Makefile文件
menuconfig里也加上编译
2. 文件制作完成后,启动编译make ,drivers/staging/fbtft出现新编译的fb_ili9488.ko和fbtft.ko
3. 使用xz -zk drivers/staging/fbtft/fbtft.ko 文件产生fbtft.ko.xz文件,然后使用cp命令将ko和ko.xz文件拷贝到 /lib/modules/6.6.31+rpt-rpi-2712/kernel/drivers/staging/fbtft中,fb_ili9488同理
4. 注意mod的生成需要修改.config中的CONFIG_LOCALVERSION内容为:"+rpt-rpi-2712"
5.3 修改设备树
打开/root/linux-stable_20240529/arch/arm64/boot/dts/overlays/fbtft-overlay.dts文件,找到ili9341的位置:
改成ili9488相关内容,加上设备树的属性:
然后使用make dtbs生成设备树
将生成的fbtft.dtbo拷贝到/boot/overlays中
然后修改/boot/firmware/config.txt ,添加dt内容
启动之后在dmesg中可以看到相关日志:
此时如果连线正确,屏幕应该会点亮 效果如下:
看一下视频感受一下启动过程
-
加入了学习《DigiKey 应用说:Raspberry Pi 5 在视频直播中的应用》,观看 Raspberry Pi 5 在视频直播中的应用
-
评论了课程:
【2024 DigiKey 应用说】第二期:树莓派 5 在视频直播中的应用
非常不错,有收获,请问PPT在哪里领取呢?