資料介紹
描述
簡介:Arduino物聯網云
Arduino IoT Cloud是一個平臺,可讓任何人輕松構建物聯網連接對象。為了使用 Alexa 控制我們的電視,我們還將使用官方 Arduino Alexa Skill 。
如果您是 Arduino IoT Cloud 的新手,我們建議您先看看這個介紹性項目,它將為您提供概述并指導您完成設置一個受支持的板、IoT Cloud Things和Properties的過程,并幫助您在船上。
第 1 部分:如何控制電視機
控制任何類型的電視最簡單的方法就是把我們當成它自己的遙控紅外控制器。為此,我們必須監聽遙控器將發送的信號,捕獲數據并使用我們的 Arduino 板模仿它。電路組裝好后,我們將把這個草圖上傳到我們的電路板上。它將遠程按鈕按下產生的 IR 信號突發轉換為無符號整數數組。讓我們將遙控器指向我們構建的 Arduino IR 接收器,然后按以下按鈕:
- 電源/待機
- 從 1 到 9 的頻道
- 提高音量
- 音量減小
- 沉默的
- 頻道向上
- 頻道向下
我們將看到來自串行監視器的值,報告為rawData
。現在讓我們將它們記錄到一個文本文件中,并為每個列表分配其自己的數組名稱(chan1
等等chan2
)。以下數值僅供參考,由三星電視遙控器生成。
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 物聯網云
在Arduino IoT Cloud主頁面中,我們將創建一個新事物并為其分配一個有意義的名稱。我們稱之為TVRemoteController 。然后我們將選擇我們要使用的板。在本教程中,我們使用了 Arduino Nano 33 IoT,但如果您有另一個兼容的板也可以,請記住引腳分配和 IR 庫的行為可能會發生變化。如果此時您看不到您的電路板,您可能跳過了我們上面提到的入門過程,如果是這種情況,請返回該過程。
完成后,我們將向Thing添加一個屬性,它將代表我們的電視機。在Smart Home類別下,選擇“TV”作為 Property Type,將其設置為“Read & Write”,在“Update”下選擇“When the value changes”。
這就是我們的事物的屬性視圖在這一點上的樣子:
第 3 部分:Arduino 網頁編輯器
是時候點擊“EDIT SKETCH”按鈕了,它將帶我們進入 Web Editor,我們可以在其中向 IoT Cloud 自動生成的 Sketch 添加一些自定義代碼。
我們必須包括的第一件事是由 Ken Shirriff 編寫的IR Remote庫。
#include
然后我們必須為我們的通道設置一個二維數組,為我們需要的命令設置 6 個數組。如果您還記得,在第 1 部分中,我們捕獲了一些 IR 數據,我們現在將使用這些數據來填充我們的陣列
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;
我們還需要一個函數來發送 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 屬性時發送 IR 命令。例如,如果音量增加,我們必須虛擬按下按鈕Volume Up,如果頻道設置為 7,我們必須發送頻道 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
我們現在需要可以從Apple App Store或Google Play Store下載的Amazon Alexa 應用程序。安裝后,使用您現有的帳戶登錄或創建一個新帳戶。
讓我們完成安裝 Arduino Alexa Skill 并對其進行配置以訪問和控制我們的電視的必要步驟。我們將按照下面的圖片順序查看所有必需的步驟。
我們完成了,現在是時候對我們的電視進行語音控制,詢問類似的問題
- “Alexa,把電視音量調大。”
- “Alexa,靜音電視”或“Alexa,取消靜音電視”。
- “Alexa,電視上的下一個頻道。”
玩得開心,玩 Alexa 和 IoT Cloud。如果您有任何問題和/或構建此項目,請在下面的評論中告訴我們。
?
- Android和Arduino的電視、DVD和音頻控制
- 由Alexa Echo控制的Arduino機器人
- Arduino IoT Cloud ESP32 Alexa Control智能家居
- 使用Google Assistant和Alexa制作基于物聯網的Arduino智能家居
- Arduino物聯網云智能家居與Alexa使用NodeMCU
- 使用Arduino Cloud隨時隨地了解您家的溫度
- IoT ONE Nixie Clock Arduino Cloud背光控制
- 在Arduino IoT Cloud的幫助下創建植物通訊器
- 創建您自己的Alexa
- 使用Alexa和Arduino的動畫智能燈
- 使用MKR IoT載體的Arduino燈控制器
- Hello Alexa使用OLED顯示模塊和Arduino
- 使用Alexa/Google Home/Siri控制您的非智能空調
- 基于Cloud Connected Zigbee IoT ThermostatSensing的參考設計
- 如何使用Alexa語音控制電視遙控器 11次下載
- Arduino提供的PWM控制功能入門(1) 1932次閱讀
- 如何使用Python和PinPong庫控制Arduino 718次閱讀
- Arduino IoT Cloud開始與ChatGPT聯機運作 1439次閱讀
- Arduino I/O函數詳解 2342次閱讀
- 如何利用Arduino UNO設計無RTC模塊簡單時鐘 3962次閱讀
- 如何設置Arduino IoT將消息發送到云板顯示器 2121次閱讀
- 使用Wii nunchuk手柄連接Arduino控制伺服電機的方法 3697次閱讀
- 如何使用Arduino Nano控制紅綠燈 5001次閱讀
- 如何使用L298N和Arduino板控制直流電機 1w次閱讀
- 如何從網頁控制arduino? 3836次閱讀
- 基于Arduino UNO和HC-05藍牙模塊控制伺服電機 4824次閱讀
- 如何使用Arduino創建停車門禁控制系統? 5060次閱讀
- dfrobot Arduino Nano控制板介紹 5611次閱讀
- arduino如何控制舵機及詳細步驟 16.3w次閱讀
- arduino連接顯示屏方法詳解 4.7w次閱讀
下載排行
本周
- 1使用單片機實現七人表決器的程序和仿真資料免費下載
- 2.96 MB | 44次下載 | 免費
- 2聯想E46L DAOLL6筆記本電腦圖紙
- 1.10 MB | 2次下載 | 5 積分
- 3MATLAB繪圖合集
- 27.12 MB | 2次下載 | 5 積分
- 4PR735,使用UCC28060的600W交錯式PFC轉換器
- 540.03KB | 1次下載 | 免費
- 5UCC38C42 30W同步降壓轉換器參考設計
- 428.07KB | 1次下載 | 免費
- 6DV2004S1/ES1/HS1快速充電開發系統
- 2.08MB | 1次下載 | 免費
- 7模態分解合集matlab代碼
- 3.03 MB | 1次下載 | 2 積分
- 8美的電磁爐維修手冊大全
- 1.56 MB | 1次下載 | 5 積分
本月
- 1使用單片機實現七人表決器的程序和仿真資料免費下載
- 2.96 MB | 44次下載 | 免費
- 2UC3842/3/4/5電源管理芯片中文手冊
- 1.75 MB | 15次下載 | 免費
- 3DMT0660數字萬用表產品說明書
- 0.70 MB | 13次下載 | 免費
- 4TPS54202H降壓轉換器評估模塊用戶指南
- 1.02MB | 8次下載 | 免費
- 5STM32F101x8/STM32F101xB手冊
- 1.69 MB | 8次下載 | 1 積分
- 6HY12P65/HY12P66數字萬用表芯片規格書
- 0.69 MB | 6次下載 | 免費
- 7華瑞昇CR216芯片數字萬用表規格書附原理圖及校正流程方法
- 0.74 MB | 6次下載 | 3 積分
- 8華瑞昇CR215芯片數字萬用表原理圖
- 0.21 MB | 5次下載 | 3 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935119次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420061次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233084次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191367次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183335次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81581次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73807次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65987次下載 | 10 積分
評論
查看更多