在Python中使用MySQL--PyMySQL的基本使用方法
不经意间,IoT的热门话题似乎已转到了NB-IoT及LoRa之间。这中间自然免不了争论:谁才是IoT远距通信技术的皇太子?这个答案现在来讲还为时过早,不过LoRa联盟发布的NB-IoT vs LoRa技术白皮书上倒是指出了二者各有所长,在不同的领域或应用中都将占有一席之地。这也应了一句中国的古话:一花独放不是春,百花齐放春满园。
LoRa是Long Range的缩写,属于无线通信技术中的一种,典型特点是距离远、功耗低。速率相对较低,可视为网络通信中的物理层实现,LoRa对应的产品就是收发器(tranciever)芯片,例如semtech的SX1272/SX1276,主要处理二进制数据流。LoRaWAN是在LoRa物理层传输技术基础之上的以MAC层为主的一套协议标准,对应OSI七层模型中的数据链路层(MAC层),LoRaWAN消除了具体硬件的不兼容性,同时还实现了多信道接入、频率切换、自适应速率、信道管理、定时收发,节点接入认证与数据加密、漫游等特性。
一般市面上常见的LoRa模块,通常实现的就是物理层的通信,要实现LoRaWAN功能,需要使用软件来实现LoRaWAN协议,要实现网络通信功能,还需要一个网关。
今天和大家一起来体验的是Dragino的LoRa IoT Development Kit套件,这是一个完整的LoRa套件,包含一个LoRa网关,两个不同类型的LoRa结点及配套的传感器,可以体验完整的LoRa IoT功能。
一般来说,能称得上Kit的东西,可不是一块板子或一个模块就可以称得上的,Dragino的LoRa IoT Kit里面有些什么呢?一起来看看吧。
包装比较素雅,中间是DRAGINO的Logo,左上角看到型号为LoRa IoT Kit字样,在侧面还有二维码。
打开包装盒,上面有防震泡沫保护,下面才是套件里的硬货,呵,东西还真不少!
全部取出来看,一个LoRa网关兼作路由器,两个LoRa结点,一个是LoRa Shield,另一个是LoRa/GPS Shield,与Arduino底板配合使用,还有一个DC电源,把天线都装上去,看上去挺有感觉!
LoRa网关背部特写,看到DC电源的要求为9-15V,另有两个ETH接口,一个标明WAN,一个标明LAN,似乎是路由器的标配,实际上这个LoRa网关是可以当做路由器用的。
网关侧面的USB 2.0接口,可以用来连接3G/4G模块,也可以用来连接U盘。
配备的DC电源为12V/1A,极性为内正外负。
这是LoRa/GPS Shield的特写,该扩展板包含两个模块,一个是GPS模块,另一个是LoRa BEE模块,对应的LoRa ISM频段为868MHZ。
LoRa BEE使用可拆卸式设计,同时上面还标明了支持的通信频段,866MHz。另外模块体积很小巧,与天线放在一起的效果,倒感觉天线是个庞然大物了。
拆下LoRa BEE模块后的扩展板,可以看到GPS模块是焊接在底板上的。
LoRa Shield上的LoRa模块,型号为RF96,这是HopeRF产的模块,旁边的晶振是32M的。
本来以为这就是套件的全部了,其实还有惊喜。打开下面的隐藏空间,还发现一个小盒子,上面没有任何标注,如下
这里有什么惊喜呢?
除了杜邦线及ARDUINO数据线,还有好几个传感器,如温湿度传感器、超声波传感器。嗯,考虑得很周到,毕竟LoRa本就是为物联网而生,体验过程是少不了传感器这些东西的,先不管最终的体验如何,这份体贴、细致还是值得赞一个!
看到这么多好东西,笔者已有点迫不及待,只想快点好好体验下传说中的LoRa,亲自上手,近距离感受下远距离通信的感受:_)。
不过先不能着急,先要配置好网关。
什么是LoRa网关?LoRa网关又名集中器(Concentrator)是LoRaWAN系统中的中央结点,支持多通道、多信号的同时调制及解调,网关使用不同的RF组件来实现高容量及多通道通信。另外网关使用IP通信与上层服务器连接,一个典型的LoRaWAN系统如下
简单点说,一个LoRa网关应该包括两方面的功能:一是连接LoRa结点,二是通过TCP/IP与Internet相连。至于具体的配置,则依照实际情况来确定。
Dragino的网关LG01-P作为一款低价的LoRa网关,并没有实现多多通道通信功能,这算是一大遗憾,不过考虑到它的售价,也就释然了。LG01-P与Internet连接的方式则非常丰富,可以使用ETH、WiFi或3G/4G蜂窝连接。
LG01-P内置AR9331模块,最高运行主频为400MHz,并布署了OpenWRT系统,从这点看,完全可以把LG01-P当作一个路由器来使用。LoRa这一块的通信,使用的是RF96 LoRa模块,提供了高达168dB的链路预算,最高100mW的输出,支持FSK, GFSK及LoRa等调制/解调功能。除了LoRa模块,PCB上还集成一颗ATMEG328P的芯,通过SPI/UART分别与RF96及AR9331进行通信。下面是拆开网关之后看到的样子
图中红色的PCB板包含了ATMEGA328P及LoRa模块,它的下面就是Dragino HE Linux模块,内含AR9331。可以看到WIFI天线是内置的,引出的天线接口连接到LoRa模块上。另外可以看到LG01P内部还预留了一个LoRa BEE模块接口,只是没有连接模块,估计是作未来扩展功能之用。
LoRa模块可以拆下来,拆下来看到下面的IoT模块也就是Dragino HE Linux模块
这就是实现网络通信的模块,金属屏蔽罩内部是AR9331模块,配合OpenWRT与Internet连接。另外看到下面还有个叫SENSOR的接口,应该可以用来连接外部传感器。
LG01-P默认打开WIFI连接,没有设置加密,可以使用WIFI设备如手机连接到网关,网关默认的IP地址是10.130.1.1,开启了DHCP服务,移动WIFI设备可以直接获取IP地址,如下是手机连接到网关后的信息
将LoRa网关的WAN口与上级路由器连接,可通过DHCP获取WAN口获取IP地址,这些都是默认设置,无需配置,下面是LoRa网关连接到路由器后使用浏览器登录信息
默认密码为dragino,使用过OpenWRT的用户对这个界面应该非常熟悉。如果使用3G/4G模块连接Internet的话,需要在OpenWRT内进行设置,这里直接使用WAN口连接,使用默认设置就行。
除了可以使用WEB配置,也可以使用SSH连接网关进行配置,下面是使用SSH连接到LoRa网关的配置界面
重点还是LoRa。
LoRa只是一种无线通信技术,工作在物理层,不同设备会存在不兼容的情况。LoRaWAN是一种通信协议,基于LoRa技术实现,除了消除硬件之间的不兼容,还在加密、动态切换等方面予以定义,实现的方法可能各不相同,但最终的LoRaWAN数据包消除了这些差异。LoRaWAN协议栈是软件,通常结合MCU来具体实现,Dragino的LoRaWAN协议栈通过ATMEG328P来实现,一来是支持资源比较多,另一个也可能是出于成本的考虑。
DRAGINO LoRa IoT Kit里包含一个网关,俩个不同类型的结点,其中一个带GPS,下面来试试通信。
最基础的LoRa通信需要两个设备,彼此之间通过LoRa交换数据,这里选择LG01-P做为服务器,另外使用一个LoRa Shield做为结点。前面已经说过,LoRa只负责RF信息交换,具体的数据信息交换需要使用协议栈来实现,LoRa联盟给出了一个规范,不过当前很多厂商自己的实现并未完全遵守该规范,不过这并不影响实际的使用,只是不同厂商之间的设备进行信息交换时会存在兼容性问题。LoRaWAN不兼容的后果就是需要分别对网关及结点设备都加入自己的协议控制。本次的评估套件,不管是网关还是LoRa Shield,二者都是通过ATMEG328P来控制,所以使用ARDUINO IDE来作为开发环境就行。
启动ARDUINO IDE,先添加IDE对Dragino的支持,在ARDUINO IDE的首选项对话框中添加DRAGINO硬件支持,如下
在Additional Boards Manager URLs中输入的地址为:http://www.dragino.com/downloads/downloads/YunShield/package_dragino_yun_test_index.js,这里添加的只是板级支持及示例代码,但是不包含底层的LoRa硬件库文件,还要另外下载RF库文件支持,下载地址为http://www.airspayce.com/mikem/arduino/RadioHead/RadioHead-1.63.zip,解压后放到Arduino的库文件目录。
接下来就把网关或LoRa Shield当成一个Arduino(Yun)设备来用就好了。先对网关烧写代码,下面是本次测试中要用到的两个示例代码,位于examples目录下,其中Server运行在LG01-P上,Client运行在结点上。
需要注意一点,LG01-P没有引出编程用的串口,可以使用网络接口来对网关编程,配置好的设备型号及端口如下
现在可以编译并上传服务器端代码,打开串口可以看到如下信息
服务器端开始监听结点信号,使用的频段是868MHz,此时客户端还未就绪,串口信息也没有刷新,就一直等待。
接下来要给客户端设备上传代码,基本过程类似,除了代码不同外,还需要将开发板的型号设置为Arduino/Genuino UNO,然后开始上传客户端代码。很快就可以看到串口输出信息有变化
通信开始了!
确实很简单,再想想底层使用的是LoRa,远距离通信技术,小激动。两个设备放在一起挨得很近,RSSI的值看上去很好,不知道扔到两公里外是什么状况,小期待!
开发套件还包含一块LoRa/GPS Shield,集成了GPS模块,可以用来获取GPS定位信息,顺便也测试一下,具体烧写代码的过程就不说了,只看下结果
刚开始放在室内,很久都没有收到GPS信号,扔到阳台上,很快就有信号了,检测结果还算稳定。这个库用的是TinyGPS,很多项目上都使用的是这个。TinyGPS库输出的信息比直接通过串口获取原始的GPS信息可读性更好,市面上大多数的串口GPS模块输出数据都遵循NMEA格式标准,需要进一步处理才能得到最终的数据。
接下来是时候体验LoRa与Internet结合的时候了,将与LoRa结点收集到的传感器数据推送到云。毕竟网关的另一大作用是连接到Internet。
现在IoT云服务的提供商比较多,很多都是免费的,例如TTN,ThingSpeak,百度等,虽然对免费用户来说会存在一定的限制,如数据刷新率等,但对于大部分IoT服务来说已够用。每个服务商提供的服务都对应一整套API,这些API除了服务端的接口外,还提供了客户端的API调用,官方示例程序使用的是ThingSpeak提供的服务,因此先要下载ThingSpeak的API并解压到Arduino的库目录,下载地址为https://github.com/mathworks/thingspeak-arduino。
要使用ThingSpeak提供的服务,需要先到该站点注册一个用户帐号,每个帐号有一个唯一的ID,接下来需要创建服务,ThingSpeak称之为Channel,每个Channel对应一个服务,在每个Channel内可以新建多个Field,对应不同的数据类型,如温度、湿度值等。这里建立两个Field,分别对应温度及湿度值,如下
为了安全,Channel还有对应的API Key,分为读/写两种类型,要上传数据则需要在本地(一般是网关)上设置用户ID、API Key等信息,从而有效保证用户安全。例如在dht11_server.ino文件中包含如下配置信息
unsigned long myChannelNumber = 20xx93;
const char * myWriteAPIKey = "B9ZxxxxxNVEBKIFY";
uint16_t crcdata = 0;
uint16_t recCRCData = 0;
float frequency = 868.0;
前面两行信息分别是用户的ID号及对应Channel的API Key,需要用户自行替换自己的ID及API Key。
接下来需要在网关及结点上分别上传对应的程序代码,本次使用的两个代码如下
其中dht11_server代码编译后上传到网关,而dht11_client则上传到LoRa结点。
代码上传后准备一个DHT11温湿度传感器,连接到Arduino的A0,确认连接无误后,打开LoRa结点的串口,可以看到串口输出信息如下
输出信息表明与网关数据交换成功,此时打开ThingSpeak的可视化数据面板(WEB),用户上传的数据就会以可视化的形式呈现给用户,如下
这里看到的只是湿度数据的图形化显示,除了数据之外,还有对应数据的时间信息,这些数据会保存在云端,用户可以导出成JSON或CSV格式保存,供后期分析之用。
这里还要提及一点,官方的示例代码有一个坑,就是代码初始化设备时,会等待串口设备的初始化,如果不打开串口设备则会一直处于等待状态,不会接收及发送信息,在离线测试时很不方便,需要将相关的代码注释掉之后才能用。
最后一个测试是远程通信测试,因为远程通信与低功耗才是LoRa吸引人的地方。LoRa使用扩频技术来实现远距离及低功耗,不同的调制参数适用不同的场合,例如不同的传输距离,典型的配置列表如下
在距离与速度之间,我们通常要做一个折衷,更远的传输距离意味着更多功耗,更低的数据传输率。Dragino默认使用的设置为上表中的模式1,面向近距离通信同时提高较高的数据率(DR)。
测试时LoRa网关放在6楼的室内,移动LoRa结点,通过LED灯的闪烁来测试当前连接是否正常,由于周围都存在高大建筑物,在约300米外之后连接丢失。这个测试结果算是差强人意,不过比起WiFi来说,还是要好。按照LoRa官方的说法,在该模式下,一般在城区的传输距离约2Km,这个应该指的是室外的通信距离,加上周围的干扰源及建筑物遮挡,实情距离应该会更短。另外一点也说明一下,在测试过程中发现LoRa的穿墙性能还是非常不错的。
总体来说,Dragino LoRa IoT Kit还是很不错的一款套件,除了提供两个LoRa结点及一些简单的传感器之外,更重要的是提供了一个LoRa网关,毕竟没有网关的LoRa应用算不得完整。套件的官方报价为750元人民币,相比国外Multitech Conduit一个LoRa网关至少是$469(ETH+LoRa),这个还算不错。配套的软件例程也比较完整,从LoRa通信到IoT的完整应用均有涉及,为用户快速入门及后期的产品级应用都具有极好的指导意义。官方的示例代码及用户手册都比较详细,只是英文版看起来不爽!
参考资源:
Dragino: http://www.dragino.com/
LoRa网关及报价:https://www.loriot.io/LoRa-gateways.html
Dragino LoRa IoT Kit: http://www.dragino.com/products/LoRa/item/120-LoRa-iot-kit.html
精彩评论