exLeafでディジタル入出力

このページでは,exLeafをリモートディジタル入出力ノードとして利用するサンプルイメージと使用方法を紹介します.exLeafのI/Oポートは下図のようになっています.I/O電圧はすべて3.3Vです.詳細はこちらをご覧ください.

#

これから紹介するサンプルでは,このJ2〜J5の入出力をネットワーク越しで操作・監視することができます.それぞれのJEDファイル(.jedファイル)をダウンロードしてexLeafのフラッシュに書き込むことで利用できます.

exLeafでディジタル入出力サンプル3種

以下のサンプルはexLeafを購入した方は自由にご利用いただけます.ただし,イーツリーズ・ジャパンは,サンプルの利用による損害に対する責任を負うことはできませんのでご注意ください.

exLeafでディジタル出力

UDPパケットを使ってネットワーク越しでexLeafの全てのGPIOポートに出力する値を制御できるサンプルです.exleaf_digital_output_20170127.jed

ネットワークパラメタ

  • IPアドレス 10.0.0.129 (後述の方法によって動作時に変更可能)
  • ネットマスク 255.0.0.0 (後述の方法によって動作時に変更可能)
  • デフォルトゲートウェイ 10.0.0.1 (後述の方法によって動作時に変更可能)
  • 待ち受けポート 16384番
  • MACアドレス 00-1B-1A-EE-00-D1

操作方法

J2からJ5に設定したい値を2ByteのデータとしてUDPで送ることで各ポートの出力値を決めることができます.

たとえばRubyスクリプトであれば,

#!/usr/bin/ruby
require "socket"
udp = UDPSocket.open()
sockaddr = Socket.pack_sockaddr_in(16384, "10.0.0.129")
j2 = 1; j3 = 2; j4 = 4; j5 =8
d = [(j2<<4)|j3, (j4<<4)|j5]
msg = d.pack('C*')
udp.send(d.pack('C*'), 0, sockaddr)
udp.close

として出力値を決めることができます.Rubyスクリプトを使ったデータ出力では,実測で最大70KHz程度のパルスを生成することが確認できました.

exLeafでデジタル入力

UDPパケットを使ってネットワーク越しで全てのexLeafのGPIOポートの値を読み取るサンプルです.exleaf_digital_input_20170127.jed

ネットワークパラメタ

  • IPアドレス 10.0.0.130 (後述の方法によって動作時に変更可能)
  • ネットマスク 255.0.0.0 (後述の方法によって動作時に変更可能)
  • デフォルトゲートウェイ 10.0.0.1 (後述の方法によって動作時に変更可能)
  • 待ち受けポート 16384番
  • MACアドレス 00-1B-1A-EE-00-D2

操作方法

何かしらのパケットを送るとそのリプライとしてポートの値を読み出した結果が返ってきます.たとえばRubyスクリプトであれば,

#!/usr/bin/ruby
require "socket"
udp = UDPSocket.open()
sockaddr = Socket.pack_sockaddr_in(16384, "10.0.0.130")
d = [0x00]
udp.send(d.pack('C'), 0, sockaddr)
recv = udp.recv(2048);
dd = recv.unpack('C*')
j2 = (dd[0] >> 4) & 0x0F; j3 = dd[0] & 0x0F; j4 = (dd[1] >> 4) & 0x0F; j5 = dd[1] & 0x0F;
puts(format("%x %x %x %x", j2, j3, j4, j5))
udp.close

としてJ2からJ5の値を読むことができます.

exLeafでデジタル入出力

UDPパケットを使ってネットワーク越しでexLeafのGPIOポート J2とJ3に出力する値を制御,J4とJ5の値を読み取るサンプルです.exleaf_digital_inout_20170127.jed

ネットワークパラメタ

  • IPアドレス 10.0.0.131 (後述の方法によって動作時に変更可能)
  • ネットマスク 255.0.0.0 (後述の方法によって動作時に変更可能)
  • デフォルトゲートウェイ 10.0.0.1 (後述の方法によって動作時に変更可能)
  • 待ち受けポート 16384番
  • MACアドレス 00-1B-1A-EE-00-D3

操作方法

J2とJ3にデータを出力するとともに,そのリプライとしてJ4とJ5の値を読み出した結果が返ってきます.たとえばRubyスクリプトであれば,

#!/usr/bin/ruby
require "socket"
udp = UDPSocket.open()
sockaddr = Socket.pack_sockaddr_in(16384, "10.0.0.131")
j2 = 1; j3 = 2;
d = [(j2<<4)|j3]
udp.send(d.pack('C*'), 0, sockaddr)
recv = udp.recv(2048);
dd = recv.unpack('C*')
j2 = (dd[0] >> 4) & 0x0F; j3 = dd[0] & 0x0F; j4 = (dd[1] >> 4) & 0x0F; j5 = dd[1] & 0x0F;
puts(format("%x %x %x %x", j2, j3, j4, j5))
udp.close

として利用できます.

ネットワークパラメタを変更する

3種のサンプルは,IPアドレス,ネットマスク,デフォルトゲートウェイを動作中に書き換えることができます.ただし,設定値はFPGA内のレジスタに格納されるだけですので,電源再投入時には,デフォルトのパラメタに戻ります.

変更するには,IPアドレス,ネットマスク,デフォルトゲートウェイをペイロードとするUDPパケットを16385番ポートに送信してください.

たとえば,

#!/usr/bin/ruby
require "socket"
udp = UDPSocket.open()
sockaddr = Socket.pack_sockaddr_in(16385, "10.0.0.129")
d = [0xc0, 0xa8, 0x00, 0x02, 0xff, 0xff, 0xff, 0x00, 0xc0, 0xa8, 0x00, 0x01]
msg = d.pack('C*')
udp.send(msg, 0, sockaddr)
udp.close

というパケットを送信すれば,"exLeafでデジタル出力"のノードのIPアドレス,ネットマスク,デフォルトゲートウェイを192.168.0.2, 255.255.255.0,192.168.0.1にセットすることができます.