聚丰项目 > 智能语音家居
设计思路: 1.使用AB32VG1主控 使用RT-thread RTOS, 2.外接DHT11采集室内温度湿度,外接光敏电阻ADC采集光照, 3.控制红外遥控空调,远程控制空调开启 4.霍尔元件,检测门窗开关,通过蓝牙上传到主控 5.通过wifi上传到云服务器,接入天猫精灵,或者涂鸦平台, 6.实现在天猫精灵APP,或者涂鸦APP上查看温湿度或语音查询, 解决问题: 1.通过与天猫精灵对话就可以,了解室内温湿度 2.回到家前可以提前开启空调, 3.出门忘记关闭空调,远程关闭, 4.远程查看门窗的开关状态,夜晚也可以防盗,报警 创新点: 1. 远程查询温湿度门窗状态,控制空调开关状态 2. 语音查询温湿度门窗状态
迷惘186
分享迷惘186
团队成员
迷惘186 硬件
一.硬件资源
1. AB32VG1 底板
AB32VG1主频 120M ,片上集成 RAM 192K, Flash 4Mbit,ADC,PWM,USB,UART,IIC 等资源。提供SDK,驱动齐全,支持RT-Thread Studio 开发应用,图形化配置系统,一键开启外设,一键使用软件包,强大的自动代码编辑辅助。
CPU: AB5301A;(LQFP48 封装,主频 120M,片上集成 RAM 192K, flash 8Mbit, ADC,
PWM, USB, UART, IIC 等资源)
搭载蓝牙模块
搭载 FM 模块
一路 TF Card 接口
一路 USB 接口
一路 IIC 接口
一路音频接口(美标 CTIA)
六路 ADC 输入引脚端子引出
六路 PWM 输出引脚端子引出
一个全彩 LED 灯模块,一个电源指示灯,三个烧录指示灯
一个 IRDA(红外接收端口)
一个 Reset 按键,三个功能按键(通用版为两个功能按键)
板子规格尺寸: 6cm*9cm
I/O 口通过 2.54MM 标准间距引出,同时兼容 Arduino Uno 扩展接口,方便二次开发
2.Tuya 语音扩展板
涂鸦IoT语音模组VWXR2是基于XR872AT研发的搭载语音唤醒&降噪算法的IoT应用WI-FI模组,支持WLAN 802.11b/g/n+ARM Cotex-M4F, 内置416KB SRAM和4MB PSRAM,匹配涂鸦云端语音技能+IoT平台,可帮助客户实现IoT产品的语音入口赋能,很好的支持了低成本在线语音 控制的终端产品
内置低功耗32位cpu,可兼做处理器,主频最高支持380MHz
工作电压:2.7-5.5V
外设:9*GPIO,2*Uart,2*ADC
天线支持:板载+可选ipex 采样率:16K/16bit
语音输入:内置2路音频ADC,可直接模拟mic
音频输出:1路
板载音频功放:最大支持2.6W
推荐唤醒距离:<=3m
推荐工作底噪:<=60dbC
默认语音技能:天气、百科、日历、计算器、成语、翻译、已支持音乐内容点播- 支持线性双MIC,间距灵活可调(>40mm),ID和MD结构设计灵活,易集成
3.机智云V2.3 Ardiono IO 扩展板
扩展板板载了正反转可调速电机马达、温湿度传感器、红外感应器、RGB全彩LED灯,另外增加了OLED扩展接口,
二.连接原理图
使用到 AB32VG1 底板 IO
串口1:
PA4 TX --> 语音模组 RX
PA3 RX --> 语音模组 TX
RGB LED: i2c1
PE.2 -> SDA1
PE.3 -> SCL1
OLED:i2c2
PA.0 --> SDA2
PA.1 -->SCL2
DHT11:
PB.0 --> DATA
KEY:
PE.0 --> KEY1
PF.0 --> KEY2
红外对管:
PF.1 --> IR
电机:
PA.5 PA.1
红外接收:
PE.6 --> IR RX
光敏电阻:
PB.1 -->ADC 7
智能家居控制
程序开源地址:https://gitee.com/miwang186/ab32vg1_smart_furniture.git
一.软件功能
1. 读取DTH11 温湿度
2. OLED 显示温湿度 时间等,
3. 按键页面切换等 (完成驱动 显示切换未实现)
4. 语音WiFi模块 上传温湿度,RGB LED 光照等参数
5. APP 远程查询温湿度 光照,
6. 远程红外遥控, 红外学习等 (未完成)
7. 远程控制电机 速度(未完成)
二.软件流程
1.显示线程: 每秒刷新 时间 温湿度 光照ADC值的显示
2.网络线程: 处理语音WiFi 模块 串口数据的收发 解析 连接涂鸦云服务 等
3. 传感器线程: 每秒采集温湿度 光照ADC值
4. 按键线程: 处理按键事件触发 软件定时器扫描按键
5. 主线程: 每5分钟上传一次 温湿度 光照 涂鸦云服务
三.更新日志:
**修改时间:2021-12-6**
**修改人:miwang186**
>
1. 红外硬件解码测试程序测试正常
2. 使用ssd1306软件包 模拟I2C2 驱动 OLED 显示正常,48M速度下OLED 1FPS(120M 速度为2 FPS)PS:开启程序O2 时间优化 好像并无作用
存在问题1:同时开启两个软件I2C 无法使用,单独开启任何一个运行正常
3. GoKit功能板上 2个 轻触开关 和 红外对管 识别按下
4. DHT11 使用软件包 修改rt_hw_us_delay()函数 调整延时(示例1),输出温度,湿度
5. ADC使能ADC ADC0 调整例程通道即可使用 Ps:这里我以为ADC0是通道0 特意加了几个ADC1...ADC15 结果都读不出数值,又是大半天到浪费
6. finsh控制台 增加AB32IO PIN脚 Ardiono io 到映射关系输出 方便查看IO口(示例2)
7.驱动AB32板载LED PWM 呼吸灯, GoKit功能板上 IIC RGB灯
8.uart1 串口测试,配置需要通过修改drv_usart.c来修改波特率,
存在问题2:在应用通过rt_device_control(serial, RT_DEVICE_CTRL_CONFIG, &config);无法通讯
存在问题3:系统时钟修改大于48M是 finsh msh >(rx_fifo != RT_NULL) assertion failed at function:rt_hw_serial_isr, line number:1294
9. 修改部分小
bug1: I2C i通过软件包 无法配置为io 0 限制范围1-27
bug2: 定义名称错误 struct rt_i2c_bus_device i2c2_bus;
**修改时间:2021-12-7**
**修改人:miwang186**
>
1. 增加涂鸦语音模块初始API,可以注册网络连接WiFi
2. 优化OLED显示驱动 刷新率可到4fps 示例3:
**修改时间:2021-12-9**
**修改人:miwang186**
>
1. 增加获取网络时间并同步到本地
2. 修改串口 接收FIFO 为127字节
**修改时间:2021-12-11**
**修改人:miwang186**
>
1. 上传温湿度 光照 RGB灯 数据到涂鸦后台
2. 编辑APP显示页面 远程控制RGB灯 查看 温湿度
3. 5分钟上传一次 温湿度 光照数据
/*示例1*/ rt_kprintf("tick:%d \n", rt_tick_get()); rt_hw_us_delay(1000 * 1000); rt_kprintf("tick:%d \n", rt_tick_get());
/* 示例2 * finsh控制台 增加AB32IO PIN脚 Ardiono io * 到映射关系输出 方便查看IO口 */ AB32VG1_V2.0 Board IO Info ******************************** AB32|IO| Ardiono |IO|AB32 -------------------------------- PA.3|03|RX A5|20|PE.7 PA.4|04|TX A4|19|PE.6 PF.1|22|D2 A3|18|PE.5 PB.0|08|D3 A2|04|PWKEY PA.5|05|D4 A1|09|PB.1 PE.1|14|D5 A0|10|PB.2 PE.0|13|D6 PF.0|21|D7 VIN|VIN GND|GND NC|D8 GND|GND PA.6|06|D9 GND|GND PE.4|17|D10 5V |5V PA.1|01|D11 3.3|3.5 PA.2|02|D12 RST|NC PA.0|00|D13 REF|REF GND|GND NC | NC|AREF PE.2|15|SDA PE.3|16|SCL ********************************
/*示例3 优化SSD1306 刷新速度 提升 到4pfs 使用120M主频 */ // Send data void ssd1306_WriteData(uint8_t* buffer, size_t buff_size) { #if PKG_USING_SSD1306_HW_I2C HAL_I2C_Mem_Write(&SSD1306_I2C_PORT, SSD1306_I2C_ADDR, 0x40, 1, buffer, buff_size, HAL_MAX_DELAY); #else uint8_t* buf =rt_malloc(buff_size + 4); if(buf == RT_NULL) { rt_kprintf("ssd1306_WriteData rt_malloc fail \n"); return; } buf[0] = SSD1306_CTRL_DATA; rt_memcpy(buf + 1, buffer, buff_size); buff_size++; rt_i2c_master_send(i2c_bus, SSD1306_I2C_ADDR, RT_I2C_WR, buf, buff_size); rt_free(buf); #endif }
1. 驱动OLED测试FPS
2. 语音查询天气
3. 获取实时时间
4. APP 查询温湿度 远程控制LED 灯颜色