資料介紹
描述
簡介:Arduino物聯(lián)網(wǎng)云
Arduino IoT Cloud是一個(gè)平臺,可讓任何人輕松構(gòu)建物聯(lián)網(wǎng)連接對象。為了使用 Alexa 控制我們的電視,我們還將使用官方 Arduino Alexa Skill 。
如果您是 Arduino IoT Cloud 的新手,我們建議您先看看這個(gè)介紹性項(xiàng)目,它將為您提供概述并指導(dǎo)您完成設(shè)置一個(gè)受支持的板、IoT Cloud Things和Properties的過程,并幫助您在船上。
第 1 部分:如何控制電視機(jī)
控制任何類型的電視最簡單的方法就是把我們當(dāng)成它自己的遙控紅外控制器。為此,我們必須監(jiān)聽遙控器將發(fā)送的信號,捕獲數(shù)據(jù)并使用我們的 Arduino 板模仿它。電路組裝好后,我們將把這個(gè)草圖上傳到我們的電路板上。它將遠(yuǎn)程按鈕按下產(chǎn)生的 IR 信號突發(fā)轉(zhuǎn)換為無符號整數(shù)數(shù)組。讓我們將遙控器指向我們構(gòu)建的 Arduino IR 接收器,然后按以下按鈕:
- 電源/待機(jī)
- 從 1 到 9 的頻道
- 提高音量
- 音量減小
- 沉默的
- 頻道向上
- 頻道向下
我們將看到來自串行監(jiān)視器的值,報(bào)告為rawData
。現(xiàn)在讓我們將它們記錄到一個(gè)文本文件中,并為每個(gè)列表分配其自己的數(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)網(wǎng)云
在Arduino IoT Cloud主頁面中,我們將創(chuàng)建一個(gè)新事物并為其分配一個(gè)有意義的名稱。我們稱之為TVRemoteController 。然后我們將選擇我們要使用的板。在本教程中,我們使用了 Arduino Nano 33 IoT,但如果您有另一個(gè)兼容的板也可以,請記住引腳分配和 IR 庫的行為可能會(huì)發(fā)生變化。如果此時(shí)您看不到您的電路板,您可能跳過了我們上面提到的入門過程,如果是這種情況,請返回該過程。
完成后,我們將向Thing添加一個(gè)屬性,它將代表我們的電視機(jī)。在Smart Home類別下,選擇“TV”作為 Property Type,將其設(shè)置為“Read & Write”,在“Update”下選擇“When the value changes”。
這就是我們的事物的屬性視圖在這一點(diǎn)上的樣子:

第 3 部分:Arduino 網(wǎng)頁編輯器
是時(shí)候點(diǎn)擊“EDIT SKETCH”按鈕了,它將帶我們進(jìn)入 Web Editor,我們可以在其中向 IoT Cloud 自動(dòng)生成的 Sketch 添加一些自定義代碼。
我們必須包括的第一件事是由 Ken Shirriff 編寫的IR Remote庫。
#include
然后我們必須為我們的通道設(shè)置一個(gè)二維數(shù)組,為我們需要的命令設(shè)置 6 個(gè)數(shù)組。如果您還記得,在第 1 部分中,我們捕獲了一些 IR 數(shù)據(jù),我們現(xiàn)在將使用這些數(shù)據(jù)來填充我們的陣列
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] = {...};
然后讓我們設(shè)置 IR 庫和所需的頻率(對于這種應(yīng)用程序,它始終是 38KHz)
IRsend irsend;
const int freq = 38;
我們還需要一個(gè)函數(shù)來發(fā)送 IR 命令并閃爍內(nèi)置 LED(在此階段主要用于調(diào)試目的)。使用的延遲值將取決于電視的品牌和型號,因此如果事情沒有按預(yù)期工作(錯(cuò)誤的命令或未收到命令),請隨意調(diào)整它。
void sendIR(const unsigned int buf[]) {
digitalWrite(LED_BUILTIN, HIGH);
irsend.sendRaw(buf, 67, freq);
delay(300);
digitalWrite(LED_BUILTIN, LOW);
}
最后一步是onTvChange()
使用一些自定義代碼完成生成的回調(diào),以便在 Alexa 命令更改 TV 屬性時(shí)發(fā)送 IR 命令。例如,如果音量增加,我們必須虛擬按下按鈕Volume Up,如果頻道設(shè)置為 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 Store或Google Play Store下載的Amazon Alexa 應(yīng)用程序。安裝后,使用您現(xiàn)有的帳戶登錄或創(chuàng)建一個(gè)新帳戶。
讓我們完成安裝 Arduino Alexa Skill 并對其進(jìn)行配置以訪問和控制我們的電視的必要步驟。我們將按照下面的圖片順序查看所有必需的步驟。

我們完成了,現(xiàn)在是時(shí)候?qū)ξ覀兊碾娨曔M(jìn)行語音控制,詢問類似的問題
- “Alexa,把電視音量調(diào)大。”
- “Alexa,靜音電視”或“Alexa,取消靜音電視”。
- “Alexa,電視上的下一個(gè)頻道?!?/font>
玩得開心,玩 Alexa 和 IoT Cloud。如果您有任何問題和/或構(gòu)建此項(xiàng)目,請?jiān)谙旅娴脑u論中告訴我們。
?
- Android和Arduino的電視、DVD和音頻控制
- 由Alexa Echo控制的Arduino機(jī)器人
- Arduino IoT Cloud ESP32 Alexa Control智能家居
- 使用Google Assistant和Alexa制作基于物聯(lián)網(wǎng)的Arduino智能家居
- Arduino物聯(lián)網(wǎng)云智能家居與Alexa使用NodeMCU
- 使用Arduino Cloud隨時(shí)隨地了解您家的溫度
- IoT ONE Nixie Clock Arduino Cloud背光控制
- 在Arduino IoT Cloud的幫助下創(chuàng)建植物通訊器
- 創(chuàng)建您自己的Alexa
- 使用Alexa和Arduino的動(dòng)畫智能燈
- 使用MKR IoT載體的Arduino燈控制器
- Hello Alexa使用OLED顯示模塊和Arduino
- 使用Alexa/Google Home/Siri控制您的非智能空調(diào)
- 基于Cloud Connected Zigbee IoT ThermostatSensing的參考設(shè)計(jì)
- 如何使用Alexa語音控制電視遙控器 11次下載
- Arduino提供的PWM控制功能入門(1) 2721次閱讀
- 如何使用Python和PinPong庫控制Arduino 1033次閱讀
- Arduino IoT Cloud開始與ChatGPT聯(lián)機(jī)運(yùn)作 1642次閱讀
- Intel Developer Cloud之Telemetry數(shù)據(jù)分析 639次閱讀
- Arduino I/O函數(shù)詳解 2587次閱讀
- 如何利用Arduino UNO設(shè)計(jì)無RTC模塊簡單時(shí)鐘 4425次閱讀
- 如何設(shè)置Arduino IoT將消息發(fā)送到云板顯示器 2303次閱讀
- 如何使用Arduino Nano控制紅綠燈 5412次閱讀
- 如何使用L298N和Arduino板控制直流電機(jī) 1w次閱讀
- 如何從網(wǎng)頁控制arduino? 4186次閱讀
- 基于Arduino UNO和HC-05藍(lán)牙模塊控制伺服電機(jī) 5094次閱讀
- 如何使用Arduino創(chuàng)建停車門禁控制系統(tǒng)? 5302次閱讀
- dfrobot Arduino Nano控制板介紹 5954次閱讀
- arduino如何控制舵機(jī)及詳細(xì)步驟 16.5w次閱讀
- arduino連接顯示屏方法詳解 4.7w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評論