当您日复一日打开信箱,却发现里面空空如也,这会不会让您有种被「耍」的感觉?在本文所述的项目中,我们将创建一个简单的LPWAN(低功耗广域网)应用,将您的信箱连接到云,并且借助Arduino MKR FOX 1200开发板和Sigfox网络,实现每收到一封信件时发送通知。下面的视频展现了这个项目的构建过程和实际演示:
在这个项目中,我们将会用到以下产品和技术:
Arduino MKR FOX 1200
Sigfox
Arduino MKR FOX 1200开发板提供了一种实用且经济高效的解决方案,让用户能够在项目中轻松添加Sigfox连接。它基于Microchip SAMD21 32位Arm®Cortex®-M0+微控制器和Atmel ATA8520单片Sigfox射频收发器。MKR FOX 1200提供了丰富的I/O接口,支持低功耗Sigfox通信功能,并采用简单易用的Arduino软件集成开发环境(IDE)进行代码开发和编程,这些都使MKR FOX 1200开发板成为了紧凑型电池供电物联网(IoT)项目的理想选择。MKR FOX 1200开发板只需两节AA(五号)或AAA(七号)电池即可满足供电需求,通常情况下可以连续运行长达六个月时间而无需更换电池。
Sigfox是一种低功耗广域网(LPWAN)网络,可为物联网提供连接。Sigfox网络非常适合用于只需低频度发送少量数据的应用。用户每天可发送140条消息,每条消息可携带12字节的有效载荷。作为一种LPWAN网络,Sigfox功耗非常低,因此非常适合电池供电的应用。Arduino MKR FOX 1200自带了1年的Sigfox网络免费订阅。
下面,就让我们开始动手吧!
按照贸泽网站上的这份项目物料清单,您可以一次买齐以下必需组件:(该清单包含一个锂电池组和一个干电池盒,这两者只需购买其一即可。本文中使用安装了两节AA电池的电池盒为开发板供电。)
-
485-ABX00014 – Arduino MKR FOX 1200
-
485-X000016 – GSM天线,带Micro UFL连接器
-
474-PRT-12002 – SparkFun配件:面包板 - 自粘合(白色)
-
485-375 – Adafruit配件:电磁接触开关
-
474-COM-09609 – SparkFun配件:SPDT拨动开关
-
-
485-258 – Adafruit配件:锂离子聚合物电池,3.7V 1200mAh
-
932-MIKROE-513 – 跳线:公对公,15CM 10PK
-
将电磁接触开关连接到Arduino(导线的顺序无关紧要):
图1:硬件组装电路图
如果您是第一次使用Arduino MKR FOX 1200,必须先配置该开发板,并将其注册到Sigfox网络。如果您已经做过这些操作,则可以直接跳到后面的「代码概览」部分继续阅读。
-
在PC上安装Arduino IDE(可从Arduino网站下载)。
-
打开Arduino IDE,单击工具→开发板→开发板管理器,然后安装Arduino SAMD Boards (32-Bits ARM Cortex-M0+)软件包。
-
-
Arduino SigFox for MkRFox 1200
Arduino Low Power
-
将开发板连接到PC,然后打开FirstConfiguration示例。该示例位于文件→示例→Arduino SigFox for MkRFox 1200。
-
-
将串口监视器中显示的ID和PAC编号复制出来,在随后将开发板注册到Sigfox网络时需要使用这两个编号(图2)。
图2:Arduino开发板的ID和PAC
下一步,我们需要将开发板注册到Sigfox网络。在浏览器中访问Sigfox后台(需要登录),按照其中的步骤注册您的开发板。该过程需要输入上一步中复制的ID和PAC编号。
图3:在Sigfox后台注册开发板
现在,所有安装和准备工作都已完成,可以刷入贸泽GitHub仓库中提供的smart_mailbox.ino代码了。这些代码会指示Arduino进入睡眠模式,直到发生需要处理的事件为止,该事件只要信箱投递口被打开即会触发。在我们提供的代码中,主要有下面几个要点:
中断函数中添加了一个变量,用于获取电池电压,以便计算电池的剩余电量。代码中采用的计算方法可以粗略估算出电池的电量状态,不过在理想状况下,还是需要通过充电电路来计算出电池的容量,并以此来计算出准确的电量信息。就本文中的项目而言,我们就直接采用代码中现有的算法(
图4
)。
如果通过将两个磁铁彼此移开来触发Arduino,那么您应该会看到板上的LED灯闪烁,这是因为代码中打开了调试模式,但在省电模式的所有功能都测试完毕后,应关闭调试模式(
图5
)。
禁用调试模式后,可能会遇到这样的问题:Arduino只触发了一次,就再也无法唤醒了。通过网络搜索,发现Arduino论坛上的这个帖子提到了这个问题,指出这是因为Sigfox库中存在问题而导致的,并且提供了一种规避方法。为此,我修改了sigfox.cpp文件,并将修改后的文件放到了前文所述的GitHub仓库中。如果您遇到了同样的问题,请使用该文件替换PC上的sigofx.cpp文件(位于
C:/Documents/Arduino/libraries/Arduino_SigFox_for_MKRFox1200/src/ 路径中),然后重新刷板,以更新开发板上的库。
注意:本文提供的代码会使Arduino模块进入睡眠状态,这会导致COM串口上无法检测到开发板,因而刷板时需要按两下「RST」按钮,串口上才能检测到开发板。
下一步中,我们需要创建一个回调函数。该回调函数会将接收自MKR FOX 1200开发板的数据传输到您的电子邮箱地址。
单击以下各项:DEVICE TYPE(设备类型)→您的DevKit→Edit(编辑)
然后您会进入到
图7
所示的页面。确认Downlink mode(下行模式)中选中的是Callback(回调)。
图7:设备设置 - 下行模式
单击
图7
所示页面左侧边栏中的CALLBACKS(回调),转到Callbacks页面,然后单击New(新建)。
选择Custom callback(自定义回调)(
图8
)。
图8:设备设置 - 自定义回调
设置Type(类型)→DATA(数据)和UPLINK(上行链路),以及Channel(途径)→EMAIL(电子邮件)。
因为我们需要将剩余电量数据包含在1字节的有效载荷中发送到Sigfox服务器,故需要配置Custom payload(自定义有效载荷)。变量percentage(百分比)为8位无符号整数,这就是Sigfox服务器将会接收到的数据。
最后,在消息正文中添加 {customData#percentage} 这个变量,它在电子邮件中将会替换为接收到的电池电量百分比数值。

图9:回调函数设置
整个项目的最后一步,就是将所有组件和零件都安装到信箱上。把所有组件都固定在信箱门内侧,并将电磁接触开关固定到投递口上,然后将天线固定到信箱外面(建议尽可能不要把天线贴在金属表面上)。
图10:将所有组件都安装到信箱上
本项目创建了一个简单的LPWAN应用,从而将传统的信箱转变为智能信箱。借助Arduino MKR FOX 1200可以非常轻松地连接到Sigfox网络并将数据发送到云端。此外,本项目还可以实现自我供电,只需在信箱上安装太阳能电池板并将其连接到充电电路即可。
文中所用到的产品和链接,
请扫码或者点击文末“阅读原文”
作者:Rafik Mitry
Rafik Mitry于2019年加入贸泽电子。他在加入贸泽前获得了慕尼黑工业大学电气工程硕士学位,并且已连续三年在该校开展能量收集领域的研究。作为贸泽的技术营销工程师,Rafik创作了独特的技术文章,以反映电子行业当前和未来的技术趋势。除了紧跟技术新趋势外,Rafik还是一名航空爱好者和网球运动爱好者。
该发布文章为独家原创文章,转载请注明来源。对于未经许可的复制和不符合要求的转载我们将保留依法追究法律责任的权利。


贸泽电子设计圈由贸泽电子(Mouser Electronics)开发和运营,服务全球广大电子设计群体。贸泽电子原厂授权分销超过1,100家知名品牌,可订购500多万种在线产品,为客户提供一站式采购平台,欢迎关注我们,获取第一手的设计与产业资讯信息!