聚豐項目 > 智能語音家居
設計思路: 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 燈顏色