你觉得这篇文章怎么样? 帮助我们为您提供更好的内容。
Thank you! Your feedback has been received.
There was a problem submitting your feedback, please try again later.
你觉得这篇文章怎么样?
一个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上使用,可以作为你自己的项目的出发点,但你需要配置相应的网络参数。