Rock64 http://akizukidenshi.com/catalog/g/gM-12382/ というのを買ってみた。

とりあえず minimal Ubuntu をいれた。

ssh は最初から有効。rock64:rock64 で入れる。

CPU温度などを連続でみる

sudo /usr/local/sbin/rock64_diagnostics.sh -m

便利ツールが最初からある。

そこそこ大きめのヒートシンクをつけてもCPUにフルロードかけると78℃近くまでいく。たぶんヒートシンク必須。だけどCPUクロックに制限かかるまではいかない。というかクロック制限はあるのだろうか?

ちなみにアイドル時にはクロックダウンする。

IR Reciever

GPIO2_A2/IR_RX/POWERSTATE2_u M21 に IR Receiver が繋っているが使いかたがよくわからない。RK3328 自体で NEC フォーマットの IR コマンドをサポートしているみたいだが Linux から利用するドライバがよくわからない。

まぁ GPIO 機能もあるので、こっちで読み出しをしてみることにしてみた。


GPIO2_A2 (2_A2 の部分を変換して pin 番号を求める) は 2 * 32 + ("A".charCodeAt(0)-65) * 8 + 2 = 66

root@rock64:/home/rock64# echo 66 > /sys/class/gpio/export

試しに IRKit に使えるフォーマットで受信データを表示するようにしてみた。IRKit は 2MHz sample のカウント数で表示されるので変換している。

//#!/usr/bin/env go run
package main

import (
	"fmt"
	"time"

	"github.com/brian-armstrong/gpio"
)

type Event struct {
	th int64
	tl int64
}

func main() {
	watcher := gpio.NewWatcher()
	watcher.AddPin(66)
	defer watcher.Close()

	events := make(chan *Event)

	go func() {
		prev := time.Now()
		var th int64 = 0
		var tl int64 = 0
		for {
			now := time.Now()
			delta := now.Sub(prev).Nanoseconds()
			prev = now
			_, value := watcher.Watch()
			switch value {
			case 1:
				tl = delta
				events <- &Event{th, tl}
			case 0:
				th = delta
			default:
			}
		}
	}()

	for {
		e := <-events
		fmt.Printf("%d %d\n", e.th/5.0e2, e.tl/5.0e2)
	}
}

IR 受信にはsys/gpio だと速度がちょっと足りないですね。

ref

  1. トップ
  2. tech
  3. Rock64 を買って golang で赤外線受信を試してみた

さくらのVPSはIPv4/IPv6デュアルスタックで、双方ともにグローバルアドレスがついているため、IPv4 しかない環境から IPv6 アドレスがついたホストへ SSH する際の踏み台に使うことができる。

  • ProxyCommand でホスト名をクオートすること
    • IPv6 のブラケットがシェルで解釈されないように
Host raspberrypi
User pi
Hostname 2001:db8::40c0
ProxyCommand ssh user@vpshost -W '[%h]:%p'

自宅のIPv6環境でアクセスする場合は、ルーターなどのファイアーウォールの設定が必要。家庭用ルーターはIPv6でも無防備にならないように、デフォルトでほとんどのインカミングパケットを破棄するので、特定ホスト・ポートへのアクセスを許可する設定が別途必要となる。

  1. トップ
  2. tech
  3. さくらのVPSを踏み台にして IPv6 アドレスがついているホストへ ssh

まず BME280 と BMP280 というよく似たやつがあるので注意…。 BMP は気圧と気温しか測れない。

初期設定

リセット直後の BME280 は圧力・温度・湿度すべての測定がスキップかつスリープモードになっているので、まず測定開始するように設定する必要がある。いくつかモードがあるが、とりあえず NORMAL モードにして定期的に値を更新するようにしとけば良い。

なお用途に応じて最適と思われる設定がデータシートで示されているので、それに従えば良い。

FORCED モード (ワンショットモード) で測定する場合、9. Appendix B: Measurement time and current calculation を参照して tmeasure を求める必要がある。FORCED モードは MODE に書きこむと測定が始まり、終わると SLEEP モードになるという挙動をする。

Raspberry Piで動作確認する場合

ググるとほかにも実装が出てくるが、まずはリファレンス実装で試すのが筋。

https://github.com/BoschSensortec/BME280_driver

メーカーがリファレンス実装をつくってる。

$ git clone git@github.com:BoschSensortec/BME280_driver.git
$ cd BME280_driver
$ gcc -DBME280_FLOAT_ENABLE -I. -o foo examples/linux_userspace.c bme280.c
$ ./foo /dev/i2c-1 
Temperature, Pressure, Humidity
temp 31.10, p 100605.10, hum 48.97
temp 31.10, p 100605.08, hum 49.01
temp 31.11, p 100605.11, hum 48.97
temp 31.12, p 100605.34, hum 48.98
temp 31.13, p 100605.46, hum 49.02

Rubyでの実装

https://github.com/cho45/ruby-i2c-devices/blob/master/lib/i2c/device/bme280.rb

に書いた。calibration データの扱いに地味にハマってなかなかうまくいかなかった。

  1. トップ
  2. tech
  3. 気圧・温度・湿度 I2C センサー BME280

↑ に一応資料をあげときます。めっちゃ酔っぱらってこのエントリを書いております。

mbed 環境は Arduino の次あるいはプログラマなら最初の一歩として本当にお勧めです。若干価格が高いのが玉に傷ではありますが、LPC11U35 Quickstart Board は比較的導入しやすく、mbed 入門・USB デバイス入門に最高だと思っています。ぜひ mbed 環境を試してみてほしいと思います。

もともとキーボードに使っていた BLE Nano も mbed です。これも BLE デバイスとしては非常に安価な部類だと思います。僕は今のところ挫折していますが、ぜひ安定したBLEデバイスを作ってノウハウを教えてください……

builderscon は本当に良くて、今回はスピーカーディナー(スピーカーといろんな人同士の交流)という新しい試みも大変楽しかったです。前夜祭はやっぱりオフレコの闇の話が最高に楽しいですね。

builderscon はリアルイベントなのにインターネットの夜明けのような希望があります。こういうイベントは本当に貴重で、運営のかたには頭が上がりません。まだ builderscon はこれからですが楽しみたい!!

  1. トップ
  2. tech
  3. builderscon tokyo 2018 前夜祭「自作 BLE キーボードのその後」で発表しました