|
本帖最后由 点点&木木 于 2019-4-12 20:18 编辑 通过Twilio的Alfa Developer Kit在T-Mobile的网络上发送命令,成为NB-IoT的先驱。
硬件组件 Twilio可编程无线 × 1 Twilio Alfa开发人员套件 × 1 介绍 NB-IoT,也称为Narrowband-IoT ,是一种新的蜂窝技术,承诺低成本,低功耗,广域覆盖和长电池寿命。这些特性有助于实现“ 智能设备”。 T-Mobile 已 在美国部署NB-IoT覆盖范围,Twilio是第一家提供NB-IoT开发套件的公司。Twilio的Alfa Developer Kit 具有与SeeedStudio合作开发的开发板。开发板可以使用Twilio窄带SIM(套件中附带)访问T-Mobile NB-IoT网络 。一旦进入网络,开发人员可以使用TwilioBreakout SDK在多个NB-IoT套件之间交换数据。 这篇文章演示了如何使用Twilio的Developer Kit连接到T-Mobile的NB-IoT网络。连接后,我们将使用Breakout SDK通过网络发送“hello world”消息。您还可以在TwilioIoT下的GitHub上找到已完成的项目。 硬件要求 适用于T-Mobile窄带的Twilio开发人员套件 Twilio窄带SIM卡 LTE天线 Micro USB线 锂电池 软件要求 Arduino IDE SDK 浏览开发人员工具包 开发人员套件附带一个开发板,专门用于连接T-Mobile的NB-IoT网络。还包括Seeed Studio的几个硬件附件,可用于开发NB-IoT“智能设备”。 打开开发人员工具包框。该套件包含: 一套格罗夫传感器 按钮 超声波模块 温度/湿度 Twilio窄带SIM(全尺寸,迷你,微型和纳米) 开发板 LTE天线 GPS天线 锂电池 Micro-USB线 额外的布线
设置Twilio窄带SIM卡
从开发工具包中删除Twilio窄带SIM卡。接下来,在Twilio控制台中注册并激活您的窄带SIM卡。窄带SIM的过程遵循与Twilio可编程无线SIM相同的过程。 连接器件 从Twilio SIM卡中分离Nano SIM(最小尺寸)。
从Developer Kit中删除开发板。
将Twilio窄带SIM插入电路板下方的SIM插槽。
接下来,将LTE天线连接到电路板。
连接电池锂电池。建议始终插入锂电池,因为USB电源无法为电路板提供足够的峰值电源。
使用提供的Micro-USB电缆将开发板连接到计算机。您已准备好连接到网络。 配置NB-IoT套件固件 在我们开始编程电路板之前,我们需要更新电路板的固件。要在Macintosh上执行此操作,我们需要Homebrew 来安装dfu-util。 如果尚未安装,请打开终端并粘贴以下内容以安装Homebrew。 /usr/bin/ruby -e "$(curl -fsSL http://raw.githubusercontent.com/Homebrew/install/master/install) 安装完成后,安装dfu-util 软件包。该软件包用于从USB连接设备下载和上载固件。 brew install dfu-util libusb 对于Windows用户,需要一组不同的USB驱动程序 。 设置软件环境 开发板使用Arduino IDE 对微控制器进行编程。Twilio开发了一种名为Breakout的NB-IoT专用软件开发套件 。该SDK使设备可以通过T-Mobile NB-IoT网络发送M2M命令。Breakout SDK可以在GitHub上找到。
从GitHub 下载Breakout_Arduino_Library.zip 。打开Arduino IDE并将.zip添加到Arduino IDE库中。 转到Sketch>Include Library> Add.ZIP库 并选择Breakout_Arduino_Library.zip 。
安装.zip文件后,我们需要安装一组板芯。开发板基于STM32F4 芯片组。要在板上开发,我们需要在Arduino IDE中下载STM32F4内核。 转到Arduino>首选项。将以下URL复制到AdditionalBoards Manager URL字段: http://raw.githubusercontent.com/Seeed-Studio/Seeed_Platform/master/package_seeeduino_boards_index.json
单击确定。 STM32F4板现在可以在ArduinoIDE 板卡管理器中使用。接下来打开Boards Manager 以安装STM32F4板芯。
在Boards Manager中 搜索“Seeed”。找到并选择“Seeed STM32F4 Boards”版本“1.2.3+”并单击“安装”。
重新启动Arduino IDE。 安装STM32F4内核后,开发板即可进行编程。接下来选择电路板和电路板端口。 单击工具>板> Wio Tracker LTE
单击工具>端口> {您的调制解调器端口} OSX:/dev/{cu|tty}.usbmodem{XXXX} Linux:/ dev / ttyACM{X} Windows:COM {X}
配置HelloWorld.ino文件 打开Arduino IDE中Breakout SDK提供的Hello World示例。 单击文件>示例>突破Arduino库> HelloWorld
在HelloWorld.ino中,我们需要进行一些修改,以便我们可以连接到T-Mobile NB-IoT网络。在“HelloWorld.ino”文件中找到psk_key 。
每个开发板都有一个独特的SIM ICCID和预共享密钥(psk )。我们正在使用的电路板的psk需要复制到HelloWorld.ino草图中。需要此密钥才能连接到T-Mobile窄带网络。 在BreakoutSDK 选项卡下 找到Credentials 导航到Twilio控制台中的可编程无线 单击SIM卡 找到以前注册的窄带SIM卡 如果它显示预共享密钥(psk),请单击眼睛徽标以显示密钥 复制psk 将您的psk粘贴到上面代码中的HelloWorld.ino文件中
设置psk后,让我们更改setPollingInterval。这决定了BreakoutSDK 为新命令轮询的频率。找到line breakout->setPollingInterval。
将'setPollingInterval'间隔从 10 更改为1. 这会将轮询 时间从10分钟更改为1分钟。 breakout->setPollingInterval(1 * 60); 下面是完整的Arduino草图。有关如何在GitHub上找到Breakout SDK的更多细节。 #include <Seeed_ws2812.h> #include <BreakoutSDK.h> static const char *psk_key = "YOUR_PSK"; Breakout *breakout = &Breakout::getInstance(); WS2812 strip = WS2812(1, RGB_LED_PIN); void enableLed() { pinMode(RGB_LED_PWR_PIN, OUTPUT); digitalWrite(RGB_LED_PWR_PIN, HIGH); strip.begin(); strip.brightness = 5; } void setup() { owl_log_set_level(L_INFO); LOG(L_WARN, "Arduino setup() starting up\r\n"); enableLed(); strip.WS2812SetRGB(0, 0x20, 0x20, 0x00); strip.WS2812Send(); breakout->setPurpose(device_purpose); breakout->setPSKKey(psk_key); breakout->setPollingInterval(1 * 60); // Optional, set to 1 minute // Powering the modem and starting up the SDK LOG(L_WARN, "Powering on module and registering..."); breakout->powerModuleOn(); const char command[] = "Hello World from BreakoutSDK test app"; if (breakout->sendTextCommand(command) == COMMAND_STATUS_OK) { LOG(L_INFO, "Tx-Command [%s]\r\n", command); } else { LOG(L_INFO, "Tx-Command ERROR\r\n"); } // Set RGB-LED to green strip.WS2812SetRGB(0, 0x00, 0x40, 0x00); strip.WS2812Send(); LOG(L_WARN, "... done powering on and registering.\r\n"); LOG(L_WARN, "Arduino loop() starting up\r\n"); } void your_application_example() { if (breakout->hasWaitingCommand()) { char command[141]; size_t commandLen = 0; bool isBinary = false; command_status_code_e code = breakout->receiveCommand(140, command, &commandLen, &isBinary); switch (code) { case COMMAND_STATUS_OK: LOG(L_INFO, "Rx-Command [%.*s]\r\n", commandLen, command); break; case COMMAND_STATUS_ERROR: LOG(L_INFO, "Rx-Command ERROR\r\n"); break; case COMMAND_STATUS_BUFFER_TOO_SMALL: LOG(L_INFO, "Rx-Command BUFFER_TOO_SMALL\r\n"); break; case COMMAND_STATUS_NO_COMMAND_WAITING: LOG(L_INFO, "Rx-Command NO_COMMAND_WAITING\r\n"); break; default: LOG(L_INFO, "Rx-Command ERROR %d\r\n", code); } } } void loop() { your_application_example(); breakout->spin(); delay(50); } 进入Bootloader模式 要将代码上传到开发板,需要将设备置于Bootloader模式。 按住Developer Board下方的BOOT0按钮。
按住开发板顶部的RST。
释放开发板顶部的RST按键。 释放BOOT0按钮以启用Bootloader模式。 在Arduino IDE中按Upload。
将代码上传到开发板后,按RST按钮。这将使主板退出Bootloader模式。完成的代码可以在TwilioIoTGitHub上找到。 连接到网络并发送命令 重置电路板后,启动NB-IoT网络注册过程。这将在网络上注册板并为设备分配带宽。在此过程中,网络连接LED将呈橙色亮起。
打开串行监视器以观察电路板注册和连接到网络。
当开发板成功注册到NB-IoT网络时,网络连接LED将呈蓝色亮起。连接稳定时,以下消息将显示在Arduino串行监视器中:
当电路板成功连接到NB-IoT网络时,将初始化Breakout SDK。
这是Breakout SDK将命令发送到Twilio时的串行监视器输出。
将记录Breakout SDK发送和接收的每个命令。通过NB-IoT网络发送的命令可以在可编程无线下的Twilio控制台中找到。 导航到Twilio控制台中的可编程无线 单击SIM卡 找到以前注册的窄带SIM卡 单击“命令”选项卡
使用Breakout SDK接收命令 Breakout SDK将每分钟轮询一个新命令。使用cURL,您可以使用Sim唯一名称将命令发送到NB-IoT板。 curl -X POST http://wireless.twilio.com/v1/Commands \ --data-urlencode "Sim=Breakout" \ --data-urlencode "Command=this is a test" \ -u ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:your_auth_token 观看Arduino IDE串行监视器以查看收到的命令:
成为NB-IoT的首批先驱之一感觉如何? 使用NB-IoT的“事物”的未来 这是硬件和软件方面物联网开发的特殊时期。许多流程正在变得优化......许多流程仍然笼罩在神秘之中。 这些“事物”影响着我们的日常生活 - 往往没有我们意识到它。从踏板车到家庭自动化的每个部分现在都具有一些互连元素。 NB-IoT更进一步。Narrowband的低成本,低功耗,广域覆盖和长电池寿命使“智能设备”更加智能化。成为TwilioNarrowband的物联网先锋。让我们一起建立梦想。 原理图 NB-IoT板设置
代码 这是Breakout SDK HelloWorld.ino文件的修改版本。 #include <Seeed_ws2812.h> #include <BreakoutSDK.h> static const char *device_purpose = "Dev-Kit"; static const char *psk_key = "YOUR_PSK"; Breakout *breakout = &Breakout::getInstance(); WS2812 strip = WS2812(1, RGB_LED_PIN); void enableLed() { pinMode(RGB_LED_PWR_PIN,OUTPUT); digitalWrite(RGB_LED_PWR_PIN, HIGH); strip.begin(); strip.brightness = 5; } void setup() { owl_log_set_level(L_INFO); LOG(L_WARN, "Arduino setup() starting up\r\n"); enableLed(); strip.WS2812SetRGB(0, 0x20, 0x20, 0x00); strip.WS2812Send(); breakout->setPurpose(device_purpose); breakout->setPSKKey(psk_key); breakout->setPollingInterval(1 * 60); // Optional, set to 1 minute //Powering the modem and starting up the SDK LOG(L_WARN, "Powering on module and registering..."); breakout->powerModuleOn(); const char command[] = "Hello World fromBreakoutSDK test app"; if (breakout->sendTextCommand(command) == COMMAND_STATUS_OK) { LOG(L_INFO, "Tx-Command [%s]\r\n", command); } else { LOG(L_INFO, "Tx-Command ERROR\r\n"); } //Set RGB-LED to green strip.WS2812SetRGB(0, 0x00, 0x40, 0x00); strip.WS2812Send(); LOG(L_WARN, "... done powering on and registering.\r\n"); LOG(L_WARN, "Arduino loop() starting up\r\n"); } void your_application_example() { if (breakout->hasWaitingCommand()) { char command[141]; size_t commandLen = 0; bool isBinary = false; command_status_code_e code = breakout->receiveCommand(140, command, &commandLen, &isBinary); switch (code) { case COMMAND_STATUS_OK: LOG(L_INFO, "Rx-Command [%.*s]\r\n", commandLen, command); break; case COMMAND_STATUS_ERROR: LOG(L_INFO, "Rx-Command ERROR\r\n"); break; case COMMAND_STATUS_BUFFER_TOO_SMALL: LOG(L_INFO, "Rx-Command BUFFER_TOO_SMALL\r\n"); break; case COMMAND_STATUS_NO_COMMAND_WAITING: LOG(L_INFO, "Rx-Command NO_COMMAND_WAITING\r\n"); break; default: LOG(L_INFO, "Rx-Command ERROR %d\r\n", code); } } } void loop() { your_application_example(); breakout->spin(); delay(50); } |
微信公众号
手机版