电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>电子资料>使用Twilio、Go和Arduino MKR GSM 1400远程播放MP3

使用Twilio、Go和Arduino MKR GSM 1400远程播放MP3

2023-01-03 | zip | 0.57 MB | 次下载 | 免费

资料介绍

描述

新的MKR 系列Arduino 板将改变快速原型设计物联网解决方案的格局。Arduino MKR GSM 1400对于希望使用蜂窝连接扩展其物联网项目范围的任何人来说都是一个很好的解决方案。通过将调制解调器与微控制器集成,一种新的一体式通信解决方案已经开始出现。这与Twilio 可编程无线 SIM相结合,可以使用机器对机器命令在全球范围内进行通信。“事物”现在可以通过 WiFi 或蓝牙以前无法实现的方式连接。

教程演示了如何将机器到机器的命令从Arduino MKR GSM 1400发送到用 Go 编写的服务器。当服务器端接收到机器对机器命令时,音频文件将播放 .mp3 说“你好”。如果你想跳到前面,可以在 TwilioIoT GitHub 上找到已完成的项目

什么是 Arduino MKR GSM 1400?

Arduino MKR GSM 1400 是一款开发板,它使用u-blox SARAU201 调制解调器将Arduino Zero的功能与全球GSM连接相结合传统上,与调制解调器的通信是使用单独模块使用AT 命令完成的。该模型板附带一个库,可以通过函数调用更轻松地访问 AT 命令。

硬件要求

软件要求

设置 Twilio SIM

从包装中取出 Twilio SIM。接下来在 Twilio 控制台中注册并激活您的 SIM 。

软件方面的事情

在对硬件进行编程之前,我们需要安装一些软件才能使其正常工作。为了能够使用板载调制解调器发送 M2M 命令,我们需要MKRGSM库。

打开 Arduino IDE 并转到 Sketch > Manage Libraries。这是可以将 Arduino 和第 3 方库安装到 Arduino IDE 中的地方。

当库管理器窗口弹出时,搜索MKRGSM库并按安装。MKRGSM库将AT 命令包装到函数中,使其更容易与调制解调器通信。这是phonetabulous相信我。

安装库后,我们需要安装 Arduino MKR GSM 1400 板核。Arduino MKR GSM 1400 使用与使用AVR ATmega芯片组的传统 Arduino 不同的芯片组。该板使用SAMD21 Cortex-M0+ ,它需要一组不同的内核。Arduino IDE 不附带内核,计算机需要它们才能在连接时识别电路板。

在工具 > 开发板 > 开发板管理器下找到开发板管理器。

当 Board Manager 窗口出现时,搜索 Arduino SAMD Boards 并安装内核。  

重新启动 Arduino IDE 以完成安装。

伟大的!是时候继续进行硬件设置了。

硬件方面

要通过网络发送 M2M 命令,我们需要安装 Twilio SIM。从 Twilio SIM 卡中取出 Micro SIM

将 Twilio SIM 插入电路板下方的 SIM 插槽。

接下来,将 GSM 天线连接到板上。

使用 Micro-USB 电缆将电路板连接到计算机,您就可以连接到网络了。

创建 Arduino 草图

在 Arduino IDE 中创建一个新的 Arduino 草图(文件 > 新建)。提供了一个看起来像这样的模板。

void setup(){
}
void loop(){
}

为所有 GSM 函数实例化基类GSM 。要发送和接收 SMS 消息,还需要实例化GSM SMS类。这发生在 setup() 函数之前。

#include 
GSM gsmAccess;
GSM_SMS sms;

在 setup() 函数中创建波特率为115200 的串行连接。波特率决定了特定通信通道上的数据速度。

Serial.begin(115200);

使用gsmAccess.begin()函数连接到 Twilio SIM 上识别的蜂窝网络。

gsmAccess.begin();
Serial.println("GSM initialized");

在 loop() 函数中定义将使用beginSMS函数发送 M2M 命令的电话号码。我们将使用的数字是“ 2936 ”。这是一个特殊的 Twilio 短代码,保留用于在 Twilio SIM 之间交换 M2M 命令。它使用 SMS 传输通过蜂窝网络发送 M2M 命令。当 Twilio SIM 创建 M2M 命令时,会生成一个 Webhook,我们将很快讨论这个问题。

sms.beginSMS("2936");

将char 数组传递给函数sms.print()以创建要排队的新消息。

sms.print("hello world");
Serial.println(“Sending M2M Command”);

创建消息并排队后,使用endSMS()函数告诉调制解调器该过程已完成。一旦发生这种情况,将发送“hello world”消息。

sms.endSMS();
Serial.println("M2M Command Sent!");

最后一段代码是一个 while 循环,它将捕获程序并将其置于无限循环中。这样做的目的是确保 M2M 命令只发送一次。

while(1) {
    delay(4000);
}

完整的 Arduino 草图:

#include 
GSM gsmAccess;
GSM_SMS sms;
void setup(){
    Serial.begin(115200);
    gsmAccess.begin();
    Serial.println("GSM initialized");
}
void loop(){
    sms.beginSMS("2936");
        sms.print("hello world");
        Serial.println(“Sending M2M Command”);
       sms.endSMS();
       Serial.println("M2M Command Sent!");
       while(1) {
               delay(4000);
       }  
}

仔细检查是否已在“工具”>“电路板”下选择了电路板。如果未选中,编译器将在您尝试上传代码时抛出错误。

将新草图另存为“SayHelloArduinoGSM.ino”。在将新草图上传到电路板之前,让我们创建一个服务器来使用 Go 接收 M2M 命令。

使用 Go 和 Beep 启动音频响应服务器

使用下面的模板创建一个名为“SayHelloArduinoGSM.go”的新 Go 程序。

package main
import ( 
)
func main(){
}

接下来将以下库添加到导入部分。这是您将Beep等外部库链接到 Go 程序的地方。如果你还没有安装 Go,现在就使用Homebrew安装吧

package main
import (
        "fmt"
    "github.com/faiface/beep"
    "github.com/faiface/beep/mp3"
    "github.com/faiface/beep/speaker"
    "log"
    "net/http"
    "os"
    "time"
)

main函数中使用net/http库中HandleFunc()创建一个新的服务器路由。这将生成一个新的服务器端路由(“ /helloworld” ),用于从“2936”简码接收 M2M 命令。当收到 M2M 命令时,它将被传送到helloworld函数。端口 9999 上使用ListenAndServe()函数打开一个端口并监听传入的连接。

func main(){
    http.HandleFunc("/helloworld", helloworld)
    http.ListenAndServe(":9999", nil)
}

极好的。现在我们必须创建helloworld函数。此函数接收到的 HTTP 请求将由http.Request类型表示。

func helloworld(w http.ResponseWriter, r *http.Request) {
}

当收到请求时,需要解析 M2M 命令。使用ParseForm()函数将请求正文解析为表单。

 if err := r.ParseForm(); err != nil {
        log.Printf("Error parsing form: %s", err)
        return
    }

可以使用PostFormValue()函数通过向其传递一个键来提取正文中的数据。该键将为您提供与 JSON 响应中命名组件关联的值。在这种情况下,我们正在寻找“Command”键的值。

 pwCommand := r.PostFormValue("Command")
    fmt.Println("pwCommand : ", pwCommand)

为了添加一点趣味,让我们在命令成功到达服务器时通过系统的音频播放一些哔声代码来播放音频文件。

 f, err := os.Open("helloworld.mp3")
    if err != nil {
        log.Fatal(err)
    }
    s, format, _ := mp3.Decode(f)
    speaker.Init(format.SampleRate, format.SampleRate.N(time.Second/10))
    playing := make(chan struct{})
    speaker.Play(beep.Seq(s, beep.Callback(func() {
        close(playing)
    })))
    <-playing

完整的 Go 程序:

package main
import (
    "fmt"
    "log"
    "net/http"
    "os"
    "time"
    "github.com/faiface/beep"
    "github.com/faiface/beep/mp3"
    "github.com/faiface/beep/speaker"
)
func main() {
    http.HandleFunc("/helloworld", helloworld)
    http.ListenAndServe(":9999", nil)
}
func helloworld(w http.ResponseWriter, r *http.Request) {
    if err := r.ParseForm(); err != nil {
        log.Printf("Error parsing form: %s", err)
        return
    }
    pwCommand := r.PostFormValue("Command")
    fmt.Println("incoming Command from Arduino MKR GSM 1400 : ", pwCommand)
    fmt.Println("Playing audio file!")
    f, err := os.Open("helloworld.mp3")
    if err != nil {
        log.Fatal(err)
    }
    s, format, _ := mp3.Decode(f)
    speaker.Init(format.SampleRate, format.SampleRate.N(time.Second/10))
    playing := make(chan struct{})
    speaker.Play(beep.Seq(s, beep.Callback(func() {
        close(playing)
    })))
    <-playing
}

启动服务器。

go run SayHelloArduinoGSM.go

使用 ngrok 构建桥梁

目前,硬件和软件部分单独存在。ngrok 将用于弥合差距。

当 SIM 向 Twilio 发送 M2M 命令时,Webhook 会发送到一个名为Commands Callback Url的用户定义的 url 我们将使用 ngrok 接收此 Webhook,然后将其路由到运行在我们自己机器上的服务器。要建立连接,请在服务器运行的同一端口上启动一个新的 ngrok 实例。

ngrok http 9999

复制使用 ngrok ( http://xxxxxxxx.ngrok.io )创建的转发url

在 Twilio 控制台中导航到Programmable Wireless 找到您之前在 SIM 下注册的SIM Configure选项卡下,您将找到Commands Callback Url 将 ngrok转发地址粘贴到文本框中,并将之前创建的服务器路由添加到 url 的末尾。

按保存。

通过天空发送消息

返回 Arduino IDE 并按上传。

上传后,仔细检查命令是否使用串行监视器正确发送。

  • 导航到工具 > 串行监视器

一旦从“2936”短代码发送了 M2M 命令,它就会被路由到 ngrok 并使用命令回调 Url进入 go 应用程序

最后 M2M 命令到达服务器和“helloworld.mp3”

细胞触觉!

继续连接东西

您刚刚使用魔法发送了您的第一个 M2M 命令。

此 M2M 命令模型是如何使用 Twilio 从远程硬件设备发送 M2M 命令的基础部分。Arduino MKR GSM 1400 具有集成的调制解调器和用于发送 AT 命令功能的软件,因此成为任何物联网原型设计套件的理想之选。

如果您有兴趣了解可以发送 M2M 命令的其他硬件,请查看无线机器到机器快速入门该项目以及其他项目可以在TwilioIoT GitHub 上找到

如有任何问题或好奇,请随时与我们联系。如果您有任何已经构建或正在计划构建的很酷的物联网项目,请给我留言。

作者

请启用 JavaScript 以查看

由 Disqus 提供支持的评论。


下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1DH251全极型霍尔效应传感器中文手册
  2. 0.86 MB   |  3次下载  |  免费
  3. 2RK3506G参考设计
  4. 0.97 MB   |  2次下载  |  3 积分
  5. 3英飞凌ICL5102 PFC+LLC第二代谐振控制器规格书
  6. 0.84 MB   |  1次下载  |  免费
  7. 451单片机交通灯仿真
  8. 0.16 MB   |  1次下载  |  2 积分
  9. 5DH281L全极型霍尔效应传感器中文手册
  10. 0.71 MB   |  1次下载  |  免费
  11. 6水流量计手册
  12. 2.4MB   |  1次下载  |  免费
  13. 7LMZ315x0电源模块评估模块用户指南
  14. 850.76KB   |  次下载  |  免费
  15. 8LMZ12003 SIMPLE SWITCHER电源模块评估模块用户指南
  16. 660.49KB   |  次下载  |  免费

本月

  1. 1XL4015+LM358恒压恒流电路图
  2. 0.38 MB   |  163次下载  |  1 积分
  3. 2PCB布线和布局电路设计规则
  4. 0.40 MB   |  73次下载  |  免费
  5. 3开关电源设计原理手册
  6. 1.83 MB   |  24次下载  |  免费
  7. 4智能门锁原理图
  8. 0.39 MB   |  15次下载  |  免费
  9. 5elmo直线电机驱动调试细则
  10. 4.76 MB   |  10次下载  |  6 积分
  11. 6OAH0428最新规格书(中文)
  12. 2.52 MB   |  10次下载  |  7 积分
  13. 7BQ76952评估模块
  14. 3.67MB   |  7次下载  |  免费
  15. 8PC1013三合一快充数据线充电芯片介绍
  16. 1.03 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  |  191367次下载  |  10 积分
  9. 5十天学会AVR单片机与C语言视频教程 下载
  10. 158M  |  183334次下载  |  10 积分
  11. 6labview8.5下载
  12. 未知  |  81581次下载  |  10 积分
  13. 7Keil工具MDK-Arm免费下载
  14. 0.02 MB  |  73806次下载  |  10 积分
  15. 8LabVIEW 8.6下载
  16. 未知  |  65985次下载  |  10 积分