DesignSpark Electrical Logolinkedin
菜单 搜寻
提问问题

基于树莓派Compute Module 3 和 Microchip RN2483制作一个远程显示器

一个LoRaWAN可以使15公里范围内的HDMI显示器的显示内容得到更新。

本文主要介绍的是Raspberry Pi的Compute Module 3 如何与LoRaWAN技术相结合来创建功能强大的远程数字标牌解决方案。该方案利用物联网来连接,Raspberry Pi Compute Module IO板和芯片RN2483 PICTail来做硬件原型,使用一些简单的Python脚本。

大量的IO

在计算模块不存在缺少IO的问题,除了HDMI、DPI、4x相机接口和两个I2C,SPI,UART和SDIO接口,也有48x GPIO引脚。我们只需要一个单独的UART来接合RN2483 LoRaWAN 模块,但是成品会有按钮、电源监控或其他功能来创造更多的价值。

下面列出的是IO板和RN2483 PICTail 模块的连接方式:

  • 3v3 →26
  • GND → 28
  • 14 (UART 0 Tx) → 17 (RN2483 Rx)
  • 15 (UART 0 Rx) → 21 (RN2483 tx)

由于采用无线或无线局域网连接,同时也不需要许多应用,使用一个USB以太网适配器来提供网络访问开发。

书写板载闪存

所以如何将一个操作系统加载到一个焊接在计算模块的闪存芯片上?很容易发现,多亏一些小应用~当Pi不能由闪存启动或由于跳线被设置为禁用而不能启动,500行的C程序将通过USB启动Pi。Rpiboot的作用是提供默认加载的固件,将Pi转变成一个大的USB海量存储设备(MSD),这样就像你将一个USB记忆棒写入闪存。

安装后的配置

之后加载Raspbian Lite的/etc/主机名和/etc/主机文件进行编辑来分配一个唯一的主机名使它更容易在网上找到。Raspbian里的SSH现在是默认禁用的,但是通过在启动分区创建一个空的文件就可以很容易的使用。

 

$ sudo touch /boot/ssh

如果我们想使用第一个UART来连接RN2483,就必须首先禁用控制台消息和登录使用的端口。

$ sudo raspi-config

串行接口选项→P6(禁用)。

随后启用端口,通过编辑 /boot/config.txt 和添加一行:

dtparam=uart0=on

重启后第一个UART作为 /dev/ttyAMA0 使用。

软件更新与安装

更新最新提供的Raspbian系统软件总是一个好主意。我们唯一需要的软件是用来驱动RN2483和Pi的帧缓存,该软件是几个Python数据库。

$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ sudo apt-get install python-serial python-pygame

物联网配置

首先一个新的应用程序要通过物联网控制台来配置。下面的是哪个设备可以注册到这个,但这需要DevEUI。

使用一个Python脚本为RN2483模块获得DevEUI ,但可以简单地使用终端模拟器来代替和命令:

mac get deveui

当注册了一个空中激活设备(OTTA),我们将得到:

  • AppEUI
  • AppKey

启动模块需要先配置这些,它可以请求连网并且随后,如果成功的话,它将被分配一个网络地址,会话加密秘钥将被配置。这类似于DHCP和SSL。

此时配置是通过运行一个在执行上行链路之前的连网的Python脚本来进行测试的,并将信息发送到网上。

TTN控制台之后被用来确认设备已成功加入并且信息已确认收到。

下行链路

LoRaWAN C类的运作模式是,我们使用高度优化的离网应用程序,这可能需要电池有许多年的寿命。这不是通过不断侦听下行链路实现的,这种方法将迅速耗尽电池,而是在执行网络上行链路之后的1到2秒打开两个短接收窗口。如果该设备不需要上行链路也可以,它只需要执行一个空的上行链路就可以了。

下面的Python代码是用来接收下行测试信息的,并且一旦上行链路的一个单字节再次发送到网上,可以通过调试TTN控制台来观察。

#!/usr/bin/python
# -*- encoding: utf-8 -*-
import time
import serial

p = serial.Serial("/dev/ttyAMA0" , 57600 , timeout=5)

# Uplink message to send
up="aa"

writeconfig = 1
# Write to the RN2483 and if downlink is received, return it

def send(data):
   p.write(data+"\x0d\x0a")
   data.rstrip()
   print(data)
   time.sleep(2)

   down = None

   while True:
      rdata=p.readline()
      if rdata[:6] == "mac_rx":
         down=rdata[9:-1]
      else:
         print rdata[:-1]
      if rdata == "":
         break

   return down

# Reset the RN2483 module

send("sys reset")
time.sleep(1)

# Configure the network parameters

if writeconfig is 1:
   time.sleep(1)
   send("mac set appeui 70B3D57EF0003723")
   send("mac set appkey EAB52037FAD7BA6C6EDC191341DC6FCF")
   send("mac set adr off")
   send("mac save")
   time.sleep(5)
# Do an OTAA join
send("mac join otaa")
time.sleep(5)

# Send uplink and if we get downlink, print it out

while True:
   down = send("mac tx uncnf 1 "+up)
   if down:
      print "DOWNLINK: "+down
   time.sleep(10)

这和只有上行链路测试的区别是我们现在看到RN2483返回字符串“mac_rx” ,发现它、提取和打印下行链路的信息。

TTN控制台再次被用于测试,但这一次将接收下行链路消息。

写入帧缓冲

Adafruit为Pygame的入门提供了优秀的教程,上图可以看到这个的第一个测试,这个测试使屏幕变红。我会建议你前往Adafruit的网站,而不是在这里重复如何工作的细节。

汇总

教程中提供的Pygame的示例是集成到OTAA下行脚本中,用了一种新的方法,就是接收下行信息,这种方法首先会清空显示屏,然后书写文本。TTN控制台也同样是进行测试的。

当接收到下行信息时,信息会被打印到终端和附加屏幕。

改进的余地

这个基本的演示说明了当你将Raspberry Pi 计算模块 and LoRaWAN 技术组合起来会发生什么。当然,任何Raspberry Pi可能都被用过,但很容易看出这里如何用很少的元件数来制作一个小的定制PCB板,改板结合计算模块,RN2483模块和一个简单的电源。结果实现了一个强大的,独立的显示解决方案,可以远程更新距离达15km左右。

很少使用软件,所有的都是在LoRaWAN连接发送显示字节。潜在的改进包括:

  • 检查OTAA连接是否成功,如果失败重试
  • 启动后使用Pygame 显示网络调试输出
  • 通过一个更方便的TTN客户端或APP发送数据,例如一个红色节点
  • 利用TTN来指定字体的大小、位置和颜色等。

随着基础设施的建立,这样的远程更新显示解决方案的有用性的方法可以大大增加。

Python脚本可以在GitHub上使用,可以作为你自己的项目的出发点,但你需要配置相应的网络参数。

— Andrew Back

Open source (hardware and software!) advocate, Treasurer and Director of the Free and Open Source Silicon Foundation, organiser of Wuthering Bytes technology festival and founder of the Open Source Hardware User Group.

6 Feb 2017, 13:24