×

带有可编程WirelessSIM和Grove按钮的硬件设备

消耗积分:0 | 格式:zip | 大小:1.61 MB | 2023-07-12

张旭

分享资料个

描述

到了我奶奶 90 岁生日的时候,我正在为送什么礼物给她而苦恼。她对我的生活产生了很大的影响,我想做一些事情来证明这一点。我知道我想以某种方式整合 Twilio,因为她年轻时是Bell Telephone的接线员然后它像一大堆电话一样击中了我。我将创建一个带有可编程 WirelessSIM和 Grove 按钮的硬件设备。当奶奶按下 Grove 按钮时,语音呼叫将被路由到她的电话,接线员将告诉她我有多爱她并祝她生日快乐。 

我需要什么来送一些生日爱

对于此项目,您将需要以下组件:

这是如何运作的?

我想使用Wio LTE从我的Twilio SIM生成呼叫Grove Button连接到 Wio LTE 并用于物理交互。单击 Grove 按钮时,它将在 Twilio 中触发回调。要进行调用,我需要创建一些将响应回调的TwiML 。然后,当呼叫接通时,我需要另一块 TwiML,它将使用Amazon Polly播放文本转语音消息由于我们将电路板上的 SIM 卡连接到真实设备,因此我们将使用一些变通方法来播放消息。通过在 ` 上包含 `url` 属性` Twilio 会在接通电话之前向接听电话的人播放 TwiML。这被称为耳语

购买 Twilio 号码并注册 Twilio SIM

首先,购买Twilio 电话号码此电话号码将用于使用语音数据将呼叫从可编程无线SIM 路由到我祖母的电话。

从包装中取出 Twilio SIM,注册并激活您的 SIM

使用 Amazon Polly 创建文本转语音 TwiML

我想使用TwiML创建文本转语音消息TwiML,或 Twilio 标记语言,是一种基于 XML 的语言,它指示 Twilio 如何处理各种事件,例如来电和去电、SMS 消息和 MMS 消息。在构建 Twilio 应用程序时,您将在将所需操作传达给 Twilio 时使用 TwiML。TwiML Bin是一种无需自己创建和托管 Web 服务器即可与 TwiML 交互原型的方法。

为此,我使用了 TwiML 动词来创建一条消息,当我的祖母接听电话时,该消息将被口头表达。为了让它更逼真,我使用语音属性选择了Amazon Polly语音,听起来更逼真。

 

<Response>
        <Say voice="Polly.Joey" language="en-US">Happy Birthday Gram! I love you.Say>
Response>

完成以下上述步骤后,您的 TwiML 应如下所示。保存 TwiML Bin 并确保复制 TwiML Bin 的 URL,它会立即使用。

为您的 SIM 创建可编程语音 URL TwiML

文本转语音部分已准备就绪,接下来我需要使用 TwiML 从 SIM路由入站可编程语音呼叫。这些是设置它的步骤:

在 Programmable Voice & SMS 下,将Voice Url更改TwiML

  • 在 Twilio 控制台中导航到可编程无线
  • Overview中,选择新注册的 SIM
  • 单击可编程语音和短信选项卡
  • 将下面的 TwiML 粘贴到框中
  • 将您的 Twilio 电话号码添加到Dial Verb的callerId属性

将 TwiML Bin URL 粘贴到数字名词的URL属性中


<Response>
    <Dial callerId="YOUR_TWILIO_NUMBER">
        <Number url="TWIML_BIN_URL">{{To}}Number>
    Dial>
Response>

伟大的!SIM 现在配置为使用 Twilio 电话号码路由传出语音呼叫,并使用文本到语音转换为我的祖母朗读自定义消息。毫无疑问,那是一口蛋糕。接下来让我们把它做成一个物理设备。

硬件设置

打开Wio LTE开发板的包装箱,然后使用提供的 Micro-USB 数据线将开发板连接到计算机。根据操作系统的不同,可能需要USB 驱动程序才能连接到 Wio LTE。

将您注册的Twilio SIM 卡插入开发板背面的 Wio LTE SIM 插槽中。

Wio LTE 盒子内有一根 LTE 天线。从包装中取出 LTE 天线,将 LTE 天线连接到 Wio LTE 背面,上面写着LTE main

现在从包装中取出Grove Button ,然后将 Grove Button 连接到 Wio LTE 的 D38 插座。

软件环境设置

接下来下载Arduino IDE 这将用于编程和上传代码到 Wio LTE。安装 Arduino IDE 后,从 GitHub 下载Wio LTE Arduino 库并按照本指南安装库该库是STM32F4 芯片的包装器,它利用Arduino 核心并添加了 Quectel EC21-A调制解调器功能。

 
 

接下来将 Wio LTE 置于引导加载程序模式。需要启用此模式才能将代码上传到电路板。要启用引导加载程序模式:

按住电路板下方的BOOT0按钮

按下电路板顶部的RST

释放 BOOT0 按钮以启用引导加载程序模式

创建代码

创建一个新的 Arduino 草图(文件 -> 新建)。

首先添加 Wio LTE 库文件wio_tracker.h并在setup()函数上方为Grove Button定义一个全局变量。接下来使用变量wio创建WioTracker的实例并创建一个计数器变量。计数器将用于对Grove Button 进行去抖动,因此我们可以更好地控制 Grove Button 的交互。

#include "wio_tracker.h"
#define BUTTON_PIN  (D38)
WioTracker wio = WioTracker();
int counter = 0;

setup()函数用于在启动时初始化程序的各个方面pinMode()用于设置 Grove Button 连接到的物理引脚以及板期望的功能类型然后该板会运行其初始化过程并将 Twilio SIM 连接到蜂窝网络。

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()函数中创建的。该函数持续监听板的状态变化。在这种情况下,它正在等待Grove Button 状态改变变量buttonState使用digitalRead()从板上的物理引脚读取传入的 Grove 按钮状态更改

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 语句管理传入的状态更改。计数器用作消除Grove Button抖动的一种方式,因此只进行一次调用。如果没有去抖动逻辑,程序将在按住 Grove 按钮时继续每 100 毫秒调用一次。

当 Grove 按钮未被按下时,状态“0”,计数器将重置为 0。

 if (buttonState == 0) {
    // Zero counter
    counter = 0;
  }

当按下 Grove 按钮时,状态“1”,计数器开始迭代。嵌套的 if 语句用于捕获计数器创建的特定数字。当抓到数字 1 时,使用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");
    }
  }

这就是我们需要的所有代码,将其传输到 Wio LTE 板按上传。

上传完成后,断开 Wio LTE 与 Micro-USB 数据线的连接。将锂电池连接到板上。

代码回顾

#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);
}

把它装箱

在派对上,我把电路板、电池和 LTE 天线放在一个小盒子里,让它更像样。

思绪

创建这个项目后,我意识到这对可能相距很远的个人很有用。并且可以使用音频文件代替文本转语音来发送个人消息,例如反向发送语音邮件。发送一封情书并提醒您关心的其他人很重要。您正在使用可编程无线构建什么类型的#TwilioIoT 项目随时在Twitter上发表您的评论、问题和项目。不要忘记查看我的GitHub 上的完整项目网上见,乘风破浪。

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !