使用蜂窝模块将创客项目连接到 IoT
投稿人:DigiKey 北美编辑
2017-10-04
创客和专业工程师都越来越多地采用无线连接来增强项目功能,并将其连接到物联网 (IoT)。此类项目所用的单板计算机 (SBC) 通常集成了蓝牙和 Wi-Fi,但对于更远的距离,蜂窝接口是一种很好的替代方案。
尽管蜂窝调制解调器能够提供更远的距离,但缺点是增加了项目的复杂性、尺寸、成本和功耗,而且还必须满足授权频谱分配方面的监管法规。
本文探讨将蜂窝模块用于创客项目无线连接的优势,并介绍在实施过程中出现的硬件、软件和法规方面的挑战。
之后,本文还给出了解决方案,帮助克服创客和设计人员在利用基于蜂窝的远距离射频连接时所面临的挑战。
蜂窝连接的优势(和缺点)
当今的低功耗蓝牙和 Wi-Fi 技术虽然也在酝酿变化,但目前还不支持直接连接到物联网。相比之下,智能手机则可以与低功耗蓝牙、Wi-Fi 和(蜂窝)物联网进行互操作。因此,可将其用作创客项目 SBC 等以无线方式连接的设备与云之间的网关。类似地,Wi-Fi 路由器和电缆调制解调器也能构成适用于支持 Wi-Fi 的 SBC 的网关(图 1)。
图 1: 低功耗蓝牙(之前称为智能蓝牙)和 Wi-Fi 等无线技术需要路由器或网关才能访问互联网,因而限制了传感器的移动性和距离。蜂窝模块可直接连接到其他支持 IP 的设备,因此不需要路由器或网关。(图片来源: Nordic Semiconductor)
对许多创客应用而言,通过网关进行的物联网连接是一种令人满意的解决方案。但如果传感器移到网关的无线范围以外(对于低功耗蓝牙和 Wi-Fi,超过 30 到 100 米之外),连接将会中断。这一限制导致创客无法开发置于远程位置或持续移动的项目。蜂窝模块提供了一种解决方案。
蜂窝模块并非什么新事物。围绕该技术已发展出一个提供机对机 (M2M) 应用的庞大产业。例如,处于远程位置的自动售货机通常通过蜂窝链路连接到公司的计算机。鉴于从头设计蜂窝调制解调器的难度极大,该解决方案以经过测试、验证和认证的即插即用模块的形式提供。
蜂窝模块制造商现在提供专门面向创客的产品,能够兼容 Microchip Technology、Arduino 和 Adafruit 等供应商提供的常用 SBC。利用蜂窝模块,创客项目 SBC 无需使用网关,便可以将数据直接发送到另一台通过互联网连接的远程设备,例如创客的智能手机(当其远离 SBC 时)或云服务器。而且,蜂窝调制解调器还能提供远达数十千米的距离,从而将无线创客项目的范围扩大至远远超过家庭范围。而且,使用蜂窝调制解调器,在将无线设备添加到 LAN 时不需要极不方便的密码输入过程。
蜂窝通信使用授权频率。尽管存在一定的使用费用,但优点是这些频率得到了严格的控制,相对而言避免了困扰 2.4 Ghz 等免授权频段的拥塞问题和相关干扰。获取网络访问权限的过程与手机采用的过程相同;用户需要订阅本地运营商的服务。之后,他们将获得一个用户标识模块 (SIM),插入此模块时将会进行验证,从而根据合同条款实现一定数量的数据上传和下载。
除了许可证费用之外,蜂窝连接还存在一些其他缺点。相对而言,这些模块的体积和重量较大,价格比较昂贵,功耗也远大于低功耗蓝牙和 Wi-Fi。而且,直接连接到蜂窝网络要比连接到智能手机或路由器更为复杂。
此外,商用领域存在多种蜂窝技术(例如 GSM、GPRS 和 CDMA),每种技术又有多代(2G、2.5G、3G 和 4G),全球范围内有数十个蜂窝频带。因此,针对特定地点选择蜂窝模块需要慎之又慎。
请注意,2G 模块的价格通常最低,但需要注意的是,运营商正在逐步淘汰这种较旧的技术,虽然这一过程可能需要多年的时间。
蜂窝模块在创客项目中随处可见
有了蜂窝模块,现在创客需要做的只是确保模块的物理接口与目标 SBC 的物理接口匹配,签订运营商合同,插入 SIM,然后选择相应的天线。
蜂窝模块制造商争先恐后地进入迅猛发展的创客市场,并提供通过针座引脚或电缆直接连接常用 SBC 的单元。例如,MikroElektronika 在其 Click Board 系列提供了大量蜂窝模块,可通过机械连接器直接连接 Microchip 的 Curiosity SBC。
这些 SBC 使用 Microchip 的 8 位、16 位或 32 位 PIC 微控制器,并包含带 USB 接口的集成编程器/调试器;mTouch 按钮、模拟电位计、开关和 RGB LED;最关键的是,支持 MikroElektronika 的 mikroBUS 接口(图 2)。
这些 SBC 可使用 Microchip 的 MPLAB X 集成开发环境 (IDE) 进行编程,而 8 位和 16 位微控制器版本则可使用 MPLAB Xpress IDE 进行编程,后者适合不太熟悉 PIC 微控制器的创客。
图 2: Microchip 的 Curiosity SBC 使用 mikroBUS 接口,因而能够轻松地连接一个 2.5G GSM/GPRS Click Board 蜂窝模块。(图片来源: Microchip Technology)
MikroElektronika 的 GSM 4 click 通过针座引脚连接到 Curiosity SBC,并直接从该 SBC 获取 3.3 伏或 5 伏电压。该蜂窝模块基于 u-blox SARA-G3 系列 2.5G GSM/GPRS 调制解调器,该调制解调器集成了一个射频收发器和一个功率放大器以实现更远的应用距离(图 3)。SARA-G3 专为 M2M 应用而设计,因此非常适合只需要跨蜂窝物联网发送较少传感器数据的创客。
该蜂窝调制解调器包含 Ipv4 和 Ipv6 通信协议,因此可与互联网上任何其他支持 IP 协议的设备进行互操作。四频版本的 SARA-G3 已经面市,可以在北美、南美和中美地区所用的 850 和 1900 Mhz 频段,以及欧洲、非洲、中东和亚洲地区所用的 900 和 1800 Mhz 频段运行。
图 3: MikroElektronika 的 GSM 4 click 基于此处显示的 u-blox SARA-G3 调制解调器。该调制解调器集成了功率放大器 (PA) 以扩大应用范围。(图片来源:u-blox)
除了发送和接收数据之外,GSM 4 click 还能对电话呼叫或信息做出响应和反应。它包含一个天线连接器(但不含天线)和一个 SIM 卡插座。与 PIC 微控制器的通信是通过 UART 连接或 USB 端口进行的。
MikroElektronika 针对其 Click Board 产品提供了 mikroC IDE。其中包括 Visual TFT,一个“所见即所得”的图形用户界面设计工具,和一个功能完备的 C 编译器。
对于熟悉使用 UART 连接、通过 3 到 5 伏电源运行的 Arduino SBC 的创客而言,Adafruit 的 FONA 808 蜂窝 + GPS 分线提供了一种很好的选择(但它也能与几乎所有微控制器配合使用)。该模块是一个具备 GPS 和 GPRS 数据发送与接收功能的四频 (850/900/1800/1900 Mhz) GSM 2G 无线电。例如,必须将一个 16 针针座焊接到分线引脚孔,才能将该模块连接到 Arduino SBC。
图 4: Adafruit 的 FONA 808 非常适合与 Arduino SBC 配合使用。与其他蜂窝调制解调器一样,它也需要 SIM 卡和天线。(图片来源:Adafruit)
如果开发人员想要利用 3G 的速度和带宽优势,SparkFun Electronics 的 Particle Electron 3G 套件不失为一个很好的选择。该套件提供两个版本:一个适用于 850/1900 Mhz 工作频段,另一个适用于 900/1800 Mhz 工作频段。
套件中不仅包含蜂窝模块(另一个 u-blox SARA 供电单元),还集成了一个 STMicroelectronics STM32 ARM® Cortex®-M3 微控制器,如果愿意,可以独立于 SBC 工作。Electron 套件附带了用于设备编程的 Particle IDE 和云平台。Particle IDE 类似于 Arduino 开发平台。
与一些其他面向创客应用的蜂窝模块不同,Particle Electron 套件非常完整,附带了 SIM 卡、为期 3 个月的 1 MB/月的数据计划、2000 mAh 锂电池(该器件也可通过外部电源供电)、天线,以及用于原型开发的试验板。
与蜂窝调制解调器通信
连接蜂窝模块并收发数据需要一定的编码技能,但这些技能不会超过熟悉 Arduino 等 IDE 的创客为微控制器编程所需的技能范围。
SBC 通常与使用 UART 串行链路的蜂窝模块通信。AT 命令是控制蜂窝调制解调器的标准方法。该命令包含一系列短文本字符串,可以将这些字符串进行组合,以生成拨号、挂断和更改连接参数等操作。
有两种类型的 AT 命令: 基本命令是不以“+”开头的命令。“D”(拨号)、“A”(应答)、“H”(勾控制)和“O”(恢复在线数据状态)都是基本命令的示例(列表 1)。
void gsm4_init( void )
{
engine_init( gsm4_evn_default );
at_cmd_save( "RING", 1000, NULL, NULL, NULL, gsm4_ev_ring );
at_cmd( "AT" );
at_cmd( "AT+CSCS=\"GSM\"" );
at_cmd( "AT+CMGF=1" );
}
列表 1: 此代码示例在测试例程中使用 AT 命令拒绝蜂窝模块所接到的通话。(代码来源: MikroElektronika)
扩展命令是以“+”开头的命令。例如,“+CMGS”(发送 SMS 信息)、“+CMGL”(列出 SMS 信息)和“+CMGR”(读取 SMS 信息)。请注意,GSM 仅使用扩展命令。
“最终结果”代码标记 AT 命令响应的结束。它表明 GSM 模块已完成命令行的执行。“OK”和“ERROR”是两个经常用到的最终结果代码。“OK”代码表示命令行已成功执行。“ERROR”代码表示在蜂窝模块尝试执行命令行时出现错误。发生错误后,蜂窝模块将不会处理命令行字符串中剩余的 AT 命令。
AT 命令的语法因模块制造商而异。此外,模块可能只能响应 AT 命令的子集,但专为无线应用设计的蜂窝模块对 AT 命令的支持通常要优于普通手机。创客应该从各个模块制造商的 AT 命令参考指南中寻求建议,而且这些指南还能告知创客如何对 AT 命令进行格式化,以及如何解释蜂窝模块的响应。
但每个调制解调器都能响应四条基本 AT 命令:
“设置”命令 [At+<参数>=<值>] 用于存储值。
例如, AT+CREG=1 // Set Command
“提取”命令 [AT+<参数>?] 用于读取存储的值。
例如,AT+CREG? // Get Command
测试命令 [At+<命令>=?] 用于确定支持的值范围。
例如,AT+CREG=? // Test Command
执行命令 [At+<参数>] 用于调用蜂窝调制解调器的特定功能。
例如,AT+CREG // Execution Command
其他通用(和实用)AT 命令包括:
- 移动网络注册状态 (AT+CREG)
- 无线电信号强度 (AT+CSQ)
- 电池电量水平和电池充电状态 (AT+CBC)
- 与远程调制解调器建立数据连接(ATA、ATD 等)
- 执行安全相关的任务,例如更改密码 (AT+CPWD)
- 获取或更改蜂窝模块的配置。例如,更改 GSM 网络 (AT+COPS) 或无线电链路协议参数 (AT+CRLP)
AT 命令的发送和接收均由特定的 SBC、IDE 和所选的编程语言通过串行通信链路实现。蜂窝模块不知道串行链路的另一端是什么,而只是响应跨链路发送的 AT 命令。(类似地,SBC 也不知道其连接的是蜂窝模块)。
蜂窝模块通常具有多个 UART I/O,其中一些具有专用功能。例如 GSM 4 click 的引脚 14 是专门的数据发送输出,而引脚 13 是专门的数据接收(图 5)。
图 5: 蜂窝调制解调器通常采用多个 UART I/O,其中一些具有特定功能。(表格来源: MikroElektronika)
例如,当采用 Curiosity SBC 和 GSM 4 click 蜂窝模块时,借助 AT 命令的不可知性,开发人员可以采用 Microchip MPLAB X、MPLAB Xpress 或 MikroElektronika mikroC IDE。在用户从 GitHub 存储库下载 Adafruit FONA 库并将其移到 Arduino 库文件夹后,FONA 808 便可以使用 Arduino IDE 进行编程。
在制造商的开源代码库中通常可以找到几乎所有蜂窝模块操作的 AT 命令。MikroElektronika 的 AT 命令可以在 libstock.mikroe.com 找到,而 Adafruit 的 AT 命令则位于 GitHub 存储库中。其他 AT 命令源来自蜂窝调制解调器的制造商。例如,u-blox 撰写了一篇应用说明,提供了几乎涵盖所有使用场景的 AT 命令示例(参考资料 1),而 Adafruit 则提供了一本列有 SIM Tech AT 命令的手册。
总结
蜂窝模块为所有场景下需要物联网连接的创客项目提供了“插件式”解决方案(前提是项目在蜂窝基站范围以内)。市场上有一系列成熟的 2G、2.5G 和 3G 蜂窝模块能够与流行的创客 SBC 完美匹配,而硬件考虑范围仅限于选择和匹配相应的天线、机械连接器及电池。由于蜂窝网络需要授权,因此还需要使用 SIM 卡并签订数据合同。
参考资料
- “U-blox 蜂窝调制解调器的 AT 命令示例”,应用说明,2016 年 9 月修订。
- 兼容蓝牙 4.1、4.2 和 5 的低功耗蓝牙 SoC 和工具可应对 IoT 挑战
免责声明:各个作者和/或论坛参与者在本网站发表的观点、看法和意见不代表 DigiKey 的观点、看法和意见,也不代表 DigiKey 官方政策。