電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
創(chuàng)作
電子發(fā)燒友網>電子資料下載>電子資料>使用Alexa和Arduino IoT Cloud完全控制您的電視

使用Alexa和Arduino IoT Cloud完全控制您的電視

2022-11-02 | zip | 0.19 MB | 次下載 | 免費

資料介紹

描述

注意:本教程可能已過時,請到此處獲取更新版本。

簡介:Arduino物聯(lián)網

Arduino IoT Cloud是一個平臺,可讓任何人輕松構建物聯(lián)網連接對象。為了使用 Alexa 控制我們的電視,我們還將使用官方 Arduino Alexa Skill 。

如果您是 Arduino IoT Cloud 的新手,我們建議您先看看這個介紹性項目,它將為您提供概述并指導您完成設置一個受支持的板、IoT Cloud ThingsProperties的過程,并幫助您在船上。

第 1 部分:如何控制電視機

控制任何類型的電視最簡單的方法就是把我們當成它自己的遙控紅外控制器。為此,我們必須監(jiān)聽遙控器將發(fā)送的信號,捕獲數(shù)據并使用我們的 Arduino 板模仿它。電路組裝好后,我們將把這個草圖上傳到我們的電路板上。它將遠程按鈕按下產生的 IR 信號突發(fā)轉換為無符號整數(shù)數(shù)組。讓我們將遙控器指向我們構建的 Arduino IR 接收器,然后按以下按鈕:

  • 從 1 到 9 的頻道
  • 提高音量
  • 音量減小
  • 沉默的
  • 頻道向上
  • 頻道向下

我們將看到來自串行監(jiān)視器的值,報告為rawData現(xiàn)在讓我們將它們記錄到一個文本文件中,并為每個列表分配其自己的數(shù)組名稱(chan1等等chan2)。以下數(shù)值僅供參考,由三星電視遙控器生成。

CHANNEL 1
unsigned int chan1[67] = {4450,4500, 550,1700, 500,1700, 550,1700, 550,550, 550,600, 500,600, 550,550, 550,600, 500,1700, 550,1700, 550,1700, 500,600, 500,600, 550,550, 550,600, 500,600, 550,550, 550,600, 500,1700, 550,600, 500,600, 550,550, 550,600, 500,600, 550,1700, 500,1700, 550,600, 500,1700, 550,1700, 550,1700, 500,1700, 550,1700, 500};
CHANNEL 2
unsigned int chan2[67] = {4500,4500, 550,1700, 500,1700, 550,1700, 550,550, 550,550, 550,600, 500,600, 550,600, 500,1700, 550,1700, 500,1700, 550,600, 500,600, 550,550, 550,600, 500,600, 550,1700, 500,600, 550,1700, 500,600, 550,550, 550,600, 500,600, 550,550, 550,650, 450,1700, 550,600, 500,1700, 550,1700, 500,1700, 550,1700, 550,1700, 500};
CHANNEL 3
unsigned int chan3[67] = {4500,4500, 500,1700, 550,1700, 550,1700, 500,600, 550,550, 550,600, 500,600, 550,550, 550,1700, 500,1700, 550,1700, 550,550, 550,600, 500,600, 550,550, 550,600, 500,600, 550,1700, 500,1700, 550,600, 550,550, 550,550, 550,600, 550,550, 550,1700, 500,600, 550,550, 550,1700, 550,1650, 550,1700, 550,1700, 500,1700, 600};
CHANNEL 4
unsigned int chan4[67] = {4450,4450, 550,1700, 550,1700, 500,1700, 550,600, 500,600, 550,550, 600,550, 500,600, 550,1700, 500,1700, 550,1700, 550,550, 550,600, 500,600, 550,550, 550,600, 500,600, 550,550, 550,600, 500,1700, 550,600, 500,600, 550,550, 550,600, 500,1700, 550,1700, 550,1700, 500,600, 550,1700, 500,1700, 550,1700, 550,1700, 500}; 
CHANNEL 5
unsigned int chan5[67] = {4500,4500, 500,1700, 550,1700, 550,1700, 550,550, 550,550, 550,550, 600,550, 550,550, 550,1700, 550,1650, 550,1700, 550,550, 550,600, 500,600, 550,550, 550,600, 500,1700, 550,600, 500,600, 550,1700, 500,600, 550,550, 550,600, 550,550, 550,550, 550,1700, 550,1700, 500,600, 550,1700, 500,1700, 550,1700, 550,1700, 500}; 
CHANNEL 6
unsigned int chan6[67] = {4500,4500, 550,1650, 550,1700, 550,1700, 500,600, 550,550, 550,600, 500,600, 500,600, 550,1700, 500,1700, 550,1700, 550,550, 600,550, 500,600, 550,550, 600,550, 550,550, 550,1700, 500,600, 550,1700, 500,600, 550,550, 550,600, 500,600, 550,1700, 500,600, 550,1700, 500,600, 550,1650, 600,1650, 550,1700, 550,1650, 600}; 
CHANNEL 7
unsigned int chan7[67] = {4500,4500, 550,1700, 500,1700, 550,1750, 500,550, 550,600, 500,650, 500,550, 550,550, 550,1750, 500,1700, 500,1700, 550,650, 450,650, 500,550, 550,600, 500,650, 500,550, 550,600, 500,1700, 550,1750, 500,600, 500,550, 550,600, 500,650, 500,1750, 450,1700, 550,600, 500,650, 500,1700, 500,1700, 550,1750, 500,1700, 500}; 
CHANNEL 8
unsigned int chan8[67] = {4450,4550, 500,1700, 550,1700, 550,1650, 550,600, 500,600, 550,550, 550,600, 500,600, 550,1700, 500,1700, 550,1700, 550,550, 550,600, 500,600, 550,550, 550,600, 500,1700, 550,600, 500,1700, 550,1700, 500,600, 550,550, 550,650, 450,600, 550,550, 550,1700, 550,550, 550,600, 500,1700, 550,1700, 550,1700, 500,1700, 550}; 
CHANNEL 9
unsigned int chan9[67] = {4450,4500, 550,1700, 550,1700, 500,1700, 550,600, 500,600, 550,550, 550,600, 500,600, 550,1700, 500,1700, 550,1700, 500,600, 550,550, 550,600, 500,600, 550,550, 550,600, 500,1700, 550,1700, 550,1700, 500,600, 550,550, 550,550, 550,600, 500,1700, 550,600, 500,600, 550,550, 550,1700, 550,1700, 500,1700, 550,1700, 550}; 
VOLUME UP
unsigned int volUp[67] = {4500,4500, 550,1700, 500,1750, 500,1700, 550,600, 500,600, 500,600, 550,550, 550,600, 500,1700, 550,1700, 550,1700, 500,650, 450,600, 550,600, 500,650, 450,650, 500,1700, 500,1750, 500,1750, 500,550, 550,600, 500,650, 500,550, 550,600, 500,650, 500,600, 500,600, 500,1700, 550,1750, 450,1750, 500,1700, 550,1700, 500}; 
VOLUME DOWN
unsigned int volDown[67] = {4450,4550, 500,1700, 550,1700, 550,1650, 550,600, 550,550, 550,600, 500,600, 500,600, 550,1700, 500,1700, 550,1700, 550,550, 550,600, 500,600, 550,550, 550,600, 500,1700, 550,1700, 550,600, 500,1700, 550,600, 500,600, 500,600, 550,550, 550,600, 500,650, 500,1700, 500,650, 500,1700, 500,1750, 500,1700, 550,1700, 500}; 
CHANNEL UP
unsigned int chanUp[67] = {4500,4450, 550,1700, 550,1650, 550,1700, 550,550, 550,600, 550,550, 550,550, 600,550, 550,1650, 550,1700, 550,1650, 600,550, 550,550, 550,600, 500,600, 550,550, 550,550, 550,1700, 550,550, 600,550, 550,1650, 550,600, 550,550, 550,550, 550,1700, 550,550, 550,1700, 550,1700, 550,550, 550,1650, 600,1650, 550,1700, 550}; 
CHANNEL DOWN
unsigned int chanDown[67] = {4500,4450, 600,1650, 550,1700, 550,1650, 550,600, 550,550, 550,550, 550,600, 500,600, 550,1700, 500,1700, 550,1700, 550,550, 550,600, 550,550, 550,550, 550,550, 600,550, 550,550, 550,600, 500,600, 550,1650, 600,550, 550,550, 550,550, 600,1650, 550,1700, 500,1700, 600,1650, 550,550, 600,1650, 550,1700, 500,1700, 550};

第 2 部分:Arduino 物聯(lián)網云

Arduino IoT Cloud主頁面中,我們將創(chuàng)建一個新事物并為其分配一個有意義的名稱。我們稱之為TVRemoteController 。然后我們將選擇我們要使用的板。在本教程中,我們使用了 Arduino Nano 33 IoT,但如果您有另一個兼容的板也可以,請記住引腳分配和 IR 庫的行為可能會發(fā)生變化。如果此時您看不到您的電路板,您可能跳過了我們上面提到的入門過程,如果是這種情況,請返回該過程。

完成后,我們將向Thing添加一個屬性,它將代表我們的電視機。Smart Home類別下,選擇“TV”作為 Property Type,將其設置為“Read & Write”,在“Update”下選擇“When the value changes”。

這就是我們的事物的屬性視圖在這一點上的樣子:

poYBAGNgvm6AO9rdAADW4Nh6aIY160.png
我們新創(chuàng)建的 Thing 的屬性視圖
?

第 3 部分:Arduino 網頁編輯器

是時候點擊“EDIT SKETCH”按鈕了,它將帶我們進入 Web Editor,我們可以在其中向 IoT Cloud 自動生成的 Sketch 添加一些自定義代碼。

我們必須包括的第一件事是由 Ken Shirriff 編寫的IR Remote庫。

#include 

然后我們必須為我們的通道設置一個二維數(shù)組,為我們需要的命令設置 6 個數(shù)組。如果您還記得,在第 1 部分中,我們捕獲了一些 IR 數(shù)據,我們現(xiàn)在將使用這些數(shù)據來填充我們的陣列

const unsigned int chan[9][67] = {
 {chan1},
 {chan2},
 {chan3},
 {chan4},
 {chan5},
 {chan6},
 {chan7},
 {chan8},
 {chan9}
};
const unsigned int volUp[67] = {...};  
const unsigned int volDown[67] = {...};
const unsigned int chanUp[67] = {...}; 
const unsigned int chanDown[67] = {...};
const unsigned int onoff[67] = {...};
const unsigned int mute[67] = {...};

然后讓我們設置 IR 庫和所需的頻率(對于這種應用程序,它始終是 38KHz)

IRsend irsend;
const int freq = 38;

我們還需要一個函數(shù)來發(fā)送 IR 命令并閃爍內置 LED(在此階段主要用于調試目的)。使用的延遲值將取決于電視的品牌和型號,因此如果事情沒有按預期工作(錯誤的命令或未收到命令),請隨意調整它。

void sendIR(const unsigned int buf[]) {
 digitalWrite(LED_BUILTIN, HIGH);
 irsend.sendRaw(buf, 67, freq);
 delay(300);
 digitalWrite(LED_BUILTIN, LOW);
}

最后一步是onTvChange()使用一些自定義代碼完成生成的回調,以便在 Alexa 命令更改 TV 屬性時發(fā)送 IR 命令。例如,如果音量增加,我們必須虛擬按下按鈕Volume Up,如果頻道設置為 7,我們必須發(fā)送頻道 7 按鈕的序列,依此類推。

void onTvChange() {
 Serial.println("==================");
 Serial.println("Switch:"+String(tv.getSwitch()));
 Serial.println("Volume:"+String(tv.getVolume()));
 Serial.println("Channel:"+String(tv.getChannel()));
 Serial.println("Mute:"+String(tv.getMute()));
 Serial.println("==================");
 if (first){
     prevSwitch = tv.getSwitch();
     prevVolume = tv.getVolume();
     prevChannel = tv.getChannel();
     prevMute = tv.getMute();
     first = false;
     return;
 } 
 // Volume changed
 if (tv.getVolume() > prevVolume) {
   tv.setMute(false);
   prevMute = false;
   for (int k = prevVolume + 1 ; k<=tv.getVolume(); k++) {
     sendIR(volUp);
     Serial.println("Volume requested:"+String(tv.getVolume())+" Set:"+String(k));  
   }
   prevVolume = tv.getVolume();
 }
 else if (tv.getVolume() < prevVolume) {
   tv.setMute(false);
   prevMute = false;
   for (int k = prevVolume - 1; k>=tv.getVolume(); k--) {
     sendIR(volDown);
     Serial.println("Volume changed:"+String(tv.getVolume())+" Set:"+String(k));  
   }
   prevVolume = tv.getVolume();
 }
 // Mute changed
 if (tv.getMute() != prevMute && tv.getMute()) {
   prevMute = tv.getMute();
   sendIR(mute);
   Serial.println("Mute changed:"+String(tv.getMute()));
 }
 else if (tv.getMute() != prevMute && !tv.getMute()) {
   prevMute = tv.getMute();
   sendIR(mute);
   Serial.println("Mute changed:"+String(tv.getMute()));
 }
 // Channel changed
 if (tv.getChannel() != prevChannel) {
   int newChannel = tv.getChannel();
   if (newChannel > 0 && newChannel < 10) {
     sendIR(chan[newChannel-1]);
   } else if (newChannel > 9) {
     if (newChannel > prevChannel) {
       for (int ch = prevChannel; ch < newChannel; ch++) {
         sendIR(chanUp);
         Serial.println("Chan requested:"+String(newChannel)+" Set:"+String(ch));  
       }  
     } else if (newChannel < prevChannel) {
         for (int ch = prevChannel; ch > newChannel; ch--) {
           sendIR(chanDown);
           Serial.println("Chan requested:"+String(newChannel)+" Set:"+String(ch));  
         }
     }
   }
   prevChannel = newChannel;
   Serial.println("Channel changed:"+String(tv.getChannel()));
 }
 // On/Off changed
 if (tv.getSwitch() != prevSwitch) {
   prevSwitch = tv.getSwitch();
   if (tv.getSwitch()) {
     sendIR(chan[6]);
   } else {
     sendIR(onoff);
   }
   Serial.println("Switch changed:"+String(tv.getSwitch()));
 }

第 4 部分:亞馬遜 Alexa

我們現(xiàn)在需要可以從Apple App StoreGoogle Play Store下載Amazon Alexa 應用程序。安裝后,使用您現(xiàn)有的帳戶登錄或創(chuàng)建一個新帳戶。

讓我們完成安裝 Arduino Alexa Skill 并對其進行配置以訪問和控制我們的電視的必要步驟。我們將按照下面的圖片順序查看所有必需的步驟。

?
?
?
poYBAGNgvnSAC-I8AAB1qTpB_zQ179.png
?
1 / 11 ? 1/11:點擊“設備”
?

我們完成了,現(xiàn)在是時候對我們的電視進行語音控制,詢問類似的問題

  • “Alexa,把電視音量調大。”
  • “Alexa,靜音電視”或“Alexa,取消靜音電視”。
  • “Alexa,電視上的下一個頻道?!?/font>

玩得開心,玩 Alexa 和 IoT Cloud。如果您有任何問題和/或構建此項目,請在下面的評論中告訴我們。

?


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1無鉛焊接的可靠性
  2. 1.03 MB   |  5次下載  |  1 積分
  3. 2GBT1094.11-2022電力變壓器第11部分:干式變壓器
  4. 14.12 MB   |  3次下載  |  免費
  5. 3PT500齒輪傳動動力學綜合測試實驗臺
  6. 0.16 MB   |  3次下載  |  免費
  7. 4爬電距離和電氣間隙計算
  8. 0.75 MB   |  2次下載  |  1 積分
  9. 5SX1308應用電路圖與SX1308升壓電路圖
  10. 0.18 MB   |  1次下載  |  免費
  11. 6ADC參數(shù)單位換算
  12. 761.94KB   |  1次下載  |  免費
  13. 7串口工具UartAssist5.0.exe
  14. 0.60 MB   |  1次下載  |  免費
  15. 8UCC38C42 25瓦自諧振復位正激變換器
  16. 320.6KB   |  1次下載  |  免費

本月

  1. 1ACDC變換器的原理圖免費下載
  2. 0.26 MB   |  65次下載  |  免費
  3. 2無刷電機控制方案設計合作
  4. 1.05 MB   |  22次下載  |  免費
  5. 3美的超薄電磁爐TM-S1-09B主板原理圖
  6. 0.08 MB   |  20次下載  |  免費
  7. 4純電動汽?的主要部件及?作原理
  8. 5.76 MB   |  12次下載  |  5 積分
  9. 5GP328和GP88S對講機的維修實列資料合集免費下載
  10. 0.03 MB   |  10次下載  |  10 積分
  11. 6舒爾SLX4無線話筒接收機原理圖:二次變頻超外差部分
  12. 0.27 MB   |  8次下載  |  免費
  13. 7IP5385_DEMO開發(fā)資料
  14. 1.96 MB   |  7次下載  |  2 積分
  15. 8i.MX Linux開發(fā)實戰(zhàn)指南—基于野火i.MX系列開發(fā)板
  16. 17.86 MB   |  7次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935115次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
  4. 1.48MB  |  420061次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233084次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費下載
  8. 340992  |  191363次下載  |  10 積分
  9. 5十天學會AVR單片機與C語言視頻教程 下載
  10. 158M  |  183329次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81581次下載  |  10 積分
  13. 7Keil工具MDK-Arm免費下載
  14. 0.02 MB  |  73805次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65985次下載  |  10 積分