---
# System prepended metadata

title: 智慧音箱 2023
tags: [Documentation, Templates, Project 2023]

---

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


![downloads](https://img.shields.io/github/downloads/atom/atom/total.svg)
![build](https://img.shields.io/appveyor/ci/:user/:repo.svg)
![chat](https://img.shields.io/discord/:serverId.svg)


[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. 第一次設定桌布時會出現(之後重灌都會
   ![](https://i.imgur.com/jqgZoFf.jpg)
6. 本週遇到的困境是無法連線到wifi (時區雖然已調成臺灣但時間還是錯的
   ![](https://i.imgur.com/db4Otw5.jpg)

### 03/23 

1. 我們試圖利用網路上資源以及歷年學長姐們的建議去解決 - 「***樹梅派無法連線網路之問題***」

### 04/20 
1. 好像查到了ip位址，不確定，應該不是
   ![](https://i.imgur.com/KKMp9nr.jpg)
2. 不管做什麼都失敗QQ
   ![](https://i.imgur.com/eGI8PVt.jpg)
3. 真的查了很多資料   
   ![](https://i.imgur.com/TuUzXE3.png)
  
### 05/04 

1. 得知我們使用的樹莓派本身沒有網路，需要再另接網卡，而我們先前買的網卡與該板子不相容
2. 暫時改用去年學長使用的器材
3. 著手查詢Google AIY Voice Kit的相關資料


### 05/11 

1. 改用Google AIY Voice Kit，但是因為當下找不到適當的HDMI轉Micro HDMI的轉接頭，而嘗試不用連接螢幕的方式進行設定，但不行。
2. 該塊樹莓派似乎不能用預設密碼登入

### 05/25 

1. 今天我們重啟數據機重新設定基本網路設定，終於使得樹梅派連接到我們該空間所使用的實驗室網路。

![](https://hackmd.io/_uploads/B1Y6i9nHn.jpg)

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的數據是有在跑的
![](https://hackmd.io/_uploads/B10GRcq_h.png)

![](https://hackmd.io/_uploads/S1qxR5cdh.png)


### 07/05 
成功測試完成語音指令基礎功能(包含LED的開燈、關燈、拜拜(**結束功能**)指令)
* **開燈**
![](https://hackmd.io/_uploads/BJtxZ3fF3.png)
* **關燈**
![](https://hackmd.io/_uploads/rkX7ZhMYh.png)
* **結束功能**
![](https://hackmd.io/_uploads/HyCSZ2MKn.png)
* **程式碼**
![](https://hackmd.io/_uploads/H1itW3GKh.png)

### 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迴圈偵測喚醒詞）
![](https://hackmd.io/_uploads/SJ4QVHpFh.png)
* 測試結果
![](https://hackmd.io/_uploads/BJslpQ6F2.png)

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

### 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** 那行便是主要更改且設定語言之程式 〉
![](https://hackmd.io/_uploads/Hk_kDILc2.jpg =600x200)

### 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`
