资料介绍
描述
新的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
- Arduino MKR GSM 1400
- GSM 天线
- 微型 USB 数据线
软件要求
设置 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 上找到。
如有任何问题或好奇,请随时与我们联系。如果您有任何已经构建或正在计划构建的很酷的物联网项目,请给我留言。
- 电子邮件:ckonopka@twilio.com
- Github:cskonopka
- 推特:@cskonopka
作者
- 克里斯托弗·科诺普卡
- 阿杜诺
- Arduino 和 Sim800 蜂窝机器到机器命令快速入门
- 黑客万圣节:使用 Arduino 和 Twilio 构建交互式鬼屋
- 在 LinkIt ONE 上开始使用 Twilio 可编程无线
- 使用 Twilio、PowerSwitch、Arduino 和 Pusher DIY 家庭自动化
请启用 JavaScript 以查看
- 如何安全地将Arduino MKR GSM 1400板与GCP IoT Core结合使用
- 如何使用Arduino MKR GSM 1400的蜂窝定位
- Arduino之基于网络的MP3播放器
- Arduino MKR GSM 1400:蜂窝物联网数据可视化
- 如何使用Arduino和DFPlayer Mini制作带LCD的MP3播放器
- Arduino MKR GSM 1400和DTMF开源
- stm32的MP3播放器 49次下载
- 基于DSP的MP3播放器的设计 16次下载
- C#教程之播放Mp3 8次下载
- 基于Cortex-M3的MP3播放器设计 0次下载
- 怎样实现车载DVD或MP3的连续播放 33次下载
- MP3播放器原理图
- 诺基亚手机MP3播放器下载
- nokia手机mp3播放软件下载
- qd手机mp3播放器下载
- 基于功能一体化LSI—BU9435芯片实现MP3播放模块的设计 2981次阅读
- 微雪电子VS1003B MP3 Board简介 2874次阅读
- 微雪电子Arduino 音频播放扩展板简介 1862次阅读
- MP3播放器的工作原理及工作电路的作用分析 1.2w次阅读
- MP3播放器的基本原理及电路组成 1.9w次阅读
- AT89C51单片机对MP3播放器硬件系统的设计 2890次阅读
- 怎么鉴别MP3的无损音乐格式,你会了? 1.3w次阅读
- 探析提升MP3芯片音质的3个小技巧 6620次阅读
- 简评FPGA——Arduino MKR Vidor 4000 6807次阅读
- 耳机MP3音响PCB图详细资料分享 5554次阅读
- 基于AT89C51SND1C单片机的MP3播放器的设计方案 6464次阅读
- 基于51单片机的多功能MP3设计实现 1.3w次阅读
- C51内核单片机的MP3播放器设计 5689次阅读
- 新型嵌入式MP3播放器设计方案 4917次阅读
- 汽车音响MP3发射器电路 2508次阅读
下载排行
本周
- 1DH251全极型霍尔效应传感器中文手册
- 0.86 MB | 3次下载 | 免费
- 2RK3506G参考设计
- 0.97 MB | 2次下载 | 3 积分
- 3英飞凌ICL5102 PFC+LLC第二代谐振控制器规格书
- 0.84 MB | 1次下载 | 免费
- 451单片机交通灯仿真
- 0.16 MB | 1次下载 | 2 积分
- 5DH281L全极型霍尔效应传感器中文手册
- 0.71 MB | 1次下载 | 免费
- 6水流量计手册
- 2.4MB | 1次下载 | 免费
- 7LMZ315x0电源模块评估模块用户指南
- 850.76KB | 次下载 | 免费
- 8LMZ12003 SIMPLE SWITCHER电源模块评估模块用户指南
- 660.49KB | 次下载 | 免费
本月
- 1XL4015+LM358恒压恒流电路图
- 0.38 MB | 163次下载 | 1 积分
- 2PCB布线和布局电路设计规则
- 0.40 MB | 73次下载 | 免费
- 3开关电源设计原理手册
- 1.83 MB | 24次下载 | 免费
- 4智能门锁原理图
- 0.39 MB | 15次下载 | 免费
- 5elmo直线电机驱动调试细则
- 4.76 MB | 10次下载 | 6 积分
- 6OAH0428最新规格书(中文)
- 2.52 MB | 10次下载 | 7 积分
- 7BQ76952评估模块
- 3.67MB | 7次下载 | 免费
- 8PC1013三合一快充数据线充电芯片介绍
- 1.03 MB | 7次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935115次下载 | 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 | 183334次下载 | 10 积分
- 6labview8.5下载
- 未知 | 81581次下载 | 10 积分
- 7Keil工具MDK-Arm免费下载
- 0.02 MB | 73806次下载 | 10 积分
- 8LabVIEW 8.6下载
- 未知 | 65985次下载 | 10 积分
评论
查看更多