arduino门外汉入圏Lora外圈的一小段经历

    为什么起这么怪的标题呢,是写这文章时,我觉得自己还是处于LORA外圈中,还没有完全入到LORA内圈,对LORA还是处于一知半解的状态,谈不上是LORA专业人士。

      Lora是2020年1月初时在淘宝上相识的,当时想找一个能解决在边远区域对传感器数据的收集控制方案,因为需求所在区域没有手机信号,收集的传感器又分布比较散,有些还是在几公里外,而LORA的低能耗和长通讯距离正好满足需求。而本人也是一个半拉子的arduino爱好者,懂点电路懂点C、懂点python还懂点数据库,平时也就偶尔玩玩arduino,再加上海南琼海这个地方目前也没找到共同爱好者,平时也就随自己的兴趣研究下玩玩。

        在淘宝里与lora相遇后,连着几天半夜都在淘宝和百度里查找相关LORA芯片和LORA相关资料信息,本是门外汉的人在几天的信息收集中还是对LORA技术有了一点了解。在与淘宝的客服聊的时候,客服都很有耐心的解答我各种不专业的问题,但最后都会劝告LORA有技术门槛,如果没有一定的技术支撑是搞不下去的。其实我对LORA的目标很简单,就是在2020年春节这个假期里,用自己在假期空闲时间能搭建一个自己的LORAWAN系统,能收集各种传感器上的位置和数据,通过搭建去了解应用lora技术。

      离2020年春节也越来越近,需要赶在春节前把Lora开发板和LORAWAN网关购买回来,要不然就浪费了春节这段假期。在淘宝里有不少卖lora开发板和网关的店家,翻来翻去看了无数个店家,最后还是根据自己的实际情况入手,下单买了支持arduino环境的两块TTGO T-Beam、两块HELTEC ASR6501、一个LORAWAN网关(HELTEC M-02)、一个HELTEC胶囊和GPS模块。为什么要买支持ARDUINO环境的开发板,别的开发环境没功夫去学习呀。


HELTEC ASR6501
TTGO T-BEAM



HELTEC ASR6501 胶囊


HELTEC HT-M02 LORA网关

      两片小小的TTGO-T-Beam最先到手里,选用T-BEAM是因为它本身带有GPS模块,可以在收集传感器数据同时也收到位置信息。收到开发板后立马按指南和TTGO QQ群技术人员指导搭建T-BEAM的ARDUINO环境,接着研究T-BEAM的例程,花了半天功夫修修改改把例程改成自己的程序后编译上传,尝试先让两个T-BEAM互发信息。因购买时没太注意,也没买LED显示屏,只能用ARDUINO的串口监视器查看互联情况。在办公室环境里,因距离近,很顺利的互发成功,此时根本顾不上RSSI和SNR之类,只关心是否能收到GPS信息;接着抱电脑和一个T-BEAM跑到河对面1000米的镇上查看情况,发现在室内接收不到信息,只有到室外的门口才能接收信息。至此,通过LORA发送传感器数据也有了一个直观的了解。 其实此时我对LORA还处于一知半解中,有时例程上的一点点不解都会卡住半天不得其解,虽然烧脑但也乐在其中,每看懂一部分例程也学到一些新的知识点,相信也会慢慢掌握LORA。

        HLETEC也在春节一个星期前到达,拿着M02网关搭建起LORAWAN环境,购进的是POE版的M02,4G版也不是自己的需求。LORAWAN网关搭建其实也很简单,就是把网线接上,电源接上的事情。搭建好后,我立马想把熟悉一点的T-BEAM入网,此时才发现T-BEAM目前还没有支持LORAWAM协议,此时的我根本没能力让T-BEAM支持LORAWAN协议,我才明白LORA和LORAWAN的区别,好吧,事情没按自己想像的路子发展下去,出了点偏差,但没关系,就让子弹再继续飞吧。

        拿出HELTEC的两块ASR6501开发板,按指南要求把ARDUINO开发环境安装上去,把适用ASR6501的LORAWAN例程调出来,很熟练的编译一下,是真的很熟练很熟练,结果编译就出问题了,又开了一个空程序再次编译,还是同样的问题(为开发板 CubeCell-Board编译时出错。),如下图:

LENOVO笔记本

      接着按HELTEC的QQ群里的大神们指导,把CLBECELL-BOARD板库删除,GIT安装CLBECELL-BOARD环境,但问题还是一样存在。接着就是重装arduino、降低arduino版本、重装JAVA64和JAVA32、GIT安装.......各种神操作后,问题还是存在。没办法就在另外一台旧笔记本上搭建arduino开发环境,GIT安排CLBECELL-BOARD支持库,一编译直接就顺利通过了。更神奇的事情还在后面,有一天半夜莫名的又能正常编译了一下,为什么说是一下呢,就那天在LENLOVO这台笔记本上编译上传,都没问题,但第二天电脑重启后又不能编译了,早知道我应该让电脑一直开着机,而今天写这篇文章时调出来编译一下又变正常了,感觉这个笔记本比较有性格 ,还依自己情绪来决定是否工作。没办法ASR6501的工作只能由旧电脑来做编译和上传。


新旧电脑

      使用HELTEC ASR6501开发板,先调用例程里LORAWAN和LORAWAN_BH1750,基本的框架已经写好,只需要把各种传感器数据通过lorawan上传就可以,需要注意的地方就是下面这段,ASR6501把浮点数转成4字节后BASE64编码上传给LORAWAN网关,也就是浮点数4个字节一组一组的转换:

static void PrepareTxFrame( uint8_t port )

{


unsigned char *puc;

puc = (unsigned char *)(&lux);

AppDataSize = 4;//AppDataSize max value is 64

AppData[0] = puc[0];

AppData[1] = puc[1];

AppData[2] = puc[2];

AppData[3] = puc[3];

}

      上传到LORAWAN后,用PYTHON写了一个小应用程序,到LORAWAN自带的MQTT服务上再把上传的JSON数据拿到手,数据格式就如下图那样,“DATA”里就是们上传编码后的数据,我原来没理解这一块,又在网上查找了半天,才理解这一块是什么意思:


      这里卡住我半天的就是怎么提取“data”的数据,研究了半天才知道先BASE64解码后,再按4个字节的方式把字节转成浮点数,在这里费了我这个小白半天的功夫才想通,想通后那是一顿的通爽呀,如下图的PYTHOH代码一样:

m = base64.b64decode(s['data']) //base65解码

BH1750DATA = struct.unpack('f',m[0:4])  //4字节转成浮点数,这里数据会有小偏差,C和PYTHOH的浮点数差异

      如果是多个浮点数,就一个浮点数4字节的往后转换,如下面第二个第三个浮点数转换:

GPSlat = struct.unpack('f',m[4:8])

GPSlon =struct.unpack('f',m[8:12])


      过了提取数据这关后,后面的传感器上传数据就简单多了,只需要把传感器数据读出来,浮点数再转成4字节上传就可以。立马把GPS模块接到ASR6501上,VCC对VCC、GND对GND、TX对RX接好,代码移植过去,编译下没问题后再上传到ASR6501开发板上,安静的坐在PYTHON应用端等GPS数据上传,呆呆等了五分钟,期望中的数据没有看到,以为是在室内收不到,又把GPS天线转到室外,还是一样的问题存在,查看ARDUINO这一端,原因就是ASR6501在串口读不到GPS模块的数据;检查程序代码、检查线连接、万用表检查开发板供电电压、波特率、GPS模块放到8266开发板....一顿神操作后,这一晚就这样过去了,结果是GPS模块没问题,程序也没问题,但ASR6501还是读不到数据。

      赶紧联系HELETE的QQ群大神们,大神说“开发版上集成了串口2102芯片的,相当于6501  RX接了两个RX”,ASR6501只有一个串口,ASR6501开发板的串口不能使用,但用模块是可以的,这是让我使用ASR6501模块自己设计外围电路的节奏呀,我这样的小白有点没自信了。大神又说ASR6502有两个串口,ASR6502的开发板可以使用串口,但要3月才出品。看来我只能做一个安静的老帅哥了,静等ASR6502开发板出现。

      至于HELTEC M-02 LORAWAN网关,只需按指南要求,一步步按章做就可以,选择连到TTN上或者直接使用M02网关上的LORAWAN SERVER,需要掌握的就是DevEui、AppEui、AppKey的使用,厂家提供的ASR6501开发板配置程序CubeCell Configurator也很简单,很容易配置ASR6501开发板的LORAWAM参数。

      感谢LORA在2020年春节陪我坚守在家,2020年我会和LORA一起同行,期待ASR6502早日出口,也希望此文能给对LORA感兴趣的人提供一点点参考。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容