美文网首页LoRa相关LPWAN设计
物联网网关基础代码

物联网网关基础代码

作者: 小鱼儿他老汉 | 来源:发表于2018-01-20 12:24 被阅读136次

    Linux与USB

    物联网的核心操作系统还是Linux,而我主张将所有接口都通过USB转接,而避免使用SoC的原生GPIO/PWM/I2C/SPI总线。因为Linux操作系统本身虽然运行速度比较快,却并非实时操作系统。需要外部慢速设备、或复杂协议设备更加适用MCU级别产品。SoC/MCU之间通过USB之上的某种RPC进行沟通。

    Linux的所有设备都是虚拟文件,而USB CDC中的ACM和ECM分别对应串口和套接字编程。无论采用何种编程语言,只要连接技术转换到这两种编程方式,就可以有大量的参考设计可以重用。简单、高效、标准、统一。

    Python与串口

    Linux中C/C++中的串口编程通过termios,Java有Javacom,Python中的pyserial是一个跨平台的解决方案。但是不同版本的Linux支持的Python版本不同,会带来一些兼容问题。比如OpenWRT带的Python是2.7.3,支持的pyserial版本却只有2.4!理论上说,pyserial 2.7/3.4应该是兼容的,但是我还没有在OpenWRT测试过。所以,谨慎起见,我先移植了pyserial 2.7中的example。

    线程与异步

    pyserial example中有两个例子:

    1. tcp_serial_redirect.py,采用多线程模型,构建了单一serial/socket通道;
    2. multiport_publisher.py,采用select模型,构建了多串口/socket通道。

    LoRaWAN单通道网关

    LoRaWAN单通道网关的主要任务是设备与空口参数管理,以及LoRaWAN报文转发。这种编程模型适用第一个例子。但是pyserial 2.7和3.4的tcp_serial_redirect例子中采用了两个不同的类来实现。3.4中采用了async,编程风格类似于Twisted的方法,且增加了TCP socket server/client两种连接方式。此外还使用了大量的serial url。

    我使用了2.7的例子开始开发,支持TCP socket/client,同时修改了opt。目前设计完毕,并通过Twisted echo server对接。

    LoRaWAN多通道网关

    某个角度看,pyserial的第二个例子适合多通道,但是Windows下不支持对于非文件的select,而太多线程设计起来也很烦,可能会采用多进程配合消息队列的方式重新设计。

    其他

    • 增加LoRaWAN规范和协议;
    • 后台服务化;
    • USB udev检测;
    • 标准安全协议接入,包括TLS;
    • 错误推送;
    • 容错;
    • Admin Web和Web API集成,通过zeromq或其他方式。

    相关文章

      网友评论

        本文标题:物联网网关基础代码

        本文链接:https://www.haomeiwen.com/subject/fkxtaxtx.html