DesignSpark Electrical Logo
  • Brought to you by
  • RS Components
  • Allied Electronics
Andrew Back

February 6, 2017 13:24

Raspberry Pi Compute Module 3とMicrochip RN2483でつくるリモートディスプレイ

最大15km離れたところからアップデートできるHDMIディスプレイ

この記事では、Raspberry Pi Compute Module 3とLoRaWANを組み合わせて、強力でリモートなデジタルサイネージを作成する方法を紹介します。  The Things Networkのネットワーク、Raspberry Pi Compute Module IOボード、Microchip RN2483 PICTailを使い、そして簡単なpythonのコードを書くことで作ることができます

Raspberry PiIO

Raspberry PIのIOは、HDMI、DPI、4xカメラインターフェイス、I2C、SPI、UART、SDIOインターフェイスの2つに加えて、48x GPIOピンのように豊富にあります。今回はRN2483 LoRaWANと繋ぐUARTが必要です。また完成品にする時に電源監視やボタンなどのためにIOを使うこともできます。

Raspberry PI IOボードとRN2483 PICTailは次のように接続します。

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

 

有線や無線LANの接続ができないため、USB-Ethernetアダプタを使い、ネットワークと接続します。

オンボードフラッシュに書き込む

ではどうやってcompute moduleにソースコードを書き込んでいくのでしょうか?それは、githubにあるusbboot(Cで500行程度)を読み込ませ、そしてUSB SLAVE BOOT ENABLEのジャンパをENABLEにし、ホストPCに接続させます。Rpibootユーティリティはデフォルトでファームウェアが同梱されており、PiをMass USB Mass Storage Device(MSD)に変換するので、USBメモリと同様にフラッシュに書き込むことができます。

インストール後の設定

Raspbian Liteをロードした後、/ etc / hostnameと/ etc / hostsを編集しホスト名を割り当て、ネットワーク上で見つけやすくします。 また、Raspbianではデフォルトでは無効になっていますが、ブートパーティションに空のファイルを作成するだけで簡単に有効にできます。

$ sudo touch /boot/ssh

UARTでRN2483と接続させるため、Serialのインターフェースを無効にする必要があります。

$ sudo raspi-config

Interfacing Options → P6 Serial (disable).

そして /boot/config.txt に次の行を加えます。

dtparam=uart0=on

その後再起動させることで /dev/ttyAMA0という名前のUARTが使用できるようになります。

ソフトウェアのアップデートとインストール

Raspbianを使う場合、以前インストールされたものを最新にすることが推奨されています。

また、RN2483を動作させたり、Pi framebufferはPythonのみで動作します。

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

The Things Networkの設定

まず、The Things Network consoleを使って設定します。登録するにはDevEUIが必要です。

PythonのスクリプトでRN2483のDevEUIを取得する必要があります。しかし、代わりに端末エミュレータが使用されている場合、コマンドは単純で次にように入力します。

mac get deveui

またOver-the-Air Activation (OTAA) で接続する場合は次の2つの項目が必要です。

  • AppEUI
  • AppKey

接続の初期設定時の前に、これらを使い、接続先が正しいか確認する必要があります。もし正しかったらネットワークアドレスが割り当てられ、セッション暗号化キーが設定されます。この考え方はDHCPやSSLと似ています。

この時点で設定のテスト接続はメッセージが送られる前に終了したことがわかります。

その後、TTN Consoleで、デバイスが参加に成功し、メッセージが実際に受信されたことを確認しました。

ダウンリンク

LoRaWANクラスCはオフグリッド・アプリケーション向けに設計されているため電池寿命を長くさせる必要があります。そのため、電池がすぐに消耗してしまうため、連続的に受信するのではなく送信した1、2秒後に受信するほうが得策です。もし送信するものがなければ空のまま送信すればいいです。

下記のPythonコードはダウンテストのためにまた、TTNコンソールのデバッグのために1バイト分アップリンクされています。

#!/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 Consoleをデバッグ用に使用できます。

メッセージを受信すると、これは端末およびディスプレイに表示されます。

これからの改善目標

このデモンストレーションでは、Raspberry Pi compute moduleとLoRaWANを組み合わせたときに可能なことの一つです。もちろん、どのラズベリーパイも使用できますが、計算モジュール、RN2483、およびシンプルな電源を統合した、小さなカスタムPCBをいかに低部品数で製造できるか理解できました。 最大15km程度の距離からリモートで更新可能な、強力で自己完結型のディスプレイソリューションです。使用されたソフトウェアLoRaWAN経由で送信された文字を表示することでした。 これには改善が含まれます:

  • OTAAが成功したことを確認し、失敗した場合は再試行
  • 起動時にPygameを使用してネットワークデバッグの出力を表示
  • より便利なTTNクライアントまたはアプリ経由でデータを送信 例) a Node-RED based
  • TTNフィールドを使用してフォントサイズ、位置、色などを指定^

基本的なインフラが整っているため、このようなリモート更新できるディスプレイソリューションの有用性上がる可能性があります。

サンプルのPythonスクリプトはGitHubで提供しています。ユーザの環境によってパラメータをいじることで使用することが可能です。

— Andrew Back

 

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.