資料介紹
描述
到了我奶奶 90 歲生日的時(shí)候,我正在為送什么禮物給她而苦惱。她對(duì)我的生活產(chǎn)生了很大的影響,我想做一些事情來證明這一點(diǎn)。我知道我想以某種方式整合 Twilio,因?yàn)樗贻p時(shí)是Bell Telephone的接線員。然后它像一大堆電話一樣擊中了我。我將創(chuàng)建一個(gè)帶有可編程 WirelessSIM和 Grove 按鈕的硬件設(shè)備。當(dāng)奶奶按下 Grove 按鈕時(shí),語音呼叫將被路由到她的電話,接線員將告訴她我有多愛她并祝她生日快樂。?
我需要什么來送一些生日愛
對(duì)于此項(xiàng)目,您將需要以下組件:
- Twilio SIM 卡
- Twilio 電話號(hào)碼
- TwiML 容器
- Seeed Studio 的 Wio LTE Cat.1 開發(fā)板
- LTE 天線
- 鋰電池
- 微型 USB 數(shù)據(jù)線
- Seeed Studio Grove 按鈕
- 開發(fā)環(huán)境
- Wio LTE Arduino 庫(kù)
這是如何運(yùn)作的?
我想使用Wio LTE從我的Twilio SIM生成呼叫。Grove Button連接到 Wio LTE 并用于物理交互。單擊 Grove 按鈕時(shí),它將在 Twilio 中觸發(fā)回調(diào)。要進(jìn)行調(diào)用,我需要?jiǎng)?chuàng)建一些將響應(yīng)回調(diào)的TwiML 。然后,當(dāng)呼叫接通時(shí),我需要另一塊 TwiML,它將使用Amazon Polly播放文本轉(zhuǎn)語音消息。由于我們將電路板上的 SIM 卡連接到真實(shí)設(shè)備,因此我們將使用一些變通方法來播放消息。通過在 ` 上包含 `url` 屬性` Twilio 會(huì)在接通電話之前向接聽電話的人播放 TwiML。這被稱為耳語。
購(gòu)買 Twilio 號(hào)碼并注冊(cè) Twilio SIM
首先,購(gòu)買Twilio 電話號(hào)碼。此電話號(hào)碼將用于使用語音數(shù)據(jù)將呼叫從可編程無線SIM 路由到我祖母的電話。
從包裝中取出 Twilio SIM,注冊(cè)并激活您的 SIM 。
使用 Amazon Polly 創(chuàng)建文本轉(zhuǎn)語音 TwiML
我想使用TwiML創(chuàng)建文本轉(zhuǎn)語音消息。TwiML,或 Twilio 標(biāo)記語言,是一種基于 XML 的語言,它指示 Twilio 如何處理各種事件,例如來電和去電、SMS 消息和 MMS 消息。在構(gòu)建 Twilio 應(yīng)用程序時(shí),您將在將所需操作傳達(dá)給 Twilio 時(shí)使用 TwiML。TwiML Bin是一種無需自己創(chuàng)建和托管 Web 服務(wù)器即可與 TwiML 交互原型的方法。
為此,我使用了 TwiML 動(dòng)詞來創(chuàng)建一條消息,當(dāng)我的祖母接聽電話時(shí),該消息將被口頭表達(dá)。為了讓它更逼真,我使用語音屬性選擇了Amazon Polly語音,聽起來更逼真。
- 在 Twilio 控制臺(tái)中導(dǎo)航到運(yùn)行時(shí)
- 單擊TwiML 容器
- 單擊以添加新的 TwiML Bin
- 新建一個(gè)新的 TwiML
- 添加 動(dòng)詞
- 添加語音屬性以指定Amazon Polly語音
- 使用language 屬性指定語言
- 按保存
<Response>
<Say voice="Polly.Joey" language="en-US">Happy Birthday Gram! I love you.Say>
Response>
完成以下上述步驟后,您的 TwiML 應(yīng)如下所示。保存 TwiML Bin 并確保復(fù)制 TwiML Bin 的 URL,它會(huì)立即使用。
為您的 SIM 創(chuàng)建可編程語音 URL TwiML
文本轉(zhuǎn)語音部分已準(zhǔn)備就緒,接下來我需要使用 TwiML 從 SIM路由入站可編程語音呼叫。這些是設(shè)置它的步驟:
在 Programmable Voice & SMS 下,將Voice Url更改為TwiML
- 在 Twilio 控制臺(tái)中導(dǎo)航到可編程無線
- 在Overview中,選擇新注冊(cè)的 SIM
- 單擊可編程語音和短信選項(xiàng)卡
- 將下面的 TwiML 粘貼到框中
- 將您的 Twilio 電話號(hào)碼添加到Dial Verb的callerId屬性
將 TwiML Bin URL 粘貼到數(shù)字名詞的URL屬性中
<Response>
<Dial callerId="YOUR_TWILIO_NUMBER">
<Number url="TWIML_BIN_URL">{{To}}Number>
Dial>
Response>
偉大的!SIM 現(xiàn)在配置為使用 Twilio 電話號(hào)碼路由傳出語音呼叫,并使用文本到語音轉(zhuǎn)換為我的祖母朗讀自定義消息。毫無疑問,那是一口蛋糕。接下來讓我們把它做成一個(gè)物理設(shè)備。
硬件設(shè)置
打開Wio LTE開發(fā)板的包裝箱,然后使用提供的 Micro-USB 數(shù)據(jù)線將開發(fā)板連接到計(jì)算機(jī)。根據(jù)操作系統(tǒng)的不同,可能需要USB 驅(qū)動(dòng)程序才能連接到 Wio LTE。
將您注冊(cè)的Twilio SIM 卡插入開發(fā)板背面的 Wio LTE SIM 插槽中。
Wio LTE 盒子內(nèi)有一根 LTE 天線。從包裝中取出 LTE 天線,將 LTE 天線連接到 Wio LTE 背面,上面寫著LTE main 。
現(xiàn)在從包裝中取出Grove Button ,然后將 Grove Button 連接到 Wio LTE 的 D38 插座。
軟件環(huán)境設(shè)置
接下來下載Arduino IDE 。這將用于編程和上傳代碼到 Wio LTE。安裝 Arduino IDE 后,從 GitHub 下載Wio LTE Arduino 庫(kù)并按照本指南安裝庫(kù)。該庫(kù)是STM32F4 芯片的包裝器,它利用Arduino 核心并添加了 Quectel EC21-A調(diào)制解調(diào)器功能。
接下來將 Wio LTE 置于引導(dǎo)加載程序模式。需要啟用此模式才能將代碼上傳到電路板。要啟用引導(dǎo)加載程序模式:
按住電路板下方的BOOT0按鈕
按下電路板頂部的RST
釋放 BOOT0 按鈕以啟用引導(dǎo)加載程序模式
創(chuàng)建代碼
創(chuàng)建一個(gè)新的 Arduino 草圖(文件 -> 新建)。
首先添加 Wio LTE 庫(kù)文件wio_tracker.h并在setup()函數(shù)上方為Grove Button定義一個(gè)全局變量。接下來使用變量wio創(chuàng)建WioTracker的實(shí)例并創(chuàng)建一個(gè)計(jì)數(shù)器變量。計(jì)數(shù)器將用于對(duì)Grove Button 進(jìn)行去抖動(dòng),因此我們可以更好地控制 Grove Button 的交互。
#include "wio_tracker.h"
#define BUTTON_PIN (D38)
WioTracker wio = WioTracker();
int counter = 0;
setup()函數(shù)用于在啟動(dòng)時(shí)初始化程序的各個(gè)方面。pinMode()用于設(shè)置 Grove Button 連接到的物理引腳以及板期望的功能類型。然后該板會(huì)運(yùn)行其初始化過程并將 Twilio SIM 連接到蜂窩網(wǎng)絡(luò)。
void setup()
{
// Grove Button Setup
pinMode(BUTTON_PIN, INPUT);
// Wio LTE Power Up
SerialUSB.println("Wait for power on...");
wio.Power_On();
SerialUSB.println("Power On O.K!");
// Wio LTE Initialization
while (!wio.init()) {
delay(1000);
SerialUSB.println("Accessing network...");
}
SerialUSB.println("Initialize done...");
// Connect to the network
bool ret = wio.waitForNetworkRegister();
if (true == ret) {
SerialUSB.println("Network accessed!");
} else {
SerialUSB.println("Network failed!");
return;
}
SerialUSB.println("Ready!");
}
該程序的 Grove Button 邏輯是在loop()函數(shù)中創(chuàng)建的。該函數(shù)持續(xù)監(jiān)聽板的狀態(tài)變化。在這種情況下,它正在等待Grove Button 狀態(tài)改變。變量buttonState使用digitalRead()從板上的物理引腳讀取傳入的 Grove 按鈕狀態(tài)更改。
void loop()
{
// Define Grove Button state
int buttonState = digitalRead(BUTTON_PIN);
// Define the counter functionality
if (buttonState == 0) {
// Zero counter
counter = 0;
} else {
// Continue counter
counter++;
// Catch only 1 press, no duplicate calls
if (counter == 1) {
SerialUSB.println("Happy Birthday sent!");
wio.callUp("GRANDMA_PHONE_NUMBER");
}
}
// Restart
delay(100);
}
主要的if 語句管理傳入的狀態(tài)更改。計(jì)數(shù)器用作消除Grove Button抖動(dòng)的一種方式,因此只進(jìn)行一次調(diào)用。如果沒有去抖動(dòng)邏輯,程序?qū)⒃诎醋?Grove 按鈕時(shí)繼續(xù)每 100 毫秒調(diào)用一次。
當(dāng) Grove 按鈕未被按下時(shí),狀態(tài)“0”,計(jì)數(shù)器將重置為 0。
if (buttonState == 0) {
// Zero counter
counter = 0;
}
當(dāng)按下 Grove 按鈕時(shí),狀態(tài)“1”,計(jì)數(shù)器開始迭代。嵌套的 if 語句用于捕獲計(jì)數(shù)器創(chuàng)建的特定數(shù)字。當(dāng)抓到數(shù)字 1 時(shí),使用wio.callUp( "GRANDMA_PHONE_NUMBER") 向我的祖母撥打電話。 ?
else {
// Continue counter
counter++;
// Catch only 1 press, no duplicate calls
if (counter == 1) {
SerialUSB.println("Happy Birthday sent!");
wio.callUp("GRANDMA_PHONE_NUMBER");
}
}
這就是我們需要的所有代碼,將其傳輸?shù)?Wio LTE 板按上傳。
上傳完成后,斷開 Wio LTE 與 Micro-USB 數(shù)據(jù)線的連接。將鋰電池連接到板上。
代碼回顧
#include "wio_tracker.h"
#define BUTTON_PIN (D38)
WioTracker wio = WioTracker();
int counter = 0;
void setup()
{
// Grove Button Setup
pinMode(BUTTON_PIN, INPUT);
// Wio LTE Setup
SerialUSB.println("Wait for power on...");
wio.Power_On();
SerialUSB.println("Power On O.K!");
// Wio LTE Initialization
while (!wio.init()) {
delay(1000);
SerialUSB.println("Accessing network...");
}
SerialUSB.println("Initialize done...");
// Connect to the network
bool ret = wio.waitForNetworkRegister();
if (true == ret) {
SerialUSB.println("Network accessed!");
} else {
SerialUSB.println("Network failed!");
return;
}
SerialUSB.println("Ready!");
}
void loop()
{
// Define Grove Button state
int buttonState = digitalRead(BUTTON_PIN);
// Define the counter functionality
if (buttonState == 0) {
// Zero counter
counter = 0;
} else {
// Continue counter
counter++;
// Catch only 1 press, no duplicate calls
if (counter == 1) {
SerialUSB.println("Happy Birthday sent!");
wio.callUp("GRANDMA_PHONE_NUMBER");
}
}
delay(100);
}
把它裝箱
在派對(duì)上,我把電路板、電池和 LTE 天線放在一個(gè)小盒子里,讓它更像樣。
思緒
創(chuàng)建這個(gè)項(xiàng)目后,我意識(shí)到這對(duì)可能相距很遠(yuǎn)的個(gè)人很有用。并且可以使用音頻文件代替文本轉(zhuǎn)語音來發(fā)送個(gè)人消息,例如反向發(fā)送語音郵件。發(fā)送一封情書并提醒您關(guān)心的其他人很重要。您正在使用可編程無線構(gòu)建什么類型的#TwilioIoT 項(xiàng)目?隨時(shí)在Twitter上發(fā)表您的評(píng)論、問題和項(xiàng)目。不要忘記查看我的GitHub 上的完整項(xiàng)目。網(wǎng)上見,乘風(fēng)破浪。
?
- SG-8002CA可編程晶振
- 可編程控制器AC500用戶手冊(cè) 1次下載
- 可編程邏輯器件PLD課件下載 31次下載
- 基于可編程邏輯的SDRAM控制方法設(shè)計(jì) 8次下載
- 系統(tǒng)可編程閃存中的RISC微控制器LGT8XM 0次下載
- MAX3000A器件可編程邏輯設(shè)備系列 7次下載
- ADXL355低噪聲可編程文件下載 0次下載
- AC31可編程控制器硬件操作手冊(cè) 17次下載
- 三菱可編程邏輯控制器密碼破解軟件下載 6次下載
- 現(xiàn)場(chǎng)可編程門陣列簡(jiǎn)介 76次下載
- 可編程邏輯陣列fpga和cpld說明 25次下載
- 通信保密中的可編程應(yīng)用技術(shù)研究 4次下載
- 用可編程器件實(shí)現(xiàn)LED顯示屏的硬件掃描控制 21次下載
- 車載虛擬儀器可編程線控設(shè)備的設(shè)計(jì)與應(yīng)用
- 將系統(tǒng)內(nèi)編程(ISP)設(shè)備與一次可編程設(shè)備進(jìn)行比較,說明IS
- 什么是現(xiàn)場(chǎng)可編程邏輯陣列?它有哪些特點(diǎn)和應(yīng)用? 485次閱讀
- 可編程片上系統(tǒng)的基本特征和主要應(yīng)用 403次閱讀
- 可編程片上系統(tǒng)是什么意思 399次閱讀
- 現(xiàn)場(chǎng)可編程門陣列的原理和應(yīng)用 457次閱讀
- 現(xiàn)場(chǎng)可編程門陣列是什么 2217次閱讀
- 可編程器件的特點(diǎn)和發(fā)展歷程 671次閱讀
- 簡(jiǎn)單認(rèn)識(shí)現(xiàn)場(chǎng)可編程門陣列 681次閱讀
- 可編程邏輯器件測(cè)試方法 1160次閱讀
- 可編程電源的結(jié)構(gòu) 可編程電源的使用事項(xiàng) 856次閱讀
- 可編程電源的原理 可編程電源的優(yōu)缺點(diǎn) 2150次閱讀
- 可編程控制器的特點(diǎn)有哪些 8439次閱讀
- 可編程邏輯控制器是什么_可編程邏輯控制器原理 1w次閱讀
- 可編程電源應(yīng)用與選型詳解 1.3w次閱讀
- 可編程控制器基本知識(shí)_可編程控制器原理及應(yīng)用 5.8w次閱讀
- 可編程電源簡(jiǎn)介 2067次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 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)用手冊(cè)
- 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電氣工程師手冊(cè)免費(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)
評(píng)論
查看更多