---
title: '智慧音箱 2023'
disqus: hackmd
---
# 智慧音箱 2023
###### tags:`Project 2023`



[TOC]
## Linktree :globe_with_meridians:
[我們所查詢的網站linktree](https://linktr.ee/raspimaster)
---
## 智能音箱使用說明
> 此為我們設計之智能音箱助理,可詳細參閱以下使用說明體驗喔 !!!
### 步驟
1. 需先說喚醒詞 **【助理】** 將智能音箱助理喚醒
2. 接著可語音輸入您欲知道的資訊
(1) **【天氣】**
(2) **【開燈/關燈】**
(3) **【不要聽】**
(4) **【時間】**
(5) **【我要聽音樂】**
==如無使用以上功能將自動跳至 【Chat GPT】==
3. 如需結束智能音箱助理即可說 **【拜拜】** 用以結束程式
### 功能介紹(點選顯示更多內容)
:::spoiler **【助理】**:desktop_computer:
> 此為本智能音箱助理的喚醒詞,說出此喚醒詞即可開機執行,它回答【是的,主人】,將可以開始和他對話溝通。
:::
:::spoiler **【天氣】**:partly_sunny:
> 它將會回答你現在天氣的氣象和溫度。
>
:::
:::spoiler **【時間】** :clock12:
> 它將會回答你現在詳細時間。
> 依照 : xxxx年xx月xx日 xx時xx分xx秒 (為西元紀年且是24小時制)。
:::
:::spoiler **【開燈/關燈】**:bulb:
> 此功能可控制 LED 燈的開啟和關閉,將直接反應於 LED 上。
:::
:::spoiler **【不要聽】**:mute:
> 此為本智能音箱助理的休眠詞,說出此休眠詞將會使音箱助理進入休眠,對任何回答、指令將不會有反應,如需再次開啟時,請再叫一次它的名字【助理】即可繼續執行。
:::
:::spoiler **【拜拜】**:zzz:
> 此為本智能音箱助理的關機詞,說出此關機詞此音箱助理將會關機且程式終止,如需再次開機,需 ++**手動**++ 執行程式並接著說出【助理】即可再次執行。
:::
---
## 進度報告
### 03/02
1. 按照[此網站](https://hackpi.fun/raspberry-pi/Linux/raspberry-pi-google-assistant/)去進行設定、安裝到為 Google Assistant 設置音頻
**目前遇到無音頻麥克風等設備**
### 03/10
1. 嘗試將樹梅派與Voice Kit連接,但是遇到沒有合適的Hdmi母轉mini Hdmi公轉接線之問題,因此上網訂購合適的的轉接頭
### 03/15
1. 駁回了前面的嘗試,第一次使用樹莓派3+,網路上資訊不多,查了許多資料
[我們所查詢的網站linktree](https://linktr.ee/raspimaster)
2. 如果要下載東西的話,強烈建議測完網速看誰的行動數據跑最快然後連線下載,才不會浪費時間(台灣之星真的慢)
3. 如果沒有下載桌面的話,從頭到尾就是終端機的畫面,有下載桌面也可以使用內建的終端機(建議下載)
4. 第一次設定桌布時會出現(之後重灌都會

6. 本週遇到的困境是無法連線到wifi (時區雖然已調成臺灣但時間還是錯的

### 03/23
1. 我們試圖利用網路上資源以及歷年學長姐們的建議去解決 - 「***樹梅派無法連線網路之問題***」
### 04/20
1. 好像查到了ip位址,不確定,應該不是

2. 不管做什麼都失敗QQ

3. 真的查了很多資料

### 05/04
1. 得知我們使用的樹莓派本身沒有網路,需要再另接網卡,而我們先前買的網卡與該板子不相容
2. 暫時改用去年學長使用的器材
3. 著手查詢Google AIY Voice Kit的相關資料
### 05/11
1. 改用Google AIY Voice Kit,但是因為當下找不到適當的HDMI轉Micro HDMI的轉接頭,而嘗試不用連接螢幕的方式進行設定,但不行。
2. 該塊樹莓派似乎不能用預設密碼登入
### 05/25
1. 今天我們重啟數據機重新設定基本網路設定,終於使得樹梅派連接到我們該空間所使用的實驗室網路。

2. 利用 Putty 及 IP (192.168.0.103) 連接之後會需要輸入帳號密碼,此帳號密碼為我們自己設定的,成功就可以開始連線使用SSH。
```
帳號 : pi
密碼 : password
```
### 06/08
1. speaker可以發出聲音,但非常大聲,還沒找到調音量的方法。alsamixer沒作用
之前無法發出聲音原因是因為voice hat沒插好,不能直直插下去,要稍微斜插
3. 麥克風尚在設定中
### 06/28
1. 啟用google cloud platform api服務
* Google Assistant API
* Cloud Speech-to-Text API
* Cloud Text-to-Speech API
1. 但執行demo的測試檔案會報錯
`attributeerror: module 'google.cloud.speech' has no attribute 'types'`
1. 發現voice hat需要某個角度斜插按鈕才會亮,但麥克風好像沒有作用
### 06/29
成功設定Google cloud platform api的服務,且執行測試的demo檔案不再報錯,但是依然無法錄音,跟他說話依然沒有反應。而google api的數據是有在跑的


### 07/05
成功測試完成語音指令基礎功能(包含LED的開燈、關燈、拜拜(**結束功能**)指令)
* **開燈**

* **關燈**

* **結束功能**

* **程式碼**

### 07/06
* 新增語音指令:查詢現在溫度。使用openweathermap api以及python的pyowm來獲取當下的溫度
* 嘗試連接chatgpt api,需要付費,要綁有錢的卡
* 因上面兩個api有python版本要求,更新版本(3.9.9)後執行程式找不到module pyowm跟aiy,因此需要重載。
執行`pip install pyowm`
到[github](https://github.com/google/aiyprojects-raspbian/blob/aiyprojects/HACKING.md#install-voice-bonnethat-packages)重新下載
### 07/12~07/13
成功初步測試喚醒詞的功能
* 程式碼(新增while迴圈偵測喚醒詞)

* 測試結果

執行apt相關指令出現錯誤。發現apt-key全數過期,新增新的[apt key](https://forums.raspberrypi.com/viewtopic.php?t=290058)

### 07/19
* 樹莓派帳號被鎖,於是重灌系統
* 改善天氣預報功能:新增天氣狀況
* 改善喚醒詞的程式碼:如果說「電腦」,開始聆聽關鍵字指令。在說「不要聽」以前,它會一直抓關鍵字,不須每次下指令都說「電腦」。
* 遇到`ImportError: cannot import name 'load_dotenv' from 'dotenv' (/home/pi/.local/lib/python3.7/site-packages/dotenv/__init__.py)`,pip 已經安裝相關套件,但抓不到
### 07/20
1. 解決了昨日的`ImportError: cannot import name 'load_dotenv' from 'dotenv' `
* **解決方法 : 我們重新看了一下原始程式碼,並沒有需要使用到此函式庫的指令,於是乎先試著將它註解掉看看是否能正常值行,於是便成功運行了。**
2. 無法辨識中文
* **解決方法 : pyttsx3 可能是造成此程式套件無法讀取中文緣故,所以我們將有使用到此函式的code,改為可使用的 「gTTS」,便成功讀取**
3. 一開始它只會說英文,於是乎便在說話的那一段後面更改為我們設定的語言
▼ 〈 **tts** 那行便是主要更改且設定語言之程式 〉

### 7/26~7/27
1. 新增音樂播放功能,但只能從已下在音樂中隨機播放,分為三個類別
2. 新增以按鈕停止語音的功能
3. 新增時間播報功能
4. 語音功能時好壞,推測是網路問題
5. 調整好喚醒詞以及chatGPT的使用,只要不是喚醒詞中的詞語都會視為要問chatGPT問題
6. 調整助理的罐頭台詞,使其更接近人性(?
### 8/2~8/3
1. 會有語音中斷播出的問題,嘗試解決
2. 因產品定位不清晰,於是詢問老師建議,決定嘗試英語教學平台
### 8/9~8/17
1. 新增功能
* 英文單字考試
* 英文單字練習
* 英文單字的解答
* 行程表(開發中)
* 能用語音暫停跟播放音樂(開發中)
2. 因喇叭線脫落意外發現語音輸出會中斷是跟voice kit喇叭接觸不良有關,於是買了usb外接音效卡來外接喇叭,已解決語音中斷輸出問題
3. 外接麥克風靈敏度增加,
### 8/23~8/31
1. 成功用按鈕停止播放音樂
2. 開始撰寫畢業論文報告書
# 樹莓派安裝開機設定步驟
---
## 在準備開始樹莓派之前須準備以下東西
1. 乾淨 SD 卡 (最好 64G ↑)
2. micro HDMI 轉 HDMI 線*1 (本次使用Raspberry 4)
3. 電源線 (Type C)
4. 螢幕*1
5. 滑鼠*1
6. 讀卡機*1 (為安裝樹梅派OS)
---
### 第一步
* 進入 [樹梅派官網](https://www.raspberrypi.com/software/) 下載對應 OS 至已準備好的**SD 卡**上
### 第二步
* 將安裝好 **樹莓派 OS**的 SD 卡插入預備之樹莓派
* 將所有裝置、線路接上樹莓派
* 連接電源
### 第三步
* 按照設定步驟設定 (上方Linktree有連結)
### 第四步
* 樹莓派連接 WIFI
* 樹莓派連接 SSH (連接到WIFI就可以得到 樹莓派之IP Address)
```
我們是利用 Putty 及 IP (192.168.0.103) 連接之後會需要輸入帳號密碼
此帳號密碼為我們自己設定的,如成功就可以開始連線使用SSH。
```
User story
---
```gherkin=
Feature: Guess the word
# The first example has two steps
Scenario: Maker starts a game
When the Maker starts a game
Then the Maker waits for a Breaker to join
# The second example has three steps
Scenario: Breaker joins a game
Given the Maker has started a game with the word "silky"
When the Breaker joins the Maker's game
Then the Breaker must guess a word with 5 characters
```
> I choose a lazy person to do a hard job. Because a lazy person will find an easy way to do it. [name=Bill Gates]
```gherkin=
Feature: Shopping Cart
As a Shopper
I want to put items in my shopping cart
Because I want to manage items before I check out
Scenario: User adds item to cart
Given I'm a logged-in User
When I go to the Item page
And I click "Add item to cart"
Then the quantity of items in my cart should go up
And my subtotal should increment
And the warehouse inventory should decrement
```
> Read more about Gherkin here: https://docs.cucumber.io/gherkin/reference/
User flows
---
```sequence
Alice->Bob: Hello Bob, how are you?
Note right of Bob: Bob thinks
Bob-->Alice: I am good thanks!
Note left of Alice: Alice responds
Alice->Bob: Where have you been?
```
> Read more about sequence-diagrams here: http://bramp.github.io/js-sequence-diagrams/
Project Timeline
---
```mermaid
gantt
title A Gantt Diagram
section Section
A task :a1, 2014-01-01, 30d
Another task :after a1 , 20d
section Another
Task in sec :2014-01-12 , 12d
anther task : 24d
```
> Read more about mermaid here: http://mermaid-js.github.io/mermaid/
## Appendix and FAQ
:::info
**Find this document incomplete?** Leave a comment!
:::
###### tags: `Templates` `Documentation`