物联网课程系列:MTDuino+Sensor kit实作
之前的文章”MTDuino—适用于 Sigfox的 Arduino开发板”介绍了如何能让MTDuino透过内建的Sigfox电路,以Serial1跟SerialUSB演练按钮以后上传次数的范例。不过,光只有按钮~~似乎太简单了点,今天就尝试一下MTDuino和其他传感器的实作。
1. BLE+温湿度感测+三轴加速度计
第一个(如下图)从外观上不难看到,蓝色那小块就是个无线电的通讯模块,其实呢~就是BLE!另外,也有看到红色基板上还有两个小黑块、一个小白块,这其实是附带在BLE扩充板上的大气温湿度,及透过微机电MEM工程为基础开发的三轴加速度计。
2. GPS+大气压力+UV感测+环境光感
第二个(如下图)如果之前用Arduino做专题的人,应该一眼就认出来:GPS!不过呢,这上面一样,还不只GPS,还包括大气压力、紫外光UV感测、环境光照Ambient light感测,通通都有!
其他还有好几种,这些可以在做物联网方面的专题时让项目简单很多!至于迭接的方法,超级简单,只要脚位一对一就好了,请参考下图。
物联网应用一般来说有天线的,天线要是不能延长露出来,那就是尽量靠近外侧,好比说,最上面或者靠衔接起来最多空位的地方,这样收发无线电效果比较明显!所以,建议如下图这样迭接:
可能会有人问了:「我用一般的Arduino Uno那些也可以做得到啊!」,别忘了!MTDuino的核心微控器可是个32 Bits的SAMD21,比起一般的Arduino用的8 Bits AVR系列,运算能力上可是超过许多,内存容量也更大,这意味着功能更强和程序代码有充足的容量,所以用MTDuino这种高度整合解决方案的开发板与Sensor Kit,更加经济实惠。
实际操作
这篇先来玩一个Kit:将MTDuino与有GPS扩充板迭接好之后,我们挑选GPS、紫外光UV感测、大气压力这三项简单的感测范例给试给大家瞧瞧。这里说一下:SAMD21的程序看起来跟一般Arduino很接近,不过眼尖的朋友可能一看就发现有些不一样。
其实这些不一样之处,就让SAMD21比起一般的Arduino性能上有更显著的表现。至于整个可以执行的版本也整理成可以下载的压缩文件案了,当然你可以直接编译后刻录给MTDuino来执行。程序代码为压缩文件案中的:mt_LB-M8Q104Amt_LB-M8Q104A.ino
如果要执行这个范例,记得靠窗边一点!最好可以连着笔电一起带到户外,如此一来GPS定位才容易成功。
范例解说
跟GPS在同一个扩充板上的紫外光UV感测、大气压力,分别采用了Si1132、MS5607这两个芯片,其中Si1132的规格表看来,是具有光波段Light Spectrum效果,能透过I2C与它通讯的感测芯片。而MS5607的规格表看来,是个Barometer,也同样可以透过I2C与它通讯。
至于GPS那就得透过我们所熟知的Serial来控制,不过等一下!别忘了SAMD21才是主角,一般Arduino会用SoftwareSerial这种透过GPIO模拟Serial的方式来控制,但这已落伍了!SAMD21的规格表告诉我们,有个更简单好用的方法:SERCOM。
甚么叫做SERCOM呢?其实SERCOM的原文全名叫做Serial Communication Interfaces,顾名思义,只要透过SERCOM的设定,SAMD21可以直接利用内建的电路系统执行I2C、SPI、Serial,甚至目前汽车电子常见的控制器局域网络CAN的LIN规格,SAMD21都能够办到!
但是…脚位是有限的啊,这怎么让SERCOM可以自由调节哪个脚位呢?由Arduino的GitHub中可以看到好几个,其中一个就是ArduinoCore-samd;这个就是MTDuino的核心基础!进入ArduinoCore-samd以后,应该可以看到不少目录跟档案,这些就是Arduino原厂当时定义以SAMD21微控器开发设计为基础的规格。
其中有一个目录叫做variants,这又会有好几个目录,毕竟SAMD21这个32 bits微控器可是不少工业控制都在用的,Arduino当然也有不少个产品系列用上这个微控器,其中Arduino M0 Pro现在产品线叫做Zero,我们就点进去吧!
这一点进去后,又出现了几个档案,令我们比较好奇的是 variant.cpp这个档案,这个档案里面可定义了不少东西,其实就是脚位在电路板上的对应跟布局Layout。
MTDuino可是比起Arduino原厂的设计功能多多 – 还多了Sigfox专用传输电路,当然,脚位也不一样。 关于GPS扩充版,目前脚位配置如下:
MTDuino的PIN 25、26就是SERCOM4
也因此,我们可以用MTDuino自定义所要的Serial去连结GPS;范例中透过SERCOM4自己定义了Serial3,而每一个Serial当然都要有一个Handler负责数据的收和发,这也就是SERCOM4_Handler()这个函数存在的用意。
接着在setup()这里,只要每次程序一开始执行就利用pinPeripheral()函数,定义UART接脚功能,搞定,效能还比SoftwareSerial更高哩!毕竟这可是透过SAMD21微控器硬件本身的电路能办到的喔!
--end--
声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com