你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

开发人员套件——先锋NB-IoT与Twilio的Alfa

[复制链接]
木木&点点 发布时间:2019-3-16 12:23
本帖最后由 点点&木木 于 2019-4-12 20:18 编辑
0 d4 L. k" x# S
+ r3 l+ [% m$ |. B6 P
通过Twilio的Alfa Developer Kit在T-Mobile的网络上发送命令,成为NB-IoT的先驱。
; T" V+ a! e5 u2 _- Q) `
1.jpg

2 q4 |. T' X% v* B0 x  A
* f* L' X8 q- Q. t+ m, H0 j* P; Y* }8 b
硬件组件   
Twilio可编程无线  ×  1      
Twilio Alfa开发人员套件     × 1      
  ^0 {- K$ i* @1 P7 c" G

8 o( z9 X' h$ d) A
介绍
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套件之间交换数据。

; v7 Q2 Y0 `: c( X! i
这篇文章演示了如何使用Twilio的Developer Kit连接到T-Mobile的NB-IoT网络。连接后,我们将使用Breakout SDK通过网络发送“hello world”消息。您还可以在TwilioIoT下的GitHub上找到已完成的项目。
6 i# v( X; C: E2 }: `& s
- _' }' F7 @  Y; w6 k& j( X
硬件要求
适用于T-Mobile窄带的Twilio开发人员套件
Twilio窄带SIM卡
LTE天线
Micro USB线
锂电池
2 T1 E  Z: }: a& e! M

1 w2 Z: w8 Z" g9 L1 d% q
5 H: Y: ^4 i" m" M( h$ I
软件要求
Arduino IDE
SDK
浏览开发人员工具包
开发人员套件附带一个开发板,专门用于连接T-Mobile的NB-IoT网络。还包括Seeed Studio的几个硬件附件,可用于开发NB-IoT“智能设备”。

+ k6 l* u$ B' v: L7 U! w
: Z3 l1 ^6 W* g# H& m
打开开发人员工具包框。该套件包含:
一套格罗夫传感器
按钮
超声波模块
温度/湿度
Twilio窄带SIM(全尺寸,迷你,微型和纳米)
开发板
LTE天线
GPS天线
锂电池
Micro-USB线
额外的布线
2.jpg
设置Twilio窄带SIM卡
3.jpg
从开发工具包中删除Twilio窄带SIM卡。接下来,在Twilio控制台中注册并激活您的窄带SIM卡。窄带SIM的过程遵循与Twilio可编程无线SIM相同的过程。

' }3 ?9 U+ G6 ]/ n2 |* h# I* n/ F) F+ g4 e, F
连接器件
从Twilio SIM卡中分离Nano SIM(最小尺寸)。
4.png
8 [' G7 K4 D8 N& K9 N+ N4 t

1 ^. Y% e8 P7 ]4 X1 x3 o
从Developer Kit中删除开发板。
5.png

$ G$ T6 u8 w+ {4 d+ u& m
. J/ g% J0 a# ^7 I, j
将Twilio窄带SIM插入电路板下方的SIM插槽。
6.jpg

3 b4 D0 e9 ]  A0 k
2 R  h* X0 K1 a, I
接下来,将LTE天线连接到电路板。
7.jpg
$ J( B8 Y* P$ u% N' j

% ]9 N( C* _  N+ M+ N
连接电池锂电池。建议始终插入锂电池,因为USB电源无法为电路板提供足够的峰值电源。
8.jpg
使用提供的Micro-USB电缆将开发板连接到计算机。您已准备好连接到网络。

1 {* n" e& J! z: q8 G) _' o
$ n% N8 g" |5 w" N% b
配置NB-IoT套件固件
在我们开始编程电路板之前,我们需要更新电路板的固件。要在Macintosh上执行此操作,我们需要Homebrew 来安装dfu-util。
如果尚未安装,请打开终端并粘贴以下内容以安装Homebrew。
安装完成后,安装dfu-util 软件包。该软件包用于从USB连接设备下载和上载固件。
brew install dfu-util libusb
对于Windows用户,需要一组不同的USB驱动程序 。
9 j+ v) {. U7 g, \
设置软件环境
开发板使用Arduino IDE 对微控制器进行编程。Twilio开发了一种名为Breakout的NB-IoT专用软件开发套件  。该SDK使设备可以通过T-Mobile NB-IoT网络发送M2M命令。Breakout SDK可以在GitHub上找到。
9.png
从GitHub 下载Breakout_Arduino_Library.zip 。打开Arduino IDE并将.zip添加到Arduino IDE库中。

3 [: G' d# n$ z% H, o( z
转到Sketch>Include Library> Add.ZIP库 并选择Breakout_Arduino_Library.zip 。
10.jpg
安装.zip文件后,我们需要安装一组板芯。开发板基于STM32F4 芯片组。要在板上开发,我们需要在Arduino IDE中下载STM32F4内核。
转到Arduino>首选项。将以下URL复制到AdditionalBoards Manager URL字段:
http://raw.githubusercontent.com/Seeed-Studio/Seeed_Platform/master/package_seeeduino_boards_index.json
11.png
单击确定。
' Q5 u& X! M/ W+ s4 b# o
STM32F4板现在可以在ArduinoIDE 板卡管理器中使用。接下来打开Boards Manager  以安装STM32F4板芯。
12.png
在Boards Manager中 搜索“Seeed”。找到并选择“Seeed STM32F4 Boards”版本“1.2.3+”并单击“安装”。
13.png
重新启动Arduino IDE。
" G0 ~# I% E5 ^* V
安装STM32F4内核后,开发板即可进行编程。接下来选择电路板和电路板端口。
单击工具>板> Wio Tracker LTE
14.jpg
单击工具>端口> {您的调制解调器端口}
OSX:/dev/{cu|tty}.usbmodem{XXXX}
Linux:/ dev / ttyACM{X}
Windows:COM {X}
15.png
6 q8 Y& \: ~, |7 v* [* Y
配置HelloWorld.ino文件
打开Arduino IDE中Breakout SDK提供的Hello World示例。
单击文件>示例>突破Arduino库> HelloWorld
16.jpg
在HelloWorld.ino中,我们需要进行一些修改,以便我们可以连接到T-Mobile NB-IoT网络。在“HelloWorld.ino”文件中找到psk_key 。
17.jpg
3 `$ k' b3 i. M9 y5 g' z7 j; V  L

# H3 {7 h9 r$ W& x9 c
每个开发板都有一个独特的SIM ICCID和预共享密钥(psk )。我们正在使用的电路板的psk需要复制到HelloWorld.ino草图中。需要此密钥才能连接到T-Mobile窄带网络。

% @$ B" u0 w  ~3 I9 Z! J9 E" b
在BreakoutSDK 选项卡下 找到Credentials
导航到Twilio控制台中的可编程无线
单击SIM卡
找到以前注册的窄带SIM卡
如果它显示预共享密钥(psk),请单击眼睛徽标以显示密钥
复制psk
将您的psk粘贴到上面代码中的HelloWorld.ino文件中
18.jpg
设置psk后,让我们更改setPollingInterval。这决定了BreakoutSDK  为新命令轮询的频率。找到line breakout->setPollingInterval。
30.jpg
+ [( C# P* _# n  y
将'setPollingInterval'间隔从  10 更改为1. 这会将轮询 时间从10分钟更改为1分钟。
breakout->setPollingInterval(1 * 60);
下面是完整的Arduino草图。有关如何在GitHub上找到Breakout SDK的更多细节。
#include <Seeed_ws2812.h>
#include <BreakoutSDK.h>
static const char *device_purpose = "Dev-Kit";2 ], ]/ }1 s5 |! L# p0 Y& G$ [
static const char *psk_key = "YOUR_PSK";1 c$ G. D, D" \
Breakout *breakout = &Breakout::getInstance();
! w: X4 e3 e% ?6 B9 {% j( c' wWS2812 strip = WS2812(1, RGB_LED_PIN);3 \+ |7 v. @5 F) V! ?. z  ~# w
void enableLed() {0 N- \+ A6 W! j- @: P6 \6 y
  pinMode(RGB_LED_PWR_PIN, OUTPUT);- m1 }" `7 ~7 a! S: j% B7 a5 c
  digitalWrite(RGB_LED_PWR_PIN, HIGH);
" m! G) M# L6 j0 o* J, H' H$ a  strip.begin();
4 i# F. O' E; L0 ]  }  strip.brightness = 5;' O2 ?2 I/ i  i2 _6 }0 d+ z# c- W' Y
}
2 \( y2 }# M- ?! ]0 uvoid setup() {$ H3 W' j' f! M5 z
  owl_log_set_level(L_INFO);8 }' w4 s( B, d1 q
  LOG(L_WARN, "Arduino setup() starting up\r\n");
) K5 v0 U, e! r  enableLed();- u$ m% r1 O, F) p, H% A
  strip.WS2812SetRGB(0, 0x20, 0x20, 0x00);& A9 E7 x$ y* a
  strip.WS2812Send();
) u  \  f; G5 @  breakout->setPurpose(device_purpose);
) v* J" N6 }  Y1 U* N. i" i5 Y  breakout->setPSKKey(psk_key);& \# C6 B+ V* ^) a/ o5 f; g0 a
  breakout->setPollingInterval(1 * 60);  // Optional, set to 1 minute
. j2 r/ y1 Q5 d8 ^( U2 L  // Powering the modem and starting up the SDK# k. u0 E+ h$ B9 R% v, N/ O# \# K1 P
  LOG(L_WARN, "Powering on module and registering...");
; v7 A8 g9 W! F6 J3 Z  breakout->powerModuleOn();, C* C$ V) \0 A, }* x
  const char command[] = "Hello World from BreakoutSDK test app";
6 X1 F4 R. B: H9 {  if (breakout->sendTextCommand(command) == COMMAND_STATUS_OK) {
4 }$ u0 Z# ^5 z: d2 [4 T    LOG(L_INFO, "Tx-Command [%s]\r\n", command);
. r# ~2 y- H6 X8 W3 [- w  } else {
2 N/ g+ {7 t1 e9 X2 s    LOG(L_INFO, "Tx-Command ERROR\r\n");8 s4 N# K& b4 u# b
  }9 W+ K7 T$ D6 z# z* @3 @
  // Set RGB-LED to green' Y  @2 w  L5 \: K
  strip.WS2812SetRGB(0, 0x00, 0x40, 0x00);
6 W6 }9 u! Y! @% ~. {  strip.WS2812Send();
: C& _& _2 |% e. T! v1 z  @$ U  LOG(L_WARN, "... done powering on and registering.\r\n");! R% q- D( s/ t4 O) T9 N$ E
  LOG(L_WARN, "Arduino loop() starting up\r\n");
: ^' G" Q' ~, q: b}
  ^: e. c; }$ F% @2 h  c( O2 W, G- Nvoid your_application_example() {
2 V5 i; c( s' p0 z# k; L5 A  if (breakout->hasWaitingCommand()) {
1 C  S& _7 C) p3 o1 b8 q: I5 D    char command[141];
; }2 @' @3 K  u6 Z* p: w+ j3 h+ ~    size_t commandLen = 0;
& \$ [- U4 c& F! a    bool isBinary     = false;4 k/ r) N) x, W$ `# M
    command_status_code_e code = breakout->receiveCommand(140, command, &commandLen, &isBinary);; z1 Z! v4 ]3 R% H1 l" K$ C* B
    switch (code) {
/ B' K( p& K( G# Y7 S      case COMMAND_STATUS_OK:/ y0 e! T# ~0 _  y1 [; ]! b
        LOG(L_INFO, "Rx-Command [%.*s]\r\n", commandLen, command);
- g- f, M9 X5 d3 C; I        break;
3 ?( t0 `, N, ]( `! q8 H      case COMMAND_STATUS_ERROR:6 p2 L8 q; F2 B4 ^; z2 k# s! g
        LOG(L_INFO, "Rx-Command ERROR\r\n");! p& q0 q, K) C" I* ~
        break;
+ R/ n0 S/ p1 a7 \      case COMMAND_STATUS_BUFFER_TOO_SMALL:9 E2 @6 e- r" c
        LOG(L_INFO, "Rx-Command BUFFER_TOO_SMALL\r\n");
  C2 j5 S* p2 z        break;5 v( P+ ^6 y9 e5 I/ e
      case COMMAND_STATUS_NO_COMMAND_WAITING:0 ]& M: z1 q% j$ w, k
        LOG(L_INFO, "Rx-Command NO_COMMAND_WAITING\r\n");        break;      default:        LOG(L_INFO, "Rx-Command ERROR %d\r\n", code);    }
/ d  d( s+ ]6 }0 p" h  }0 `7 s% p% Y4 c% m: A
}: x, P3 {* M2 O2 v8 n! V
void loop() {9 g/ E# m: M. {; H9 y* `' f
  your_application_example();8 |9 K  Y# T/ q2 C2 ~
  breakout->spin();7 j3 L& i6 i  w1 I' m+ V
  delay(50);1 M& k$ b" f% \0 U) H- k
}' Q/ x# u; x9 o3 {& c

' N9 c) l- Z3 ~, K4 X
进入Bootloader模式
要将代码上传到开发板,需要将设备置于Bootloader模式。
按住Developer Board下方的BOOT0按钮。
20.jpg
按住开发板顶部的RST。
21.jpg
释放开发板顶部的RST按键。
释放BOOT0按钮以启用Bootloader模式。
在Arduino IDE中按Upload。
22.jpg
% ]* X6 D2 D2 _/ l2 o/ V
将代码上传到开发板后,按RST按钮。这将使主板退出Bootloader模式。完成的代码可以在TwilioIoTGitHub上找到。

1 B9 Z& l, ^0 r3 F# `
连接到网络并发送命令
重置电路板后,启动NB-IoT网络注册过程。这将在网络上注册板并为设备分配带宽。在此过程中,网络连接LED将呈橙色亮起。
23.png

% O. v+ Y& q/ L# L6 ~
# H8 l- R% d) P5 A- X
打开串行监视器以观察电路板注册和连接到网络。
24.jpg
当开发板成功注册到NB-IoT网络时,网络连接LED将呈蓝色亮起。连接稳定时,以下消息将显示在Arduino串行监视器中:
25.jpg
当电路板成功连接到NB-IoT网络时,将初始化Breakout SDK。
26.jpg
这是Breakout SDK将命令发送到Twilio时的串行监视器输出。
27.jpg
将记录Breakout SDK发送和接收的每个命令。通过NB-IoT网络发送的命令可以在可编程无线下的Twilio控制台中找到。
导航到Twilio控制台中的可编程无线
单击SIM卡
找到以前注册的窄带SIM卡
单击“命令”选项卡
28.jpg
使用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
% F" c* n1 N$ m  `( v
观看Arduino IDE串行监视器以查看收到的命令:
29.jpg
成为NB-IoT的首批先驱之一感觉如何?
使用NB-IoT的“事物”的未来
这是硬件和软件方面物联网开发的特殊时期。许多流程正在变得优化......许多流程仍然笼罩在神秘之中。
这些“事物”影响着我们的日常生活 - 往往没有我们意识到它。从踏板车到家庭自动化的每个部分现在都具有一些互连元素。
NB-IoT更进一步。Narrowband的低成本,低功耗,广域覆盖和长电池寿命使“智能设备”更加智能化。成为TwilioNarrowband的物联网先锋。让我们一起建立梦想。
6 x$ ^  a4 M1 v" Z
原理图
NB-IoT板设置
30.png
0 d; y4 j4 L9 Z. i% E% L

, K6 z0 E- I; Y0 i, u/ l  _$ W
代码
这是Breakout SDK HelloWorld.ino文件的修改版本。

, Y1 @2 c, l. x/ \8 T  G
#include <Seeed_ws2812.h>
#include <BreakoutSDK.h>
! e( |9 ?& J* X7 `# t
static const char *device_purpose = "Dev-Kit";
static const char *psk_key = "YOUR_PSK";

8 U: v# X; K# b4 h- b
Breakout *breakout = &Breakout::getInstance();
: h7 z+ E8 L* }5 |1 Q
WS2812 strip = WS2812(1, RGB_LED_PIN);
' v6 t% D, v; S) ?( b
void enableLed() {
pinMode(RGB_LED_PWR_PIN,OUTPUT);
digitalWrite(RGB_LED_PWR_PIN, HIGH);
strip.begin();
strip.brightness = 5;
}
  S4 l. B9 ^0 \
void setup() {
owl_log_set_level(L_INFO);
  LOG(L_WARN, "Arduino setup() starting up\r\n");
+ g* A) E0 X# @5 J
enableLed();
strip.WS2812SetRGB(0, 0x20, 0x20, 0x00);
strip.WS2812Send();
5 p* ~  L6 P; c
breakout->setPurpose(device_purpose);
breakout->setPSKKey(psk_key);
breakout->setPollingInterval(1 * 60);  // Optional, set to 1 minute

7 f% ~. c, q& ~/ h) R" }! |
  //Powering the modem and starting up the SDK
  LOG(L_WARN, "Powering on module and registering...");
breakout->powerModuleOn();
& O2 y0 u& g1 r( o. x& C1 C, N
const char command[] = "Hello World fromBreakoutSDK test app";
2 u% R1 J5 i; }/ o' C
  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");
  }
6 A: Y5 O2 z" M6 Q; i  o
  //Set RGB-LED to green
strip.WS2812SetRGB(0, 0x00, 0x40, 0x00);
strip.WS2812Send();

2 @$ ^2 p2 w2 @+ S
  LOG(L_WARN, "... done powering on and registering.\r\n");
  LOG(L_WARN, "Arduino loop() starting up\r\n");
}
! i* p$ |/ h: ^: C
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);
    }
  }
}

" f' `7 D+ @' r. @
void loop() {
your_application_example();
breakout->spin();
delay(50);
}

- Y0 F3 O5 H# {& B% q7 E+ g3 b& T, P! j

6 U1 m/ u3 \; U
19.jpg
赞 收藏 评论0 发布时间:2019-3-16 12:23

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版