叶鋼は午前1時に計算をする

電子工作と計算の記録

【社会】お金を稼ぐことよりも、お金を上手に使うことの方が難しい

富める者はますます富み、貧しき者はますます貧しくなる

マタイの法則

金持ちになれる人は大勢いるが、お金を有効に使用できる人は少ない。

ちなみに、ここで言う金持ちとは資産10億円以上の人のことを想定しているが、数千万円程度の小金持ちの人についても同じことが言える。

小金持ちになれる人は大勢いるが、小金を有効に使用できる人は少ない。   

偉業をなしとげ、困難を乗り越え、立身出世して、大金持ちになった人物が、お金を使う段になると途端に醜態をさらすというのは、よくある話である。  

彼らは金持ちになることが目標で、お金をどう使うかについては大した考えを持っていない。

金持ちになった時点で、自分は成功したひとかどの者であると自負し、それで十分だと満足してしまう。  

だが、実のところ、本当の試練は金持ちになった時から始まる。

何故なら、お金を稼ぐことよりも、お金を上手に使うことの方が遥かに難しいからだ。  

 

お金を使う能のない人に十億円程度の大金を渡してみれば、それはすぐに分かる。

彼らはあれほど憧れていた大金を手にして、それをどう使えばいいか持て余す。  

自分の家や会社を悪趣味な内装で飾り、乗りこなせないスポーツカーを買い、十年後には無価値になる珍品を買い漁り、忠誠心の無い使用人を雇い、つまらない女に貢ぐ。  

彼らは、運転手つきの車に乗るとか、高級レストランで毎日食事をするとか、一泊五十万円のホテルに泊まるとか、貧乏人の考える金持ちのイメージをそのままマネしたような行動を取る。  

 

彼らは貨幣の機能の一つである「交換手段」をとにかく使おうとしているのだ。

しかし、一個人が欲しいと思える物などたかがしれている。ほんの三億円程度使えば、もはや交換したい物などほとんど残っていないだろう。

それでも無理にお金を何かと交換をしようとすれば、すぐにどうでもいい物とばかり交換を始めるようになる。  

 

もしくは自分に金を使う能がないと自覚している人は、貯蓄に励む。 

これは親の遺産を引き継いだ人に多いパターンだ。彼らは資産の維持管理と拡大に義務感を持ち、お金を使うことに罪悪感さえ持っている。

確かに貯蓄性もまた貨幣の重要な機能の一つである。

しかし「貯蓄」しか利用しないのでは、お金を使いこなしているとは言えない。

動かないお金は何も生み出さないからだ。現代のお金は、その内実はただの紙やデジタルデータでしかない。

その無価値なものが、人の手から手へ渡ると、生命を帯び、魂を持つ。お金は使ってこそ生きる。

貯蓄しかしない人間など、大量の死体を埋めた墓地の管理人でしかない。  

 

もちろん貯蓄された貨幣は、銀行や投資信託の手に渡り、別の誰かによって投資手段として利用されているので動いていないわけではない。

しかし現在の投資はお金でお金を生むことにばかり特化しており、最初に言った「増やすのは簡単だが、有効利用するのは難しい」の典型例になっている。  

 

では、お金を有効に使うとは何だろうか?

正直に言って、私に答えはない。それが容易に分からないからこそ、難しいのだ。

稼ぐのは、達成基準が明確だ。金額が大きければ大きいほど良い。それだけだ。

一方で、何をもって有効利用とするかに、共通の基準はない。  

 

だがそれでも、ここまで話を広げた以上、何らかの回答例ぐらいは提示しておきたい。

お金を別の力に変換する能力が高い。私はそれがお金を有効利用することだと考えている。  

 

「お金があれば何でもできる」というのが嘘であることは、いまどき小学生でも知っている。

宗教的信念に燃える人物があなたを異端者として殺そうとしている時、彼に大金を積んでも意味がないだろう。

自分を蛇蝎のごとく嫌っている人間に、どれだけの大金を投じても忠誠心は得られないだろう。

過去の失敗は、お金では解決できない。

死んだ人間はお金では生き返らない。

お金で出来ないことを考えれば、百個でも千個でも思いつく。

お金という道具は、存外使い勝手の悪いものなのだ。  

 

この世において財力だけで実現できることは少ない。権力、暴力、技術力、魅力、●●力、××力、、、、、この世には多種多様な力が存在し、どれだけ強力な財力も、ある種の力の前には無力であったりする。  

しかし、それでもお金を有効に使える人間は、自分の財力を別の力に変換することができる。

彼の手にかかれば、財力は権力になり、暴力になり、技術力になり、魅力になり、●●力になり、××力になる。  

彼ならば、自分の命を狙う狂信の徒を改宗させ、自分を狂信する人間に作り変えることができる。

彼ならば、敵対者を自分の忠実なしもべにすることができる。

彼ならば、過去の失敗をなかったことにできる。

彼ならば、死んだ人間を蘇らせることができる。

彼ならば、できるのだ。

【BLEを使う】mbed HRM1017サンプルプログラムのプロトコル解析 その1

たくさんの鼻で立ってゆっくりと

ナゾベームは歩く

自分の子供たちをひき連れて

まだブレームの動物誌には載っていない

まだマイヤー大百科辞典には載っていない

そしてブロックハウス大百科辞典にも

鼻行類」より引用

いままでの記事はこちらをご覧ください。

 

① Packet Snifferを使う  

Packet SnifferはBLE通信のプロトコル解析をするためのアプリケーションです。Texas Instruments社のBLEチップCC2540搭載のUSBドングルを使います。

(後日解析ツールの使い方について記事を書く予定です。)

PACKET-SNIFFER 計算ツール | TI.com

http://processors.wiki.ti.com/index.php/BLE_sniffer_guide

今回はこのPacket Snifferを使ってmbed-HRM1017をはじめようで紹介されている温度計データ取得のBLEプロトコルを解析してみたいと思います。  

 

② Advertisingパケット  

mbed HRM1017で【BLEを使う】mbed HRM1017 動作環境を整える - 叶鋼は午前1時に計算をするにおいて紹介したサンプルプログラムを動かすと、Packet SnifferはHRM1017が送信しているパケットを以下のように取得します。

f:id:yegang:20140726164549j:plain

mbed HRM1017が送信しているこのパケットは、adevertisingパケットと呼ばれるものです。

上の図において、mbed HRM1017はadevertisingパケットをひたすら周囲に飛ばして自分の存在をアピールしているわけです。

まずはこのadevertisingパケットの中身を解析してみます。  

Adevertisingパケットの詳細については【BLEを使う】GAP(Generic Access Profile)概要 - 叶鋼は午前1時に計算をするをご覧ください。  

・Time(us) & Channnel

f:id:yegang:20140726170504j:plain

周期的にmbed HRM1017がadvertisingパケットを送信しているのが分かります。

Packet Snifferの設定でChannel 0x25=37chの信号だけを拾っていますが、実際には37ch→38ch→39chの順番でadvertisingパケットが送信されています。  

Access Address

f:id:yegang:20140726170516j:plain

advertisingパケットを意味するアドレスは固定値で0x8E89BED6です。  

・Adv PDU Header

f:id:yegang:20140726170533j:plain

Adv PDU Headerは2bytesの信号で以下の構造を持ちます。

f:id:yegang:20140726165518j:plain

Type 0となっているのはADV_INVの値0000を示しています。

ADV_INVは典型的なadvertisingで、mbed HRM1017は周囲にある不特定多数のCentralに自分の存在を宣伝して、それがどこかのCentralに検知されると、両者間でスキャンパケットの送受信を行った上で、mbed HRM1017はCentralからの接続要求に備えます。

TxAddが1なのでAdvA(advertiser’s address)はランダムになります。

PDU Lengthは続くpayload(AdvA + AdvData)の長さが19bytesであることを示しています。

RFUとあるのは予約bitで、常に0の値になります。  

・AdvA(advertiser’s address)

f:id:yegang:20140726171328j:plain

AdvAはCentralがPeripheral BLEを特定するためのアドレスです。CentralとPeripheralの接続が一時的に遮断した場合には、このアドレスが一致するPeripheral BLEを探して再接続します。

ここではTxAddが1なので、AdvAは一定時間ごとに変更されるランダムな値を取ります。  

・AdvData(advertiser’s data)

f:id:yegang:20140726171339j:plain

AdvDataは以下のような意味を持っています。

0x02:AD structure1の長さが2bytes

(以下2bytes)

   0x01:AD structure1のtypeはFlags

   0x04:FlagsはBR/EDR Not Supported。BLEのみをサポートしています。  

0x05:AD structure1の長さが5bytes

(以下5bytes)

   0x03:AD structure1のtypeは16bit-Service UUID。BLEが使用している機能を示します。

      また2bytesに短縮されたUUIDを使用することも示しています。

   0x09 0x18 0x0F 0x18:UUID data。2つの機能が確認できます。

         0x1809:BLE_UUID_HEALTH_THERMOMETER_SERVICE

         0x180F:BLE_UUID_BATTERY_SERVICE  

   この2bytseを正式な16bytesのUUIDに直すときは

   0000xxxx-0000-1000-00805F9B34FB

   のxxxxの部分に上記の2bytes UUIDを代入します。  

0x03:AD structure3の長さが3bytes

(以下3bytes)

   0x19:AD structure3のtypeはAppearance。BLEに接続されている外部装置を示します。

   0x00 0x03:外部装置は0x300=768なのでGeneric Thermometer(温度計)となっています。

   Appearanceのdataについては以下を参照ください。

https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml  

ちなみにAdvData の上限は31bytesですが、上の例では19bytesしか使用していないので、使われなかった12bytesは0で埋められています。  

③ スキャンパケット  

ipadなどでNordicのnRF Toolboxを立ち上げると、ipadaがadvertisingパケットを検知して、スキャン要求とスキャン応答が行われます。

f:id:yegang:20140726165308j:plain

上の図におけるAdv PDU typeが3のADV_SCAN_REQ、スキャン要求と4のADV_SCAN_RSP、スキャン応答がそれです。  

スキャン要求のpayloadはScanA(6bytes)とAdvA(6bytes)で構成されています。 ScanAはスキャンしているcentral側のアドレスで、RxAdd=1なのでランダムアドレスです。

AdvAはadvertisingパケットを送信しているperipheral側のアドレスで、先ほど確認したAdvAと同じアドレスです。  

スキャン応答のpayloadはAdvA(6bytes)とスキャン応答データ(0~31bytes)で構成されています。  

Advertisingパケットは31bytesしかないので、必要な情報が入りきらないことがあります。そのような場合にはスキャン応答のデータを使います。

今回はAdvertisingパケットの31bytes中19bytesで間に合ったので、スキャン応答のData部分、ScanRepDataは使う必要がなく、NONE(何も無し)になっています。  

 

さて次回は、接続を確立するとどのようなパケットが取得できるかについて解説したいと思います。

【BLEを使う】GAP(Generic Access Profile)概要

【BLEを使う】記事の一覧はこちら。

読書百遍 義 自ずから あらわる

いままでの記事はこちらをご覧ください。

 

ここではGAPについて自分のメモ用に調べた結果を書きます。 勉強しながら随時追加修正を行うので、内容の正確さを保証しません。  

本記事は、以下の文献およびサイトを参照しています。

未熟な私のいい加減な解説を見て、間違った知識を得るくらいなら以下の本を読んだ方が確実に有意義です。

以前にも同様の理由で社内の若者に以下の本を勧めたのですが「英語の本は読めない」という理由で拒絶されたことがありました。

仮にも技術者を名乗る人間が、たかたが200ページ程度の洋書くらい読めないなんて、どれだけ知的に怠惰なのだと私は呆れるのです。

http://reinforce-lab.github.io/blog/2013/08/13/blebook-ch2-ble-spec/

hiro99ma blog: ble

http://www.amazon.co.jp/iBeacon-%E3%83%8F%E3%83%B3%E3%83%89%E3%83%96%E3%83%83%E3%82%AF-%E4%B8%8A%E5%8E%9F-%E6%98%AD%E5%AE%8F-ebook/dp/B00J9MHG66

Amazon.co.jp: Getting Started with Bluetooth Low Energy: Tools and Techniques for Low-Power Networking (English Edition) 電子書籍: Townsend, Kevin, Cufí, Carles, Akiba, Davidson, Robert: 洋書

 

 

BLEはどのようにして相互に通信をするのか

GAPはBLEが通信する際のadvertisingや接続を制御する。 そのためGAPについて理解するためには、BLEがどのように通信をしているかを知らないといけない。  

BLEは、後述するadvertisingパケットを送る側と受け取る側に分類できる。

あるデバイスのBLEがadvertisingパケットを周囲に転送するadvertisingを行い、周囲のデータをスキャンしているデバイスのBLEがそのadvertisingパケットを検知すると、接続を開始する。その後は接続が確立したBLE同士でデータパケットを送受信する通信状態になる。  

 

GAPの役割

GAP(Generic Access Profile)は、BLEが通信において果たす役割を規定する。

役割には以下の4つがある。

① Broadcaster

データ送信だけを行い、データ受信はしない。後述するadvertisingパケットにデータを乗せて周囲にひたすら飛ばす。 例えば、自分の位置を知らせるiBeaconは周囲のBLEに位置情報を出すだけで、自分は受信をしないので、この役割に属する。  

 

② Observer

データ受信だけを行い、データ転送はしない。後述するadvertisingパケットに乗っているデータを読み取る。 例えばiBeaconの位置情報を読み取り表示するアプリならば、データを受信だけしていればいいので、この役割に属する。  

 

③ Central

周囲にあるBLEが送信するadvertisingパケットを検知して接続を開始し、そのBLEをネットワークに加えるかどうかの判定をする。複数のBLEとの接続も可能である。  

 

④ Peripheral

advertisingパケットを周囲に送信して、Centralに発見してもらい、接続許可をもらい、接続を確立させる。多くの場合、1つのCentralにのみ接続する  

 

BLEはBluetooth Low Energyの名が体を表すように低消費電力を目指して設計されている。 この4つの役割には、その低消費電力のための工夫が随所に見られる。  

たとえばCentralはPeripheralに比べて複雑な処理を要する。だからCentral役はiPhoneなどのパワフルなCPUを持つ機械が担うことが多い。

そしてPeripheralをより簡素にしたことで、小さなメモリと処理能力の低いCPUしか持たないBLE ICチップでもPeripheral役の実装が可能となった。

処理能力の低いCPUは消費電力が小さく、小型で安価である。そのため多くの製品にPeripheralは実装され、広く普及している。  

①と②は接続を行わず、③と④は接続を行う点に注意する。 ①②と③④でadvertisingパケットの使い方が異なっている点に注意する。①、②はBLE同士の接続を確立する必要がなく、advertisingパケットはアプリにデータを送るために使われている。一方、③、④はCentralがPeripheralを発見して、それらと接続するためにadvertisingパケットを使っている。

送受信をするなら③④だけでも可能なのに、わざわざ①②と③④に分けているのは低消費電力のためである。

③と④は接続を行っているが、接続には多くの電力を使う。そのため接続を行わず、advertisingパケットのデータだけを使って必要な情報をやりとりする①と②は消費電力を節約できる。  

BLEの役割は自由に変えることができるが、多くの場合、BLEがどのような役割を果たすかは固定的である。

例えば上記の例ではBroadcasterの役割を持つiBeaconが突然Observer役として受信専用機になったり、Peripheral役になって他機との接続を試みるようにしてもメリットはないのでやらない。  

別記事で述べるGATTのクライアントやサーバを、GAPのCentralやPeripheralと混同してはいけない。両者は別のものである。例えばGAPのPeripheral役のBLEでもクライアントとサーバーのどちらにでもなれる。  

 

BLEはどのようにして相互に通信をするのか(再考)

BLE通信について、もう少し詳細に調べる。  

① advertising

CentralがPeripheralに接続できるようにするためには、Peripheralは、advertisingする必要がある。

advertisingは日本語に訳せば広告、宣伝。つまり、あるBLEが自分の存在を周囲のBLEに対して宣伝し、アピールしている状態を意味する。  

advertisingパケットは20ミリ秒から10.24秒の間の範囲の時間間隔で送信される。 Peripheralは、advertisingパケットを送信した後しばらくの間は、接続要求の受信待ちをする。

Centralはadvertisingパケットを受信すると接続を開始するための接続要求を送信する。  

advertisingパケットは、最大31バイトのデータを含む。

そのデータは、ユーザがBLEを識別するための名前、パケットを送信しているデバイスに関する情報、デバイスが検出可能かどうかを知るために使われるいくつかのフラグなどから構成されている。(advertisingパケットについては後述)  

Centralがアドバタイジンパケットを受信したとき、Centralはスキャン要求を送信することで更なるデータをPeripheralに要求できる。Peripheralはスキャン要求により追加のデータとして31バイトのスキャン応答を送信する。  

BLEは2,4GHz帯の40chを使用しているが、advertisingは、WLANの干渉を避けるために40個の内の3つの周波数チャンネル37ch,38ch,39chを使って送信されている。この周波数は他の37チャンネルと比べて、WiFiと干渉を起こしにくい帯域が選ばれている。  

 

② スキャンとInitiating

スキャンは、Centralがadvertisingパケットを受信し、スキャン要求を送信するまでの状態を示す。スキャンを行う時間をスキャンウィンドウ、1つのスキャンを行ってから次のスキャンを行うまでの時間をスキャン間隔と呼ぶ。

スキャンウィンドウをスキャン間隔で割った値を走査デューティサイクルと呼ぶ。

スキャンウィンドウがスキャン間隔と等しい場合は、一つのスキャンが終わると同時に次のスキャンが開始されるので、Centralは連続スキャンを行うことを意味する。

スキャンは3つの帯域について37ch→38ch→39chの順番で、周期的に繰り返し行われる。  

initiatingとは、Centralがadvertisingパケットを受信し、Peripheralへの接続要求を送信するまでの状態を示す。  

 

③ 接続

CentralとPeripheralが最初にデータ交換したときから接続状態にあると定義する。  

接続状態において、CentralはPeripheralから決められた時間間隔でデータパケットを要求する。この間隔は、Centralによって決められ、接続間隔と呼ばれる。

ただしPeripheralはCentralに接続パラメータの更新要求を送信することができる。

接続間隔は、Bluetoothコア仕様に応じて7.5ミリ秒から4秒の間でないといけない。  

Peripheralが時間制限内にCentralからのデータパケットに応答しない場合、リンクは失われたとみなす。  

接続の間、デバイスは、advertising用のチャネルを除いた37個のチャンネルを使用して通信を行う。  

 

advertisingパケットの構成

advertisingパケットは以下のような構成を持つ。nRF51822のSoft Deviceではパケットの生成は多くの部分が自動化されているので、実際にアプリケーションを作成するときに、プログラマが設定すべきなのはAD structureの部分がほとんどとなる。

f:id:yegang:20140719222816j:plain

Access Address

advertisingパケットを意味するアドレスは固定値で0x8E89BED6。  

・Adv PDU  

Adv PDU Typeは7種類がある。

ここではadvertisingパケットに使用する4種類を紹介する。  

[3:0]Type接続性スキャン指向性
0000ADV_IND有り有り無し
0001ADV_DIRECT_IND有り無し有り
0010ADV_NONCONN_IND無し無し無し
0110ADV_SCAN_IND無し有り無し

(接続性)

Centralとの接続を開始するかしないかを示す。  

(スキャン)

Centralがadvertisingパケットを検知したとき、Centralからのリクエスト要求とPeripheralからのリクエスト応答の送受信をするかしないかを示す。  

(指向性)

指向性が有りのタイプは、特定のデバイスのみを対象とする。このタイプのpayloadはadvertisingアドレスと対象のデバイスのアドレスしか持たず、常に接続性が「有り」になる。

指向性がないタイプは不特定多数のデバイスを対象とする。  

ADV_INVは典型的なadvertisingパケットで、Peripheralは周囲にある不特定多数のHost全てに自分の存在を宣伝して、Centralがそれを検知すればスキャンパケットの送受信をした上で、Centralからの接続要求に備える。  

・Advertiser’s Data  

AD structureは最大31bytesまでなら、幾つでも作ることができる。31bytesの内、使わないbyteは0の値で埋める。

また、31bytesで足りない場合はScanパケットを使って更に31bytes使うこともできる。

AD structureは、そのAD structureの長さ(Length)、AD type、AD typeで指定した項目のAd Dataで構成される。

代表的なAD typeには以下がある。  

名称AD typeData byte数概要
Flags0x011Discoverや接続のタイプ
16-bit Service UUIDs0x02可変BLEの機能。UUIDの長さは2byte以上の短縮版。
16-bit Service UUIDs0x032BLEの機能。UUIDの長さは2byteの短縮版。
32-bit Service UUIDs0x04可変BLEの機能。UUIDの長さは4byte以上の短縮版。
32-bit Service UUIDs0x054BLEの機能。UUIDの長さは4byteの短縮版。
128-bit Service UUIDs0x06可変BLEの機能。UUIDの長さは16byte以上。
128-bit Service UUIDs0x0716BLEの機能。UUIDの長さは16byte。
Shortened Local Name0x08可変UTF-8で符号化されるユーザ・インタフェースの表示名などの先頭の数バイト
Complete loca name0x09可変UTF-8で符号化されるユーザ・インタフェースの表示名などの全文字
Tx Power Leve0x0A1送信電力
Manifacturer Specific Data0xFF可変企業の任意データ

 

① Flagsの設定値  

• Limited Discoverable Mode

設定値:0x01

設定した時間が経過した場合や何らかのイベントが発生した場合のみデバイスを発見できるモード。  

 

• General Discoverable Mode

設定値:0x02

常にデバイスが発見できるモード。  

 

• BR/EDR Not Supported

設定値:0x04

BLEのみをサポートし、4.0以前のBluetoothには対応していないことを示す。  

 

• Simultaneous LE and BR/EDR to Same Device Capable (Controller)

設定値:0x08

BLEにも4.0以前のBluetoothにも対応していることを示す。(Peripheral側)  

 

• Simultaneous LE and BR/EDR to Same Device Capable (Host)

設定値:0x10

BLEにも4.0以前のBluetoothにも対応していることを示す。(Central側)  

②Service UUIDs  

BLEでサービスというのは、機能を意味する。

温度を測る機能は温度計サービス、心拍数を測る機能は心拍計サービスと呼ばれる。

ユーザーが新しい機能を作れば、それもサービスと呼ばれる。例えばiphone(Central BLE)の画面をタッチすると、装置(Peripheral BLE)に付いているLEDが点滅する機能を作れば、それはさしずめタッチ点灯サービスとでも呼ばれるだろう。

その各サービスにはサービスを識別するためのUUIDが割り当てられている。

UUIDは通常16bytesだが、よく使われるサービスはBluetooth SIGで定義された2bytesや4bytesの短縮版がある。短いデータでUUIDを表現できれば、送信時間と電力とメモリの短縮につながるという利点がある。

例えば温度計サービスは2byteの0x1809、心拍計サービスは2byteの0x180Fが割り当てられている。

この2byteを正式な16bytesのUUIDに直すときは

0000xxxx-0000-1000-00805F9B34FB

のxxxxの部分に上記の2bytes UUIDを代入する。  

一方、自分で作成したタッチ点灯サービスにはそのような短縮版はないから、はじめから16bytesのUUIDを使わないといけない。  

このようにUUIDを表現するのに、短縮版を使うか、16bytesを使うかを指示するのが、このAD typeの役割である。

UUIDについてはGATTの記事でも解説する。  

 

(今後、AD typeの解説を随時追加予定)

【社会】皆様の健康のために

「偉大なる兄弟があなたを見守っている」  

 

彼は巨大な顔をじいっと見上げた。四十年間かかって、あの黒い口髭の下に隠された微笑の意味がやっと分かったのだ。ああ、何というみじめで、不必要な誤解であったことか! ああ、愛情豊かな心に背いた、何という頑固、身勝手な離反であったことか! ジンの匂う涙が二滴、鼻筋の両側を伝っていった。しかしこれで良かったのだ、苦闘は終わりを告げたのである。彼はやっと自分に対して勝利を納めたのだった。彼は「偉大な兄弟」を愛していた。

ジョージオーウェル1984年」より引用

私は皆様の健康と平和のことだけを望んで生きている。  

嘘ではない。本当である。

ただし、私の考えている健康と平和が、皆様の望む健康と平和と一致するとは限らないことを、あらかじめご了承のほどお願い申し上げます。  

さて、今回は私がいかに皆様の健康を願っているかについて述べたいと思う。  

 

私の考える健康とは、個人の体重、血中酸素濃度、心拍数、運動量、睡眠時間、病歴、生活習慣、行動範囲、遺伝子情報を第三者が収集し、それを統計データとして利用することで、個人にアドバイスを与え、管理することである。  

個人データの利用により、平生から身体の健康を維持して体調不良を改善することが可能となり、病気の予防を徹底させる。 これにより個人は健康的な生活を謳歌し、国は医療費を削減することができる。  

病気になっても病院にかかるお金のない発展途上国の人々にとって、病気の予防は死活問題である。

病気になれば医者にもかかれずに死ぬしかない哀れな人々の何と多いことか。個人データの利用は彼らを救う。  

全ての人々に厚い保護を与える先進国にとって、医療費の削減は国の命運を左右する死活問題である。

既に多くの国で「高福祉、低負担」の維持は絶望的になっている。これから先は「中福祉、中負担」を妥協して目指すことになるはずだ。

簡単に言えば医療の質は低下し、それでも負担は増える。そうしなければ国の財政は破たんして、結局は国民が苦しむことになるからだ。

だが個人データの利用は、医療の質の低下を補う有効な手段となる。  

 

個人データの利用に対して、プライバシーの侵害、徹底した個人の管理と監視を行うディストピア社会として嫌う人もいるだろう。

しかしリスクなきメリットは存在せず、何かを得るためには何かを失わないといけない。

貧しき人々を助け、国と国民の未来を守ることが、ディストピア社会の危険性よりも重要であると私は判断した。  

もちろんプライバシー保護は重要であり、意図しない個人情報の流出は防がないといけない。現在は多くの企業が個人情報を野放図に扱いすぎている。

この点については高木浩光@自宅の日記が行っている啓蒙活動が大いに参考になる。

私のような人間の暴走を防ぐためにも、対抗勢力は必要であり、私はプライバシー保護活動を応援する。彼らにおかれては、是非とも常に私たちのすることを監視していただきたい。  

 

個人情報の保護は今後ますます重視され、重要な課題となる。

これは世界的な潮流であり、今はプライバシーの概念のない発展途上国も10年遅れで欧米に追随していくだろう。

この流れを無視することはできない。

しかし、その一方で人々はますます多くの個人情報を意図的にも、意図せずとも世界に放出するようになる。  

これらの情報をいかにして保護するかは、喫緊の課題だ。

しかし私にとっては、これらの情報をいかにして効率的に回収し、利用するかが喫緊の課題なのである。

この矛盾する課題をどのようにして両立させるかは頭の痛い問題である。考えても答えはなかなか出ない。

そこで私は考えるのを止めた。

正確に言えば基準を自分で作るのを止めた。私は外部の基準に従うことにしたのだ。その時点で法的に許容されているギリギリ限界の境界で私は活動する。  

とにかく私は個人情報を徹底的に利用するのを目指すことにした。私は余計なことは考えずに邁進する。そして実際に邁進してきて、その結果が成果を上げつつある。

一方でこれらの情報を徹底的に保護することを目指す人々がいる。彼らが法や規則を改定すれば、私はもちろんそれに従い、新しい基準ギリギリの境界上での活動を再開する。

この両者がせめぎあえば、結果的に一番均衡のとれた最良の状態で安定すると私は確信している。

私は私の道を行き、他人は他人の道を行き、互いの道がぶつかって、競い合い、いがみあい、罵りあい、呪いあい、殴りあった末に最良の道が作られると私は信じている。  

優秀な敵は、優秀な味方よりも頼もしい存在だ。私はより多くの敵が私の眼前に立ちふさがることを心待ちにしている。

【BLEを使う】mbed HRM1017 動作環境を整える

【BLEを使う】記事の一覧はこちら。

刺身の上にタンポポを乗せる簡単なお仕事です。

ネット・ミームより引用

いままでの記事はこちらをご覧ください。

 

mbed HRM1017を使うのはとても簡単です。以下にmbed HRM1017が届いてから使うまでに私が行った作業を順に列挙してみます。それにより、これを使うのがどんなに簡単なのかが皆様にもご理解いただけるはずです。  

参考にしたのは以下のサイトです。本記事でやっていることは以下のサイトと全く同じなので、以下のサイトを見た方が詳細で分かりやすいと思います。

https://media.dmm-make.com/item/1451/  

詳細を知りたい人は上の参考サイトを見ていただくとして、以下は私が行った作業の簡単な記録になります。  

①パソコンとmbed HRM1017を接続する

まずmbed HRM1017をtypeB miniのUSBケーブルに接続します。 typeB miniのUSBケーブルがなかなか見つからなくて苦労しました。USBケーブルを部屋から探し出すことが、今回紹介する一連の作業の中で、最難関作業でした。

今回の作業は他の部品は何も接続せずに、USBと接続しただけの状態で行います。

f:id:yegang:20140712200450j:plain

 

接続して、ドライバを自動インストールすると、コンピュータにMBEDドライブがマウントされます。その中にはmbed.htmというファイルが確認できます。

f:id:yegang:20140712195828j:plain

 

②mbedにmbed HRM1017(現在は暫定的にnRF51822)を登録する。

https://mbed.org/に行き(もしくはmbed.htmをクリックして)mbed HRM1017を自分のmbed platformに登録します。 mbedに登録していない人は先にmbedへのsignupを済ませます。  

(mbedに登録していない場合)signupをクリック

f:id:yegang:20140712170033j:plain

 

(mbedに登録していない場合)アカウントがない方を選択

f:id:yegang:20140712170026j:plain

 

(mbedに登録していない場合)メールアドレスなどを入力し、Signupをクリックして登録完了

f:id:yegang:20140712170021j:plain

 

mbedに登録済みの人はここから。 platformをクリック。

f:id:yegang:20140712170001j:plain

 

本来はデバイスにmbed HRM1017を選ぶのだが、今はまだないので現在は暫定的にnRF51822を選択。

f:id:yegang:20140712165950j:plain

 

NRF51822の画面で「add to your mbed compiler」をクリックして、デバイスをmbedコンパイラに追加。

f:id:yegang:20140712165945j:plain

 

以降はOpen mbed Compilerが表示され、これをクリックすることでプログラムの開発環境へ入ることができるようになります。

 

③プログラムをmbed HRM1017に書き込む

登録が完了した次は、サンプルプログラムを書き込んで、動作を確認します。

まずはmbed HRM1017がBLEとしてipadなどに検出されるかを確認しようと思います。

ここから先は以下のサイトを参考にしました。例のごとく、詳細はサイトの方を見ていただくとして、ここでは作業記録を簡単に残すに留めます。

mbed HRM1017とiPadをBLEで接続してみた! – スイッチサイエンス マガジン  

 

mbed HRM1017をはじめよう - | Mbedから温度計測用のBLEプログラムをImportします。

f:id:yegang:20140712184301j:plain

f:id:yegang:20140712183752j:plain

  

画面上段にあるCompileをクリックするとhexというファイルが生成され、ダウンロードされます。

f:id:yegang:20140712185749j:plain

  

ちなみに、BLE_Health_Thermometer_IRC -> BLE_API_Native_IRC -> hw -> nRF51822 -> btle -> btle.cpp を見ると以下の修正が入っているのが分かると思います。 

67行目 

//SOFTDEVICE_HANDLER_INIT(NRF_CLOCK_LFCLKSRC_XTAL_20_PPM, false);

68行目 

SOFTDEVICE_HANDLER_INIT(NRF_CLOCK_LFCLKSRC_RC_250_PPM_4000MS_CALIBRATION, false);   

元になったプログラムはnRF51822 mKitボード用に作られており、HRM1017にはない32.768kHzの外部水晶発振子を使用する設定になっていました。 そこで外部クロックを使用する67行目をコメントアウトして、内部クロックを使用する68行目が追加されています。 nRF51822 mKitボード用のプログラムを流用するときは、この設定を変えるようにしないといけません。  

ダウンロードされたBLE_Health_Thermometer_IRC_NRF51822_.hexファイルを最初に確認したコンピュータのMBEDドライブの中に置きます。

f:id:yegang:20140712174314j:plain

 

ダウンロード中は赤いLEDが点灯し、ダウンロードが完了するとhexファイルは消えて、再マウントします。 これでmbed HRM1017は電波を発信して、advertise(自分の存在を周囲に知らせている)状態になっているわけです。     

iPadでmbed HRM1017を検出する

次にこのmbed HRM1017のを検出する親機側の環境設定として、iPadAndroidにNordic社のnRF Toolboxをダウンロードします。

nRF Toolbox

nRF Toolbox

  • Nordic Semiconductor ASA
  • ユーティリティ
  • 無料

nRF Toolbox for Bluetooth LE - Apps on Google Play    

インストールしたnRF toolを起動してから、まずは温度計HTMを選択します。

f:id:yegang:20140712193250j:plain

 

CONNECTをクリックして、nRF5xが検出されていることを確認します。

私の場合は、最初うまく検出できず、mbedへのHEXファイルの再インストールとアプリの再起動をしたところ無事に検出するようになりました。(どちらの再起動が有効だったのかは分かりません。)

f:id:yegang:20140712194201j:plain

f:id:yegang:20140712192805j:plain

 

アプリが温度やバッテリーを表示するようになっています。今はmbed HRM1017をUSBでつなげているだけで温度計も電池もついていないため、有効な数字は表示されていません。

f:id:yegang:20140712192808j:plain

 

以上で試用は終わりです。このようにmbed HRM1017は簡単に使えます。

通常の電子工作ならここまで来るのに、英語の分厚い仕様書やマニュアルをいくつも読み込み、プログラムを設計から実装までこなし、検証を行いながら ひたすらバグ取りと機器の不具合修理をしないといけません。

mbedは既にあるプログラムを利用するだけではなく、新しいプログラムを作るのも簡単です。次回からは既存のプログラムをどのように修正して自作の電子機器用にカスタマイズしていくかをやってみたいと思います。

【BLEを使う】nRF51822開発キット&mbed HRM1017購入

【BLEを使う】記事の一覧はこちら。

世の中には手段の為ならば目的を選ばないという様な どうしようもない連中も確実に存在するのだ つまり とどのつまりは我々のような

平野耕太ヘルシング」より引用

いままでの記事はこちらをご覧ください。

 

私はBLEを使いたいと思いました。ですが、何のために使うかはまだ考えていません。 BLEを用いてできることを手当たり次第に試していきたいと思います。

私の先生は「適切な目的を設定することが、適切な手段の選択を容易にし、君を適切な結果に導いてくれる」と言っていました。私は今日も先生の教えを破る不肖の徒です。

【開発キットを購入する】

さっそくBLEの開発環境を揃えることにします。 使用するのはNordic社製のnRF51822です。 開発キットとして以下の2つを購入しました。

① nRF51822 Development Kit & nRFgo Starter Kit

https://www.nordicsemi.com/jpn/node_176/Bluetooth-R-low-energy/nRF51822-Development-Kit

nRF24 Series - Nordic Semiconductor - nordicsemi.com

nRF51822開発キットとそれを利用するためのnRFgoスターターキットです。2つ合わせて5万5千円程度です。 私はSemiconductorStore.comで購入しました。

http://www.semiconductorstore.com/cart/pc/viewPrd.asp?idproduct=47954

http://www.semiconductorstore.com/cart/pc/viewPrd.asp?idproduct=42801

(開発キット外観)

f:id:yegang:20140712125158j:plain

(注意)

本開発キットは日本での技適を取っていないので、電波を発すると違法になります。

会社の電波暗室を私用で使える人。

頻繁にアメリカに出張して、そのついでに実験できる人。

どこの家庭にもある、ありふれたシールドボックス(約50万円)を使える人以外の方はご注意ください。  

② mbed HRM1017

mbed HRM1017をはじめよう - | Mbed

mbed HRM1017は、BLEによるBluetooth Smartデバイスを手軽に開発できる開発キットです。ソフトウェアの開発はmbed環境で行います。

Nordic nRF51822搭載mbed mbed HRM1017 - スイッチサイエンスより引用

①のnRF51822開発キットを使う前に手軽に試せるキットが欲しかったので購入しました。価格は5,400円です。 以下のサイトで購入できます。

mbed HRM1017--販売終了 - スイッチサイエンス

せんごくネット通販

Amazonからでも購入できるそうです。

ボタン電池CR2032と大きさを比較した写真)

f:id:yegang:20140712125205j:plain

では、次回から早速これらを使ってみたいと思います。

 

(追記)

国内でNordicの開発環境が使用できる、技適取得済みのBLEモジュールがあったので追記します。

①ホシデン(nRFgo Starter Kitにも使用可能)

ホシデン 総合電子部品メーカー

HRM1017評価キット - スイッチサイエンス

太陽誘電

Bluetooth® low energy|太陽誘電株式会社

③BVMCN5102_BK Kit

http://www.braveridge.com/bluetooth.html#BT LE Dev Tool